Skip to content

Sign and notarize macOS builds with Developer ID - #146

Merged
kevinkamto merged 9 commits into
mainfrom
feat/macos-signing
Oct 15, 2026
Merged

kevinkamto merged 9 commits into
mainfrom
feat/macos-signing

Conversation

@kevinkamto

@kevinkamto kevinkamto commented Oct 15, 2026 •

Copy link
Copy Markdown
Collaborator

Closes #145

What changes

  • package.json build.mac: drop ad-hoc identity: "-", enable hardenedRuntime and notarize, add forceCodeSigning so a missing certificate fails the build instead of shipping unsigned.
  • release.yml: the mac job writes the App Store Connect .p8 from a secret to $RUNNER_TEMP (electron-builder's APPLE_API_KEY is a path) and gets the signing and notarization env. The Windows job gets empty values, so it never tries to sign NSIS with the Apple .p12.
  • README and the mac auto-updater comment no longer describe builds as ad-hoc signed.

Existing ad-hoc installs reach the signed build through the current mac update path (download the .dmg from GitHub releases and open it), so no manual reinstall is needed. Switching to Squirrel.Mac silent updates can be a follow-up once most users are on a signed build.

Before merging

All six repository secrets must exist, or the next mac release fails at signing or notarization:

  • CSC_LINK
  • CSC_KEY_PASSWORD
  • APPLE_API_KEY_P8
  • APPLE_API_KEY_ID
  • APPLE_API_ISSUER (waiting on the account holder)
  • APPLE_TEAM_ID

Verify after the first release

codesign --verify --deep --strict --verbose=2 "/Applications/Power Interview AI.app"
spctl --assess --type execute --verbose "/Applications/Power Interview AI.app"
# expect: accepted, source=Notarized Developer ID

Check both arm64 and x64. Local electron-builder --mac without the certificate now fails by design. For the old ad-hoc build, add -c.mac.identity=- -c.mac.hardenedRuntime=false -c.mac.notarize=false -c.mac.forceCodeSigning=false.

🤖 Generated with Claude Code

Replace ad-hoc signing with the Developer ID Application certificate and
notarize through an App Store Connect API key. forceCodeSigning makes a
missing certificate fail the build instead of shipping unsigned. Signing
secrets are passed to the mac job only, so the Windows build never tries
to sign NSIS with the Apple .p12.

Closes #145

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@gitar-bot

gitar-bot Bot commented Oct 15, 2026 •

Copy link
Copy Markdown

Gitar is working

Verification

Rules No rules evaluated

Functional validation Not enabled

Set up

Auto-approval Not enabled

Set up

Gitar

actions-user and others added 5 commits October 15, 2026 16:20
Test release run with publish=false; nothing was released.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
26.15.x passed the .p12 password to `security set-key-partition-list`
instead of the temporary keychain's password, so every CSC_LINK build
failed with "SecKeychainUnlock: The user name or passphrase you entered
is not correct". Fixed upstream in 26.16.0.

Refs #145

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Second test release run with publish=false; nothing was released.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@kevinkamto

Copy link
Copy Markdown
Collaborator Author

Test build with publish=false on this branch: https://github.com/PowerInterviewAI/client-app/actions/runs/38769478902

  • arm64 and x64 both signed with Developer ID Application: KEVIN DARHIL KAMTO (identity hash 3BAEA910...5FD9) and notarization succeeded, so all six secrets are valid.
  • The first attempt failed on an electron-builder 26.15.3 bug (set-key-partition-list got the .p12 password instead of the keychain password); bumped to 26.17.0.
  • Each test run pushed a version-bump commit here; both are reverted, so the branch still says 1.9.4. No tag or release was created.

alpha5611331 and others added 3 commits October 15, 2026 12:08
The mac artifact bundled both DMGs and both update zips into one ~540 MB
zip, so testing a single build meant downloading all four. Each installer
is now uploaded with archive: false (upload-artifact v7) and can be
downloaded on its own; update metadata stays in a small zipped artifact
per platform.

The publish job downloads installers with skip-decompress so the mac
update .zip files reach the release as-is instead of being extracted.

Refs #145

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Third test release run with publish=false; nothing was released.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@kevinkamto
kevinkamto merged commit cd9334a into main Oct 15, 2026
1 check passed
@alpha5611331
alpha5611331 deleted the feat/macos-signing branch October 15, 2026 19:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Sign and notarize macOS builds with Developer ID

3 participants