SHIPPING.md
Shipping Amped (Part 2 — notarize & distribute)
The signed build is already notarization-ready (Developer ID, Hardened Runtime,
secure timestamp, no get-task-allow). What's left is notarizing it with Apple.
Do this when you're ready to hand the app to anyone else.
One-time setup
- Create an app-specific password: appleid.apple.com → Sign-In & Security → App-Specific Passwords. Copy it.
- Store a notarytool credential profile named
Amped(matchesNOTARY_PROFILEin.env):sh1 xcrun notarytool store-credentials "Amped" \ 2 --apple-id "YOUR_APPLE_ID_EMAIL" \ 3 --team-id 82K3YC8HVF \ 4 --password "PASTE-THE-APP-SPECIFIC-PASSWORD"
Every release
| 1 | cd /Users/gustaf/Repos/Gustaf/amped |
| 2 | ./build.sh # Developer ID signed (reads .env) |
| 3 | ./notarize.sh # zip → notarytool submit --wait → stapler staple → verify |
Ends with ✅ Notarized & stapled. Hand out the stapled dist/Amped.app
(zip it, or wrap in a DMG).
GitHub releases
Pushing to main runs .github/workflows/release.yml, which builds an unsigned
app and attaches Amped-<version>.zip to a GitHub Release. No Apple secrets.
See docs/RELEASING.md.
Notarized, self-replacing updates are not part of that workflow. The steps above are for a local notarized build when you want one.
If notarization fails
notarytool prints a submission id. Get the detailed reasons with:
| 1 | xcrun notarytool log <submission-id> --keychain-profile "Amped" |
Common causes: a binary missing Hardened Runtime, no secure timestamp, or a
get-task-allow entitlement — all of which build.sh already handles.
Status / TODO
- Developer ID Application cert installed (team 82K3YC8HVF)
- Signed build verified notarization-ready
- Helper approved + lid-closed confirmed working locally
- Run
./notarize.shfor the first real notarized build - (optional) DMG packaging for distribution