Skip to content

Add a Makefile and a notarized release target - #6

Merged
winebarrel merged 1 commit into
mainfrom
feat/release
Aug 9, 2026
Merged

winebarrel merged 1 commit into
mainfrom
feat/release

Conversation

@winebarrel

Copy link
Copy Markdown
Owner

make release builds with the Developer ID identity and a secure timestamp, submits the bundle to Apple's notary service, staples the returned ticket, and writes dist/Macstify.zip with a SHA-256 dist/checksum.txt.

make          # build
make install  # build and copy to ~/Library/Screen Savers
make preview  # build and open the MacstifyPreview window
make lint     # swiftlint --strict
make format   # swiftformat
make release  # Developer ID sign → notarize → staple → dist/
make clean

The submitted zip and the distributed zip are deliberately separate files. Stapling applies to the bundle, so the distributable has to be re-zipped after the ticket comes back — zipping once and submitting that same file would ship an unstapled bundle.

CODESIGN_IDENTITY is matched by prefix (Developer ID Application), so no name or team ID is hardcoded. Both it and NOTARY_PROFILE can be overridden on the command line.

Also in here

What Xcode wrote into project.pbxproj while the project was open: automatic signing with a development team, and ENABLE_HARDENED_RUNTIME on the Macstify target. Notarization refuses a bundle without the hardened runtime.

Xcode sets it on both Debug and Release. That's fine here — the flag governs a process, and this bundle runs inside Apple's legacyScreenSaver, so it changes nothing at runtime either way.

Verification

  • make build, make lint, make format all pass.
  • make -n release reviewed; the signing half was run for real earlier and produced Authority=Developer ID Application, flags=0x10000(runtime) and a secure timestamp.
  • Not run end to end: make release submits to Apple, so the notarize/staple half is unverified.

🤖 Generated with Claude Code

https://claude.ai/code/session_01MVZKaTdW5LpcwGnwAV22ZV

make release builds with the Developer ID identity and a secure
timestamp, submits to the notary service, staples the ticket, and writes
dist/Macstify.zip with a SHA-256 checksum.txt. The submitted zip and the
distributed zip are separate files: stapling applies to the bundle, so
the distributable has to be re-zipped after the ticket comes back.

CODESIGN_IDENTITY is matched by prefix, so no name or team id is
hardcoded. Both it and NOTARY_PROFILE can be overridden on the command
line.

Also commits what Xcode wrote while the project was open: automatic
signing with a development team, and ENABLE_HARDENED_RUNTIME on the
Macstify target. Notarization refuses a bundle without the hardened
runtime, and Xcode sets it on both configurations - for a bundle that
runs inside legacyScreenSaver rather than as its own process, the flag
changes nothing at runtime either way.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@winebarrel
winebarrel enabled auto-merge August 9, 2026 08:49
@winebarrel
winebarrel merged commit c6240e4 into main Aug 9, 2026
3 checks passed
@winebarrel
winebarrel deleted the feat/release branch August 9, 2026 08:49
winebarrel added a commit that referenced this pull request Aug 9, 2026
Add a Makefile and a notarized release target
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