feat: ship a .dmg alongside the macOS zip - #63
Merged
Merged
Conversation
The zip is what CI could upload safely, so it became what people downloaded -- and a zip of an .app leaves them dragging it into /Applications themselves, if they think to. Build a disk image from the finished bundle instead: the app and a symlink to /Applications, which is the install everyone already knows. Built after stapling, from the bundle rather than a rebuild, so whatever signing happened is already inside it -- and copied with ditto, the only copy that carries a bundle's symlinks and extended attributes across without voiding the signature. The image is signed and notarized in its own right, not just for what it carries: Gatekeeper assesses the .dmg when it is opened, before anything inside it has been looked at. Unlike the flat MCP binary a .dmg takes a stapled ticket, so `stapler staple` is also the check on the submission -- it fails on a rejected image rather than passing quietly, and needs no grep through the notarytool log. The zip stays: it is still what anything that unpacks a download itself wants. The release workflow needed no change -- it uploads dist/* and its `rm -rf dist/Schist.app` still leaves the image alone. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0197wHPNr9Kf1DwXTDkuMJaB
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The zip is what CI could upload safely, so it became what people downloaded -- and a zip of an .app leaves them dragging it into /Applications themselves, if they think to. Build a disk image from the finished bundle instead: the app and a symlink to /Applications, which is the install everyone already knows.
Built after stapling, from the bundle rather than a rebuild, so whatever signing happened is already inside it -- and copied with ditto, the only copy that carries a bundle's symlinks and extended attributes across without voiding the signature.
The image is signed and notarized in its own right, not just for what it carries: Gatekeeper assesses the .dmg when it is opened, before anything inside it has been looked at. Unlike the flat MCP binary a .dmg takes a stapled ticket, so
stapler stapleis also the check on the submission -- it fails on a rejected image rather than passing quietly, and needs no grep through the notarytool log.The zip stays: it is still what anything that unpacks a download itself wants. The release workflow needed no change -- it uploads dist/* and its
rm -rf dist/Schist.appstill leaves the image alone.Claude-Session: https://claude.ai/code/session_0197wHPNr9Kf1DwXTDkuMJaB