freekmurze/dotfiles/release
Claude Code and agent skill by freekmurze/dotfiles
- community
Checking that the SKILL.md file is still in the repository.
Release a native macOS app to GitHub with DMG packaging and Sparkle appcast updates. Use this skill whenever the user wants to publish a new version, create a release, ship an update, push a release to GitHub, or update the appcast. Also trigger when the user mentions DMG creation, Sparkle signing, notarization, archiving, or anything related to distributing a new version of their macOS app. This covers the full release pipeline: archive, notarize, export, create DMG, sign with Sparkle EdDSA, u…
Install
npx vskill@latest install freekmurze/dotfiles/releaseSKILL.md
Release macOS App
This skill covers the full release pipeline for distributing a native macOS app outside the Mac App Store via GitHub Releases with Sparkle auto-update support.
Release Pipeline Overview
Prerequisites
The user needs these tools installed:
| Tool | Install | Purpose | |
|---|---|---|---|
create-dmg | brew install create-dmg | Creates the DMG installer | |
gh | brew install gh | Creates GitHub releases | |
git | Built-in | Pushes appcast changes | |
Sparkle sign_update | Built automatically when the project is built with Sparkle | EdDSA-signs the DMG |
The sign_update binary lives in DerivedData after building the project in Xcode:
Step-by-Step Release Guide
1. Bump Version Numbers
In Xcode, update:
MARKETING_VERSION(e.g.,1.2) -- the user-facing versionCURRENT_PROJECT_VERSION(e.g.,5) -- the build number (must be unique per release)
Or via command line:
2. Archive in Xcode
Product > Archive. This creates a release build with the proper signing identity.
3. Notarize and Export
In the Archives organizer:
- Select the archive > Distribute App
- Choose "Direct Distribution" (or "Developer ID" for notarization)
- Wait for notarization to complete
- Export to
~/Downloads/YourApp.app
4. Create DMG
5. Sign DMG with Sparkle
This outputs the EdDSA signature and file length:
Save both values for the appcast.
6. Update appcast.xml
Add a new <item> at the top of the <channel> in your appcast.xml:
The pubDate should be RFC 2822 format. Generate it:
7. Commit and Push Appcast
8. Create GitHub Release
Automating the Pipeline
For frequent releases, build a CLI tool that automates steps 4-8. See references/release-pipeline.md for a template Go CLI that handles DMG creation, signing, appcast updates, and GitHub release creation in one command.
The CLI should:
- Find
sign_updatein DerivedData automatically - Read version/build from the exported app's Info.plist via
plutil - Parse and update appcast.xml (preserving existing entries)
- Interactively collect release notes
- Show a summary and ask for confirmation before proceeding
- Create the GitHub release with the DMG attached
Release CLI Tool
This repo includes a Go CLI that automates steps 4-8 (DMG creation through GitHub release) in a single command. It reads configuration from a release.json file in your project root.
Setup
- Create a
release.jsonin your project root (seecli/release.example.json):
Only app_name and github_repo are required. Everything else has sensible defaults:
| Field | Default | Description | |
|---|---|---|---|
bundle_name | {app_name}.app | The .app bundle filename | |
dmg_name | {app_name}.dmg | Output DMG filename | |
git_branch | main | Branch to push appcast to | |
min_system_version | 14.0 | Sparkle minimum macOS version | |
appcast_file | appcast.xml | Appcast filename in repo root | |
derived_data_prefixes | ["{app_name}-"] | DerivedData prefixes to search for sign_update |
- Run the CLI from your project directory:
Or clone this repo and run locally:
The CLI is interactive -- it prompts for release notes and asks for confirmation before proceeding. It must be run in a terminal the user can interact with.
What the CLI Does
- Finds
release.jsonby walking up from the current directory - Checks that
create-dmg,gh,git, and Sparkle'ssign_updateare available - Validates the exported app in
~/Downloads/(reads version, build, Sparkle keys from Info.plist) - Warns if the build number already exists in the appcast
- Collects release notes interactively (one bullet per line, empty line to finish)
- Shows a release summary and asks for confirmation
- Creates the DMG via
create-dmg - Signs the DMG with Sparkle's
sign_update(EdDSA) - Updates
appcast.xmlwith the new release entry - Commits and pushes the appcast
- Creates a GitHub release with the DMG attached
Common Issues
| Problem | Solution | |
|---|---|---|
sign_update not found | Build the project in Xcode first so DerivedData has the Sparkle artifacts | |
gh auth failure | Run gh auth login | |
| Duplicate build number in appcast | Bump CURRENT_PROJECT_VERSION before archiving | |
| Notarization fails | Check signing identity, entitlements, and hardened runtime settings | |
| DMG is too large | Check for debug symbols or unnecessary frameworks in the export | |
| App won't update | Verify SUFeedURL points to the raw appcast URL, not the GitHub page URL |
Appcast Hosting
The simplest hosting: commit appcast.xml to your GitHub repo and use the raw URL:
This must match SUFeedURL in your app's Info.plist.
Security
- Security scanPassed, 100 of 100Pattern checks on the skill's files.
- Model reviewNot runA model review is scheduled for the next rescan.
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingconfig/claude/skills/release/SKILL.md
Popularity
- 7-day trend score
- 0
Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/freekmurze/dotfiles/release)