Downloaded builds currently trigger macOS Gatekeeper's "QuickToss.app is damaged and can't be opened" error on Apple Silicon, since the app isn't signed with a Developer ID or notarized (hardenedRuntime: true is set, but electron-builder skips signing entirely when no identity is found — confirmed in CI logs: skipped macOS application code signing ... 0 valid identities found).
This is a hard UX blocker for every new user, and it also puts the auto-update flow (#4 below, or wherever it lands) at risk — a downloaded update .zip carries the same quarantine flag as the initial download.
Current workaround
Users have to run xattr -cr /Applications/QuickToss.app manually after install.
Scope
- Enroll in the Apple Developer Program if not already ($99/year)
- Generate a "Developer ID Application" certificate, export as
.p12
- Add signing secrets to GitHub Actions:
CSC_LINK, CSC_KEY_PASSWORD
- Add notarization credentials:
APPLE_ID, APPLE_APP_SPECIFIC_PASSWORD (or API key), APPLE_TEAM_ID
- Set
mac.notarize in package.json (or the newer electron-builder notarize config) and remove the gatekeeperAssess: false override once signing is verified
- Confirm both x64 and arm64 builds launch cleanly on a fresh Mac without the
xattr workaround
- Verify the auto-update flow (download → quit-and-install) also works cleanly once signed
Downloaded builds currently trigger macOS Gatekeeper's "QuickToss.app is damaged and can't be opened" error on Apple Silicon, since the app isn't signed with a Developer ID or notarized (
hardenedRuntime: trueis set, butelectron-builderskips signing entirely when no identity is found — confirmed in CI logs:skipped macOS application code signing ... 0 valid identities found).This is a hard UX blocker for every new user, and it also puts the auto-update flow (#4 below, or wherever it lands) at risk — a downloaded update
.zipcarries the same quarantine flag as the initial download.Current workaround
Users have to run
xattr -cr /Applications/QuickToss.appmanually after install.Scope
.p12CSC_LINK,CSC_KEY_PASSWORDAPPLE_ID,APPLE_APP_SPECIFIC_PASSWORD(or API key),APPLE_TEAM_IDmac.notarizeinpackage.json(or the newerelectron-buildernotarize config) and remove thegatekeeperAssess: falseoverride once signing is verifiedxattrworkaround