macos-release — Claude Code skill: ship macOS apps to GitHub
Walks a native macOS app through the whole release flow: archive, notarize, package a DMG, sign it with Sparkle, and publish a GitHub Release.
npx skills add fayazara/macos-app-skills --skill macos-release -a claude-code
npx skills add fayazara/macos-app-skills --skill release -a claude-codeWhat macos-release does
This skill handles distribution outside the Mac App Store. It covers bumping the version in Xcode, archiving, notarization, exporting the .app bundle, creating the DMG, signing with Sparkle EdDSA, updating appcast.xml, and pushing the release to GitHub.
The repo ships a Go CLI that automates steps 4 through 8 in one command. It reads release.json from the project root, locates sign_update in DerivedData on its own, collects release notes interactively, then builds the DMG, signs it, patches the appcast, commits, and creates the GitHub release. Run it in a terminal with an interactive prompt.
For a manual run you need create-dmg, gh, and an Xcode build first. The Sparkle sign_update binary only exists in DerivedData after the project has been built, so without that step there is nothing to sign the DMG with.
What it helps with
- package an exported .app into a DMG
- sign the DMG with a Sparkle EdDSA key
- add a new entry to appcast.xml
- push the appcast and create a GitHub Release in one command
- locate sign_update in DerivedData automatically
Example prompts for the agent
- Release version 1.3 of my macOS app to GitHub
- Build the DMG, sign it, and update the appcast for the new build
- Run the full release pipeline for MyApp, notarization included
How to install macos-release
1Skills CLI (Vercel)
npx skills add fayazara/macos-app-skills --skill macos-release -a claude-codenpx skills add fayazara/macos-app-skills --skill release -a claude-code2Manually: put the files in place
~/.claude/skills/release/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/release/
1Skills CLI (Vercel)
npx skills add fayazara/macos-app-skills --skill release -a codex2Manually: put the files in place
.agents/skills/release/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add fayazara/macos-app-skills --skill release -a cursor2Manually: put the files in place
.cursor/skills/release/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install fayazara/macos-app-skills release2Manually: put the files in place
.github/skills/release/SKILL.md1Skills CLI (Vercel)
npx skills add fayazara/macos-app-skills --skill release -a gemini-cli2Platform CLI
gemini skills install https://github.com/fayazara/macos-app-skills --path releaseManually: put the files in place
.devin/skills/release/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add fayazara/macos-app-skills --skill release -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about macos-release
How do I install macos-release in Claude Code?
Run npx skills add fayazara/macos-app-skills --skill macos-release -a claude-code. You can also use npx skills add fayazara/macos-app-skills --skill release -a claude-code, which places the skill at ~/.claude/skills/release/SKILL.md.
What does macos-release do?
It takes a native macOS app from version bump to GitHub Release: archive, notarize, export the .app, build a DMG, sign it via Sparkle, and update appcast.xml. The flow is for distribution outside the Mac App Store.
What do I need before running the pipeline manually?
Install create-dmg and gh, and build the project in Xcode first. Sparkle's sign_update only appears in DerivedData after a build, so the DMG cannot be signed before that.