Safeguard
Developer Tools•

Should you sign your Sparkle appcast feed as well as the archives?

Signing update archives is the baseline. Sparkle can also require a signed feed and release notes. Here is what that adds, what it needs and what to watch.

Safeguard Security Team
3 min read

Signing the archives is the baseline, and signing the appcast feed is an extra layer worth considering. Sparkle can require that the feed and release notes are signed too, using the SURequireSignedFeed setting, so someone who edits the feed cannot quietly change what users see or are pointed to.

Archive signature versus feed signature

The archive signature answers one question: is this file the one the key holder signed? The appcast is a different object. It is the list that tells the app which version is newest, where to download it, and what the release notes say.

Per the Sparkle documentation, generate_appcast signs the appcast and release notes only when the app opts into SURequireSignedFeed. Without that opt in, an attacker who can edit the feed cannot forge an archive signature, but can still mislead the app in other ways, such as withholding news of a newer release.

What you need to turn it on

The documentation lists these pieces:

  • SURequireSignedFeed signs the feed and release notes.
  • SUVerifyUpdateBeforeExtraction must also be enabled.
  • The page says signed feeds are validated as of Sparkle 2.9.
  • If you edit a signed appcast or its release notes by hand, you must regenerate the signatures.

That last point is an operational detail that bites teams. A hotfix to release notes in a text editor will break verification until the signatures are rebuilt.

The fallback window

SUSignedFeedFailureExpirationInterval sets a fallback period. When it expires, Sparkle strips some information, such as release notes and links. Think of it as a graceful degradation setting for apps that already shipped before the feed was signed. Choose the interval deliberately and write down why.

A short decision guide

SituationSuggested step
New app, no installed baseTurn on signed feed from the first release
Existing app, mixed Sparkle versionsCheck each shipped version supports it before requiring it
Hand edited appcast in your processMove to generated feeds first, then enable signing
Feed hosted on shared storageTreat signed feed as more important, since many people can write there

Try it yourself

A signed feed is a policy that has to hold on every release. The gate demo shows how a rule can block a change before it ships. Click through it and think about which of your release steps could carry a similar check.

Click through it at your own pace, or open it full screen.

Quick check

Does a signed feed replace archive signing?

No. The documentation treats EdDSA signing of archives as the main integrity mechanism and the signed feed as an optional addition.

Is HTTPS required for Sparkle feeds?

The documentation recommends serving updates over HTTPS and following Apple's App Transport Security requirements. It does not state HTTPS as a strict requirement, but there is little reason to skip it.

Safeguard's policies and gates can check a build before release, and its SBOM and dependency scanning shows what a desktop app ships. A free scan is at gold.safeguard.sh/scan.

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.