Safeguard
Developer Tools•

Why was my Mac app rejected by notarization? Common causes and fixes

Mac notarization usually fails for a short list of reasons: wrong certificate, no hardened runtime, no secure timestamp, debug entitlement or an old SDK.

Safeguard Security Team
4 min read

Notarization usually fails for one of a few reasons: the app was not signed with a Developer ID certificate, the Hardened Runtime is off, the signature lacks a secure timestamp, the debug entitlement is still present, or the app links an old SDK. Read the notary log, because it names the exact problem.

Start with the log

Apple says the notary service reports problems in log files, and advises you to fix them and notarize again. It also says to check the log even when notarization succeeds, because it can contain warnings you can fix before the next submission. Make fetching the log a standard step in your release script, not something you do only on failure.

The common causes

CauseWhat to checkFix
Unsigned or modified after signingTest the signature with the code signing tool in verbose, deep and strict modesSign again after the last change to the bundle
Wrong certificateCertificate type is not Developer IDRe-sign with Developer ID Application
Hardened Runtime offCapability not enabledEnable it, then add only needed exceptions
No secure timestampCustom export skipped itAdd the timestamp option when signing
Debug entitlement presentEntitlement for debugging is in the signatureBuild the release configuration, remove it
Old SDKBinary linked against an SDK before macOS 10.9Rebuild with a current SDK
Malformed entitlementsBinary property list or odd charactersUse a plain XML, ASCII entitlements file

Each row comes from Apple's resolving-issues page.

Three that bite custom pipelines

Secure timestamp. Apple says Xcode does not add a secure timestamp during a normal build. It adds one during archive and export. If you use a custom export process, you need to add the timestamp option yourself. Generating a timestamp needs internet access, so a locked-down build agent can fail here.

Debug entitlement. New macOS projects in Xcode enable an entitlement that helps debugging when System Integrity Protection is on. Apple warns this is a security risk in a shipping app because it can allow code injection at runtime. Xcode strips it in the standard export, but a custom workflow can leave it in.

Entitlements file format. The file must be ASCII with no byte order mark. Apple says a binary property list is rejected, and that since macOS 10.15.4 processes with malformed embedded entitlements no longer run.

A repeatable fix loop

  1. Fetch the notary log for the failed submission.
  2. Match each issue to a row above.
  3. Fix the signing script, not the single build, so the next release does not repeat it.
  4. Verify the signature locally before you resubmit.
  5. Resubmit, fetch the log again, and read any warnings.

Where Safeguard fits

Notarization checks signing and malicious content. It is not a review of your third-party dependencies. Safeguard scans dependencies and builds SBOMs for that, and a free scan is available at gold.safeguard.sh/scan.

Quick check

Does a successful notarization mean there were no problems?

Not necessarily. Apple advises reading the log even on success, since it may list warnings worth fixing.

Why did my export notarize from Xcode but fail from my script?

Xcode adds the secure timestamp and strips the debug entitlement in its standard export. A custom script has to do both itself.

Sources

Last reviewed: 19 October 2026.

Never miss an update

Weekly insights on software supply chain security, delivered to your inbox.

Self-healing security runs on Safeguard.

Your first fix PR is minutes away.

No sales call required, even your agent can complete the purchase over MCP.