Skip to content

Latest commit

 

History

History
79 lines (53 loc) · 2.58 KB

File metadata and controls

79 lines (53 loc) · 2.58 KB

DisplayFill Direct Release

This project is configured for direct macOS distribution with Developer ID signing and notarization. The Mac App Store path is documented separately in APP_STORE.md.

What Changed

  • Release builds use DisplayFill/LightRelease.entitlements instead of the sandbox entitlements file.
  • Release builds enable Hardened Runtime, which Apple requires for notarized macOS apps distributed outside the Mac App Store.
  • scripts/set_version.sh updates the app version and build number in the Xcode project.
  • scripts/release_direct.sh archives, exports, verifies, notarizes, staples, and zips the app.

One-Time Setup

  1. Join the Apple Developer Program and install a Developer ID Application certificate in your login keychain.
  2. Open the target in Xcode and set your signing team, or export TEAM_ID when running the release script.
  3. Create a notary keychain profile with notarytool.
xcrun notarytool store-credentials "DisplayFill-Notary" \
  --apple-id "YOUR_APPLE_ID" \
  --team-id "YOUR_TEAM_ID" \
  --password "YOUR_APP_SPECIFIC_PASSWORD"

For CI, you can use an App Store Connect API key instead of an Apple ID, but the script in this repo expects a saved keychain profile name.

Release Flow

Run the commands below from the repository root.

  1. Set the version you want to ship.
./scripts/set_version.sh 2.0 20
  1. Build, export, notarize, staple, and zip the app.
TEAM_ID="YOUR_TEAM_ID" \
NOTARY_PROFILE="DisplayFill-Notary" \
./scripts/release_direct.sh
  1. Upload the generated zip from dist/ to GitHub Releases, your website, or any other direct-download channel.

Local QA Build

If you only need a signed build for local testing and want to skip notarization:

TEAM_ID="YOUR_TEAM_ID" \
SKIP_NOTARIZATION=1 \
./scripts/release_direct.sh

That produces a zip in dist/, but it is not suitable for public distribution.

Output Files

  • build/DisplayFill.xcarchive
  • dist/export/DisplayFill.app
  • dist/DisplayFill-<version>-<build>-macOS.zip
  • dist/DisplayFill-<version>-<build>-macOS.notary.json

Verification

The release script already runs these checks:

  • codesign --verify --deep --strict --verbose=2
  • xcrun stapler validate
  • spctl -a -t exec -vv

If notarization fails, inspect the JSON log saved in dist/.

Notes

  • The app target uses the checked-in DisplayFill/Info.plist; keep its version fields in sync with the Xcode build settings.
  • If you later want in-app auto-updates for direct distribution, add Sparkle on top of this release pipeline rather than replacing it.