Problem
The NATIVE_ONLY_REDESIGN.md document lists notarization as a required gate before shipping the native app to end users, but the release.yml workflow has no notarization step. As a result:
- Binaries published to GitHub Releases are ad-hoc signed only.
- Gatekeeper will quarantine the app on first launch unless users manually run
xattr -d com.apple.quarantine.
- The release process relies on a undocumented manual notarization step that is easy to forget.
Proposed Fix
Add a notarize job in release.yml (after the build job, before the publish job) that:
- Runs on a macOS self-hosted runner with Xcode and an Apple Developer certificate available.
- Signs the
.app bundle with the full Developer ID certificate (not ad-hoc).
- Submits to Apple Notary Service via
xcrun notarytool submit --wait.
- Staples the notarization ticket via
xcrun stapler staple.
- Zips the stapled bundle and uploads it as the release asset.
Required secrets: APPLE_DEVELOPER_CERT_P12, APPLE_CERT_PASSWORD, APPLE_TEAM_ID, APPLE_NOTARY_KEY_ID, APPLE_NOTARY_KEY_ISSUER, APPLE_NOTARY_PRIVATE_KEY.
If a self-hosted macOS runner is not available for CI, document the manual notarization procedure in docs/INSTALLATION.md as an interim measure with a clear "not yet automated" callout.
Acceptance Criteria
Problem
The
NATIVE_ONLY_REDESIGN.mddocument lists notarization as a required gate before shipping the native app to end users, but therelease.ymlworkflow has no notarization step. As a result:xattr -d com.apple.quarantine.Proposed Fix
Add a
notarizejob inrelease.yml(after the build job, before the publish job) that:.appbundle with the full Developer ID certificate (not ad-hoc).xcrun notarytool submit --wait.xcrun stapler staple.Required secrets:
APPLE_DEVELOPER_CERT_P12,APPLE_CERT_PASSWORD,APPLE_TEAM_ID,APPLE_NOTARY_KEY_ID,APPLE_NOTARY_KEY_ISSUER,APPLE_NOTARY_PRIVATE_KEY.If a self-hosted macOS runner is not available for CI, document the manual notarization procedure in
docs/INSTALLATION.mdas an interim measure with a clear "not yet automated" callout.Acceptance Criteria
.appbundle before packaging.docs/bootstrap/onboarding.md.