Safeguard
Developer Tools•

What is the secure timestamp in Mac code signing and how do you check it?

A secure timestamp in a Mac code signature is required for notarization. See when Xcode adds it, when your own script must, and how to check a binary.

Safeguard Security Team
3 min read

A secure timestamp is a signed time record from Apple's timestamp service that gets embedded in a Mac code signature. Notarization requires it. Xcode adds it during archive and export, but custom signing scripts must request it, and you can check a binary with the code signing tool's verbose display.

Definitions

A timestamp in code signing records that the signature was made at a given time. Without one, a signature is judged against the current date. The Apple notarization requirements list a secure timestamp as mandatory for software distributed with Developer ID.

This post covers the Apple side. Windows has its own version of the idea, covered in a separate post on Authenticode timestamps at /resources/blog/authenticode-timestamp-why-always-timestamp-windows-releases.

When Xcode adds it for you

Apple's resolving-issues page says that by default Xcode does not include a secure timestamp during the build. It adds one during the archive step, as of Xcode 10.2, and during export workflows.

If you build with the standard Distribute App flow in Xcode, you are covered. The trouble starts when a script signs the app itself, or a build tool re-signs a framework after export.

When you must add it yourself

For a custom export process, Apple says to add the secure timestamp option to the code signing flags build setting, or to pass the option directly to the signing tool if you sign by hand. Notarization fails with a message about the missing timestamp if you do not.

Two practical points from the same page:

  • Generating a secure timestamp needs internet access.
  • macOS accepts one secure timestamp server, which Apple publishes with its address ranges.

So a build agent behind a strict firewall needs a rule that allows Apple's timestamp service. Without it, signing can fail or produce a signature that notarization then rejects.

How to check a binary

Apple describes a check using the code signing tool's display mode with elevated verbosity. For a binary with a secure timestamp, the output includes a timestamp value with a date. If the output shows the timestamp as none, the binary does not have one.

codesign -dvv MyApp.app 2>&1 | grep -i timestamp

Run this on the final artifact, and on nested items such as frameworks and helper tools too, since Apple's requirements apply to every executable you distribute.

Why this matters beyond the notary service

A timestamp lets a signature stay meaningful after the signing certificate itself has expired, because the time of signing is proven. That is the reason release teams treat it as non-optional, even for platforms that do not force it.

A short pipeline checklist

  1. Confirm your signing step passes the timestamp option.
  2. Allow the build agent to reach Apple's timestamp service.
  3. Check the timestamp on the final app and on nested code.
  4. Fail the build if any executable shows no timestamp.

Where Safeguard fits

Timestamps prove when a build was signed, not what was inside it. Safeguard scans dependencies and records SBOMs per release, with a free scan at gold.safeguard.sh/scan.

Quick check

Does Xcode always add a secure timestamp?

No. Apple says it adds one during archive and export, not during an ordinary build. Custom scripts must add it themselves.

Can I sign without internet access?

A secure timestamp needs internet access, so an offline build agent cannot produce one. Allow the agent to reach Apple's timestamp service.

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.