Skip to content

fix: sign Sparkle's Autoupdate so notarization passes - #10

Merged
TerrifiedBug merged 1 commit into
mainfrom
fix/sign-sparkle-autoupdate
Aug 27, 2026
Merged

fix: sign Sparkle's Autoupdate so notarization passes#10
TerrifiedBug merged 1 commit into
mainfrom
fix/sign-sparkle-autoupdate

Conversation

@TerrifiedBug

Copy link
Copy Markdown
Owner

v0.1.0 notarization came back Invalid. Apple's log, both architectures, all on one path:

Sparkle.framework/Versions/B/Autoupdate
  The binary is not signed with a valid Developer ID certificate.
  The signature does not include a secure timestamp.
  The executable does not have the hardened runtime enabled.

Autoupdate is a bare Mach-O executable, so it matched neither *.xpc nor *.app and the inside-out loop skipped it. It kept the ad-hoc signature package_app.sh applies for dev launches. Now bare Mach-O helpers beside the nested bundles are signed too; nested bundles are pruned because their main executables get signed with their bundle, and the framework's own Sparkle binary is signed with the framework.

Second bug, same class as the find-identity one: notarytool submit --wait exits 0 even when the submission is Invalid, so the script continued into stapler and failed there with Record not found — an error that says nothing about the cause. It now reads the status and dumps the notary log on anything other than Accepted.

Verified locally against the real notary service, not just inspection:

MacOS/Browseroute                                  team=92X3ACDPD2 flags=0x10000(runtime) ts=1
Sparkle.framework/Versions/B/Autoupdate            team=92X3ACDPD2 flags=0x10000(runtime) ts=1
Sparkle.framework/.../Updater.app/.../Updater      team=92X3ACDPD2 flags=0x10000(runtime) ts=1
Sparkle.framework/.../Downloader.xpc/.../Downloader team=92X3ACDPD2 flags=0x10000(runtime) ts=1
Sparkle.framework/.../Installer.xpc/.../Installer  team=92X3ACDPD2 flags=0x10000(runtime) ts=1
Sparkle.framework/Versions/B/Sparkle               team=92X3ACDPD2 flags=0x10000(runtime) ts=1

notarytool submit --wait  ->  {"status":"Accepted"}   (23s)

Apple rejected v0.1.0 with three errors, both architectures, all on
Sparkle.framework/Versions/B/Autoupdate: not signed with a valid
Developer ID certificate, no secure timestamp, no hardened runtime.

Autoupdate is a bare Mach-O, so it matched neither *.xpc nor *.app and
the inside-out loop skipped it, leaving the ad-hoc signature that
package_app.sh applies. Sign bare Mach-O helpers beside the bundles,
pruning nested bundles whose executables are signed with their bundle.

notarytool also exits 0 on an Invalid submission, so the script walked
on to stapler and died with "Record not found", which says nothing
about the cause. Read the status and print the notary log instead.

Verified: every Mach-O in the bundle now reports team 92X3ACDPD2,
flags=0x10000(runtime) and a timestamp, and the real notary service
returns Accepted in 23s.
@TerrifiedBug
TerrifiedBug merged commit 037753d into main Aug 27, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant