Skip to content

Add local macOS release signing and notarization - #23

Merged
CoffeeFlux merged 2 commits into
masterfrom
macos-release-signing
Sep 12, 2026
Merged

Add local macOS release signing and notarization#23
CoffeeFlux merged 2 commits into
masterfrom
macos-release-signing

Conversation

@CoffeeFlux

@CoffeeFlux CoffeeFlux commented Sep 12, 2026

Copy link
Copy Markdown
Member

macOS CI artifacts need local Developer ID signing before they can load in Aegisub with library validation enabled. Add osx-sign.sh to sign a downloaded artifact and atomically refresh its dylib checksum, plus osx-notarize.sh to validate and submit a ZIP using a stored Keychain profile. The release ZIP is created only after Apple accepts the submission; failures show the submission status and available notary log.

The scripts follow Aegisub's local release process, support custom signing/notary keychains, and require no dependency rebuild. Notarization requires the expected Aegisub Team ID and checks it before submission. ZIP root folders follow the output filename, and publication refuses to overwrite a file created while awaiting Apple. Brief instructions live in docs/releasing.md. Standalone dylibs and ZIPs do not support stapling.

Validation: ShellCheck and local ARM64/Intel Meson tests pass. Both macOS CI jobs run regression tests covering real ad-hoc signing, refreshed checksums, rejection of modified inputs, wrong platforms/teams, and ad-hoc notarization; nested checksums; simulated accepted/rejected/timed-out submissions; and preservation of an output created during notarization. Tests cannot contact Apple's service. Live validation was repeated with the final scripts and the downloaded artifacts from this PR. A real signed dylib was rejected when supplied with the wrong expected Team ID. With the correct team, both ARM64 and Intel dylibs were Developer ID-signed with secure timestamps, Apple returned Accepted / Ready for distribution with no issues for both ZIPs, and all packaged checksums verified. The signed ARM64 dylib loaded and rendered through the wrapper inside the existing Developer ID-signed Aegisub release with hardened-runtime library validation enabled, using an isolated test profile.

All five hosted CI jobs pass, including both macOS release-script tests and all artifact uploads.

@CoffeeFlux
CoffeeFlux merged commit 73e9588 into master Sep 12, 2026
5 checks 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