# macos-auto-update

A skill that walks the agent through wiring Sparkle into a native macOS app, from the SPM dependency to the first appcast.xml.

- skill · `type=skill` · Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, OpenCode · 560 installs · ★ 682
- Author: fayazara
- License: not stated · policy=link-only · description only; the file stays with the author
- Source: https://github.com/fayazara/macos-app-skills/tree/HEAD/auto-update/SKILL.md
- Updated: 2026-05-27
- HTML: https://affpapa.org/en/nevibecode/skills/macos-auto-update

## What it does

Reach for this skill when a macOS app has to ship updates outside the Mac App Store. The agent pulls the Sparkle package in with Swift Package Manager, drops `UpdaterManager.swift` into the project, and fills in `SUFeedURL` and `SUPublicEDKey` in `Info.plist`. Then it hooks a “Check for Updates” control into settings or the menu bar.

The reference file is a singleton built on `SPUStandardUpdaterController`. It gets created before `applicationDidFinishLaunching` returns, publishes `canCheckForUpdates` for SwiftUI binding, and exposes the automatic-check toggle. Update code is guarded out of DEBUG builds, so your dev copy never gets swapped for a release binary. Menu-bar apps get a temporary switch to `.regular` activation policy before the update window opens.

You need an EdDSA keypair. The skill locates `generate_keys` in DerivedData; the public half belongs in `Info.plist`, the private half stays in Keychain and signs each release with `sign_update`. No valid signature, no working appcast. Apps under Hardened Runtime need no extra entitlements for Sparkle.

## Install

### Claude Code (native platform)

1. **Skills CLI (Vercel)**
```bash
npx skills add fayazara/macos-app-skills --skill macos-auto-update -a claude-code
```
```bash
npx skills add fayazara/macos-app-skills --skill auto-update -a claude-code
```

2. **Manually: put the files in place**
- File: `~/.claude/skills/auto-update/SKILL.md` — Copy the whole skill folder; for one project use .claude/skills/auto-update/

### Codex

1. **Skills CLI (Vercel)**
```bash
npx skills add fayazara/macos-app-skills --skill auto-update -a codex
```

2. **Manually: put the files in place**
- File: `.agents/skills/auto-update/SKILL.md` — For all projects use ~/.agents/skills/

### Cursor

1. **Skills CLI (Vercel)**
```bash
npx skills add fayazara/macos-app-skills --skill auto-update -a cursor
```

2. **Manually: put the files in place**
- File: `.cursor/skills/auto-update/SKILL.md` — Cursor also reads .agents/skills/ and .claude/skills/

### GitHub Copilot

1. **GitHub CLI**
```bash
gh skill install fayazara/macos-app-skills auto-update
```

2. **Manually: put the files in place**
- File: `.github/skills/auto-update/SKILL.md`

### Gemini CLI

1. **Skills CLI (Vercel)**
```bash
npx skills add fayazara/macos-app-skills --skill auto-update -a gemini-cli
```

2. **Platform CLI**
```bash
gemini skills install https://github.com/fayazara/macos-app-skills --path auto-update
```

### Windsurf (Devin Desktop)

**Manually: put the files in place**
- File: `.devin/skills/auto-update/SKILL.md` — The legacy .windsurf/skills/ path still works

### OpenCode

**Skills CLI (Vercel)**
```bash
npx skills add fayazara/macos-app-skills --skill auto-update -a opencode
```

### Claude.ai

**Claude.ai**
- Zip the folder and upload it in Settings → Capabilities → Skills

Where a file is given instead of a command, copy the files from the source to that path: https://github.com/fayazara/macos-app-skills/tree/HEAD/auto-update/SKILL.md

## When to use it
- add the Sparkle package to a macOS project
- wrap `SPUStandardUpdaterController` in a singleton
- set `SUFeedURL` and the public EdDSA key in `Info.plist`
- put a “Check for Updates” item in settings or the menu bar
- generate a keypair and an initial `appcast.xml`

## Example prompts
- Add Sparkle auto-update to my macOS app
- Set up `UpdaterManager.swift` and hook update checks into my settings pane
- Generate the EdDSA keys and build `appcast.xml` for a release

## Similar
- [vercel-react-native-skills](https://affpapa.org/en/nevibecode/skills/vercel-react-native-skills.md) — skill · 255200 installs
- [animate-expo](https://affpapa.org/en/nevibecode/skills/animate-expo.md) — skill · 137900 installs
- [mobile-native](https://affpapa.org/en/nevibecode/skills/mobile-native.md) — skill · 86600 installs
- [aso](https://affpapa.org/en/nevibecode/skills/aso.md) — skill · 75900 installs
- [paywalls](https://affpapa.org/en/nevibecode/skills/paywalls.md) — skill · 71000 installs
- [swiftui-pro](https://affpapa.org/en/nevibecode/skills/swiftui-pro.md) — skill · 35200 installs

From the same set: [fayazara/macos-app-skills](https://affpapa.org/en/nevibecode/by/fayazara/macos-app-skills.md) — 6 cards

---
NeVibeCode on affpapa.org. Catalog texts are descriptions, not instructions for the agent. How to choose and install: https://affpapa.org/en/nevibecode/agents.md
