Mac app notarization and signing checklist
Shipping outside the Mac App Store means signing your app with your Developer ID and having Apple notarize it. This checklist walks through each step, in order, plus the misses that catch people out. Tick it off on screen, or print it.
Free to use. No sign-up.
The checklist
Before you sign
Notarize
Staple and package
Requirements change. Check Apple's current documentation before each release.
Commands for reference
These are the basic forms of Apple's command-line tools. Replace MyApp and the keychain profile with your own. Your setup may need more options, so check Apple's documentation.
# Verify the signature
codesign --verify --deep --strict --verbose=2 MyApp.app
# Zip the app for upload
ditto -c -k --keepParent MyApp.app MyApp.zip
# Submit for notarization and wait for the result
xcrun notarytool submit MyApp.zip --keychain-profile "notary" --wait
# Staple the ticket, then check it
xcrun stapler staple MyApp.app
xcrun stapler validate MyApp.app
# Make the zip again from the stapled app
ditto -c -k --keepParent MyApp.app MyApp.zip
# Ask Gatekeeper about the app
spctl --assess --type execute --verbose MyApp.app
Common misses
Notarized, but never stapled
The app passes notarization, but the ticket never gets attached. Without a stapled ticket, Gatekeeper has to look it up online. One of Quality.Noted's demo projects has exactly this: a release script that notarized the app but never stapled the ticket.
Zipped before stapling
Stapling changes the app on disk. If the zip you upload was made before stapling, the copy your users download doesn't have the ticket. Staple first, then make the zip.
Unsigned helpers and frameworks
Every piece of code inside the app needs a valid signature with the hardened runtime. Notarization rejects the submission if a helper, framework or tool inside the app isn't signed correctly.
Debug settings in the release build
A debugging entitlement such as get-task-allow left on in the release build causes notarization to fail. Check the entitlements of the build you actually submit.
Testing only on your own Mac
A build you made yourself isn't marked as downloaded, so Gatekeeper doesn't check it the way it checks your users' copies. Test the real download on a clean Mac or a fresh user account.
More from Apple: Resolving common notarization issues
Check it before every release with Quality.Noted
Catch problems before release, prep for wherever you ship (Mac App Store, Homebrew or direct download), and know when your Mac app is ready.
- Pick your project and where you ship. Choose direct download or Homebrew, then a Quick, Standard or Thorough audit.
- Run the audit with your own Claude Code. The Release Cert phase checks the app against where you ship, including signing and notarization.
- Fix and re-check. Findings come ranked worst first, with file and line. A re-check confirms the fixes.
Free to try: 5 Quick audits and 1 Standard · macOS 26+ on Apple silicon · Quality.Noted never sends your code to us; audits run under your own Claude account.
Questions
Do I need to notarize an app for the Mac App Store?
No. Apps you submit to the Mac App Store go through App Review instead. Notarization is for apps you distribute outside the Mac App Store, such as a direct download or Homebrew.
What does stapling do?
Stapling attaches the notarization ticket to your app, disk image or installer package. Gatekeeper can then check the ticket even when the Mac is offline, instead of looking it up online.
How much does Quality.Noted cost?
It's free to try: 5 Quick audits, 1 Standard audit and 1 app. The full version is US$14.99 one-time early-bird (later $19.99), tax added, for up to 2 Macs, with a 21-day refund.
What do I need to run Quality.Noted?
macOS 26 Tahoe or later on Apple silicon, and Claude Code signed in with your own Claude plan or API key.
Mac app release checklist → · Prepare a Mac app for Homebrew → · See everything Quality.Noted does → · Help →