From c8cb2091654aa053b4322936933eb859ee1c91f6 Mon Sep 17 00:00:00 2001 From: Harvey Zuccon Date: Mon, 27 Apr 2026 23:42:44 +1000 Subject: [PATCH] add release script to dmg --- .gitignore | 5 +- .../CommandNotch.xcodeproj/project.pbxproj | 12 ---- .../UserInterfaceState.xcuserstate | Bin 45796 -> 45534 bytes README.md | 28 ++++++++ scripts/build-release-dmg.sh | 63 ++++++++++++++++++ 5 files changed, 95 insertions(+), 13 deletions(-) create mode 100755 scripts/build-release-dmg.sh diff --git a/.gitignore b/.gitignore index 974c238..a68401f 100644 --- a/.gitignore +++ b/.gitignore @@ -80,4 +80,7 @@ dist/ build/ # Mac... files -**/.DS_Store \ No newline at end of file +**/.DS_Store + +# Releases +releases/ \ No newline at end of file diff --git a/CommandNotch/CommandNotch.xcodeproj/project.pbxproj b/CommandNotch/CommandNotch.xcodeproj/project.pbxproj index 4f3e447..9af2fa9 100644 --- a/CommandNotch/CommandNotch.xcodeproj/project.pbxproj +++ b/CommandNotch/CommandNotch.xcodeproj/project.pbxproj @@ -511,20 +511,14 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_ENTITLEMENTS = CommandNotch/Resources/CommandNotch.entitlements; - CODE_SIGN_IDENTITY = "Apple Development"; - CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - DEVELOPMENT_TEAM = G698BP272N; INFOPLIST_FILE = CommandNotch/Resources/Info.plist; - INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.developer-tools"; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/../Frameworks", ); - MARKETING_VERSION = 0.0.3; PRODUCT_BUNDLE_IDENTIFIER = com.commandnotch.app; PRODUCT_NAME = CommandNotch; - PROVISIONING_PROFILE_SPECIFIER = ""; SDKROOT = macosx; }; name = Debug; @@ -616,20 +610,14 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_ENTITLEMENTS = CommandNotch/Resources/CommandNotch.entitlements; - CODE_SIGN_IDENTITY = "Apple Development"; - CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - DEVELOPMENT_TEAM = G698BP272N; INFOPLIST_FILE = CommandNotch/Resources/Info.plist; - INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.developer-tools"; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/../Frameworks", ); - MARKETING_VERSION = 0.0.3; PRODUCT_BUNDLE_IDENTIFIER = com.commandnotch.app; PRODUCT_NAME = CommandNotch; - PROVISIONING_PROFILE_SPECIFIER = ""; SDKROOT = macosx; }; name = Release; diff --git a/CommandNotch/CommandNotch.xcodeproj/project.xcworkspace/xcuserdata/harvmaster.xcuserdatad/UserInterfaceState.xcuserstate b/CommandNotch/CommandNotch.xcodeproj/project.xcworkspace/xcuserdata/harvmaster.xcuserdatad/UserInterfaceState.xcuserstate index 53017dcbe9e074aff9cee9f77f64ac8315aeae00..9f6b18ffc143cfbf6019e850e450771325195ad3 100644 GIT binary patch delta 21048 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 nMy> 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 EKmE}T)2 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 NRIB*zd(OT1{{b/dev/null 2>&1; then + echo "error: xcodegen is required. Install it with: brew install xcodegen" >&2 + exit 1 +fi + +if ! command -v create-dmg >/dev/null 2>&1; then + echo "error: create-dmg is required. Install it with: brew install create-dmg" >&2 + exit 1 +fi + +timestamp="$(date '+%Y-%m-%d %H-%M-%S')" +release_dir="$APP_ROOT/releases/CommandNotch $timestamp" +archive_path="/tmp/CommandNotch-$timestamp.xcarchive" +staging_dir="$(mktemp -d)" +app_path="$release_dir/CommandNotch.app" +dmg_path="$release_dir/CommandNotch.dmg" + +cleanup() { + rm -rf "$staging_dir" +} + +trap cleanup EXIT + +mkdir -p "$release_dir" + +cd "$PROJECT_DIR" +xcodegen generate --spec project.yml + +DEVELOPER_DIR="${DEVELOPER_DIR:-/Applications/Xcode.app/Contents/Developer}" \ + xcodebuild archive \ + -project CommandNotch.xcodeproj \ + -scheme CommandNotch \ + -configuration Release \ + -destination 'generic/platform=macOS' \ + -archivePath "$archive_path" + +ditto "$archive_path/Products/Applications/CommandNotch.app" "$app_path" +ditto "$app_path" "$staging_dir/CommandNotch.app" +ln -s /Applications "$staging_dir/Applications" + +create-dmg \ + --volname "CommandNotch" \ + --window-pos 200 120 \ + --window-size 720 420 \ + --icon-size 128 \ + --icon "CommandNotch.app" 180 210 \ + --icon "Applications" 540 210 \ + --hide-extension "CommandNotch.app" \ + --app-drop-link 540 210 \ + "$dmg_path" \ + "$staging_dir" + +echo "Created:" +echo " $app_path" +echo " $dmg_path"