Skip to content

docs: macOS signing + notarization checklist + entitlements - #30

Merged
CSSFrancis merged 2 commits into
mainfrom
docs/mac-signing
Jul 21, 2026
Merged

docs: macOS signing + notarization checklist + entitlements#30
CSSFrancis merged 2 commits into
mainfrom
docs/mac-signing

Conversation

@CSSFrancis

Copy link
Copy Markdown
Member

Ready-to-follow guide for signing + notarizing SpyDE on macOS once an Apple Developer account is available — no more Gatekeeper "unidentified developer" wall, and the auto-update .zip becomes trusted too.

Adds:

  • electron/SIGNING.md — the full checklist: Developer ID cert → .p12 export → App Store Connect API key → GitHub secrets → exact electron-builder.yml + release.yml diffs (matrix-gated to the mac leg) → verify with spctl/codesign/stapler. Plus SpyDE-specific gotchas (the Python-sidecar / native-wheel entitlement, notarizing the zip, notarytool debugging).
  • electron/build/entitlements.mac.plist — the hardened-runtime entitlements. disable-library-validation is load-bearing: SpyDE spawns a uv-managed Python subprocess whose native wheels (torch/numba/rosettasciio) are signed by other teams, which the hardened runtime would otherwise refuse to load.
  • .gitignore un-ignores electron/build/ (the broad Python build/ rule was hiding electron-builder's buildResources dir).
  • Links the guide from PACKAGING.md.

No behavior change — signing stays off (mac.identity: null) until the secrets + config flip land per the guide. The entitlements plist is validated (well-formed, 4 expected keys).

Add electron/SIGNING.md — the step-by-step to flip SpyDE's macOS build from
unsigned to signed + notarized once an Apple Developer account is in hand: create
the Developer ID cert, export the .p12, make an App Store Connect API key, set the
GitHub secrets, the exact electron-builder.yml + release.yml diffs (matrix-gated
to the mac leg), and how to verify (spctl / codesign / stapler).

Ship the entitlements file it needs now: electron/build/entitlements.mac.plist
(hardened-runtime keys). The disable-library-validation key is load-bearing for
SpyDE specifically — the app spawns a uv-managed Python subprocess whose native
wheels (torch/numba/rosettasciio) are signed by other teams, and the hardened
runtime would otherwise refuse to load them.

Un-ignore electron/build/ in .gitignore (the broad Python `build/` rule was
hiding electron-builder's buildResources dir, which holds TRACKED source). Link
the guide from PACKAGING.md. No behavior change — signing stays off (identity:
null) until the secrets + config flip land.
Answer "which intermediate?": Developer ID Certification Authority (G2) — not the
retired non-G2 one, not Developer ID Installer. Normally auto-installed by Xcode /
double-clicking the cert; only matters on a CI runner missing it. Document
exporting the full chain into the .p12 (Cmd-click cert + G2 intermediate) and add
a fetch-the-intermediate fallback to the CI keychain step so codesign can always
build the chain.
@CSSFrancis
CSSFrancis merged commit e2241c5 into main Jul 21, 2026
21 checks passed
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.

1 participant