2 Commits

Author SHA1 Message Date
Micha
db1f15f981 next test build 2025-11-21 13:56:45 +01:00
Micha
db58a5c048 Ensure CFBundleIconName references AppIcon 2025-11-20 21:02:36 +01:00
4 changed files with 35 additions and 9 deletions

View File

@@ -3,5 +3,6 @@
dynamic Data dynamic Data
static Data static Data
move source to /src. like iKeyMon before
add a merker for "reboot required" add a merker for "reboot required"
Add dmg download option for macOS
Add versioning

View File

@@ -6,9 +6,20 @@
// //
import SwiftUI import SwiftUI
#if os(macOS)
import AppKit
#endif
@main @main
struct iKeyMonApp: App { struct iKeyMonApp: App {
init() {
#if os(macOS)
if let customIcon = NSImage(named: "AppIcon") {
NSApplication.shared.applicationIconImage = customIcon
}
#endif
}
var body: some Scene { var body: some Scene {
WindowGroup { WindowGroup {
MainView() MainView()

View File

@@ -9,6 +9,7 @@
/* Begin PBXBuildFile section */ /* Begin PBXBuildFile section */
52A9B79F2EC8E7EE004DD4A2 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 52A9B7872EC8E7EE004DD4A2 /* Assets.xcassets */; }; 52A9B79F2EC8E7EE004DD4A2 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 52A9B7872EC8E7EE004DD4A2 /* Assets.xcassets */; };
52A9B8222EC8FA8A004DD4A2 /* CHANGELOG.md in Resources */ = {isa = PBXBuildFile; fileRef = 52A9B8212EC8FA8A004DD4A2 /* CHANGELOG.md */; }; 52A9B8222EC8FA8A004DD4A2 /* CHANGELOG.md in Resources */ = {isa = PBXBuildFile; fileRef = 52A9B8212EC8FA8A004DD4A2 /* CHANGELOG.md */; };
52A9B9722ECF751C004DD4A2 /* signing.env.example in Resources */ = {isa = PBXBuildFile; fileRef = 52A9B9712ECF751C004DD4A2 /* signing.env.example */; };
/* End PBXBuildFile section */ /* End PBXBuildFile section */
/* Begin PBXFileReference section */ /* Begin PBXFileReference section */
@@ -17,6 +18,7 @@
52A9B7882EC8E7EE004DD4A2 /* iKeyMon.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = iKeyMon.entitlements; sourceTree = "<group>"; }; 52A9B7882EC8E7EE004DD4A2 /* iKeyMon.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = iKeyMon.entitlements; sourceTree = "<group>"; };
52A9B8212EC8FA8A004DD4A2 /* CHANGELOG.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = CHANGELOG.md; sourceTree = "<group>"; }; 52A9B8212EC8FA8A004DD4A2 /* CHANGELOG.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = CHANGELOG.md; sourceTree = "<group>"; };
52A9B8BA2ECA35FB004DD4A2 /* NOTES.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = NOTES.md; sourceTree = "<group>"; }; 52A9B8BA2ECA35FB004DD4A2 /* NOTES.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = NOTES.md; sourceTree = "<group>"; };
52A9B9712ECF751C004DD4A2 /* signing.env.example */ = {isa = PBXFileReference; lastKnownFileType = text; path = signing.env.example; sourceTree = "<group>"; };
/* End PBXFileReference section */ /* End PBXFileReference section */
/* Begin PBXFileSystemSynchronizedRootGroup section */ /* Begin PBXFileSystemSynchronizedRootGroup section */
@@ -47,12 +49,13 @@
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
52A9B8BE2ECB68B5004DD4A2 /* Sources */, 52A9B8BE2ECB68B5004DD4A2 /* Sources */,
52A9B8BA2ECA35FB004DD4A2 /* NOTES.md */,
52A9B7872EC8E7EE004DD4A2 /* Assets.xcassets */, 52A9B7872EC8E7EE004DD4A2 /* Assets.xcassets */,
52A9B7882EC8E7EE004DD4A2 /* iKeyMon.entitlements */, 52A9B7882EC8E7EE004DD4A2 /* iKeyMon.entitlements */,
52A9B8F72ECB6B8A004DD4A2 /* Preview Content */, 52A9B8F72ECB6B8A004DD4A2 /* Preview Content */,
5203C24E2D997D2800576D4A /* Products */, 5203C24E2D997D2800576D4A /* Products */,
52A9B8212EC8FA8A004DD4A2 /* CHANGELOG.md */, 52A9B8212EC8FA8A004DD4A2 /* CHANGELOG.md */,
52A9B8BA2ECA35FB004DD4A2 /* NOTES.md */,
52A9B9712ECF751C004DD4A2 /* signing.env.example */,
); );
sourceTree = "<group>"; sourceTree = "<group>";
}; };
@@ -131,6 +134,7 @@
files = ( files = (
52A9B8222EC8FA8A004DD4A2 /* CHANGELOG.md in Resources */, 52A9B8222EC8FA8A004DD4A2 /* CHANGELOG.md in Resources */,
52A9B79F2EC8E7EE004DD4A2 /* Assets.xcassets in Resources */, 52A9B79F2EC8E7EE004DD4A2 /* Assets.xcassets in Resources */,
52A9B9722ECF751C004DD4A2 /* signing.env.example in Resources */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };
@@ -279,6 +283,7 @@
ENABLE_HARDENED_RUNTIME = YES; ENABLE_HARDENED_RUNTIME = YES;
ENABLE_PREVIEWS = YES; ENABLE_PREVIEWS = YES;
GENERATE_INFOPLIST_FILE = YES; GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_KEY_CFBundleIconName = AppIcon;
INFOPLIST_KEY_NSHumanReadableCopyright = ""; INFOPLIST_KEY_NSHumanReadableCopyright = "";
LD_RUNPATH_SEARCH_PATHS = ( LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)", "$(inherited)",
@@ -306,6 +311,7 @@
ENABLE_HARDENED_RUNTIME = YES; ENABLE_HARDENED_RUNTIME = YES;
ENABLE_PREVIEWS = YES; ENABLE_PREVIEWS = YES;
GENERATE_INFOPLIST_FILE = YES; GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_KEY_CFBundleIconName = AppIcon;
INFOPLIST_KEY_NSHumanReadableCopyright = ""; INFOPLIST_KEY_NSHumanReadableCopyright = "";
LD_RUNPATH_SEARCH_PATHS = ( LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)", "$(inherited)",

View File

@@ -21,6 +21,7 @@ xcodebuild \
-scheme "$SCHEME" \ -scheme "$SCHEME" \
-configuration Release \ -configuration Release \
-derivedDataPath "$BUILD_DIR" \ -derivedDataPath "$BUILD_DIR" \
CODE_SIGNING_ALLOWED=NO \
clean build clean build
APP_PATH="$BUILD_DIR/Build/Products/Release/iKeyMon.app" APP_PATH="$BUILD_DIR/Build/Products/Release/iKeyMon.app"
@@ -29,6 +30,20 @@ if [[ ! -d "$APP_PATH" ]]; then
exit 1 exit 1
fi fi
if [[ -n "${CODESIGN_IDENTITY:-}" ]]; then
echo "🔏 Codesigning app with identity: $CODESIGN_IDENTITY"
codesign \
--deep \
--force \
--options runtime \
--timestamp \
--entitlements "$ROOT_DIR/iKeyMon.entitlements" \
--sign "$CODESIGN_IDENTITY" \
"$APP_PATH"
else
echo "⚠️ Skipping codesign (CODESIGN_IDENTITY not set)."
fi
STAGING_DIR=$(mktemp -d) STAGING_DIR=$(mktemp -d)
mkdir -p "$STAGING_DIR" mkdir -p "$STAGING_DIR"
cp -R "$APP_PATH" "$STAGING_DIR/" cp -R "$APP_PATH" "$STAGING_DIR/"
@@ -36,13 +51,6 @@ ln -s /Applications "$STAGING_DIR/Applications"
mkdir -p "$STAGING_DIR/.background" mkdir -p "$STAGING_DIR/.background"
cp "$ROOT_DIR/Assets/dmg_background.png" "$STAGING_DIR/.background/background.png" cp "$ROOT_DIR/Assets/dmg_background.png" "$STAGING_DIR/.background/background.png"
if [[ -n "${CODESIGN_IDENTITY:-}" ]]; then
echo "🔏 Codesigning app with identity: $CODESIGN_IDENTITY"
codesign --deep --force --options runtime --sign "$CODESIGN_IDENTITY" "$APP_PATH"
else
echo "⚠️ Skipping codesign (CODESIGN_IDENTITY not set)."
fi
VERSION=$(xcodebuild \ VERSION=$(xcodebuild \
-project "$ROOT_DIR/$PROJECT" \ -project "$ROOT_DIR/$PROJECT" \
-scheme "$SCHEME" \ -scheme "$SCHEME" \