К основному содержанию
скилл CX Codex

macos-spm-app-packaging — скилл для Claude Code: сборка

Скилл помогает собрать macOS-приложение на SwiftPM без проекта Xcode: от скелета до подписи, нотаризации и appcast.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add Dimillian/Skills --skill macos-spm-app-packaging -a claude-code
Открыть на GitHub

Что делает macos-spm-app-packaging

Скилл ведёт по двум шагам. Сначала вы копируете assets/templates/bootstrap/ в новый репозиторий и переименовываете MyApp в Package.swift, Sources/MyApp/ и version.env, задаёте APP_NAME, BUNDLE_ID и версии. Потом копируете скрипты из assets/templates/ в Scripts/, собираете через swift build и swift test, пакуете Scripts/package_app.sh и запускаете Scripts/compile_and_run.sh.

Внутри — готовые шаблоны: сборка .app-бандла с ресурсами и подписью, dev-цикл с перезапуском приложения, генерация .icns из файла Icon Composer, нотаризация со stapling и zip, appcast для Sparkle, стабильная dev-подпись и простой лаунчер. Для релиза есть Scripts/sign-and-notarize.sh и Scripts/make_appcast.sh, дальше — тег и публикация на GitHub.

Есть таблица частых сбоев нотаризации с причиной и лечением: дубликат версии, несовпадение entitlements, отсутствие --options runtime в codesign, зависание xcrun notarytool, не прикрепившийся тикет stapler. Скрипты рассчитаны на macOS, а build_icon.sh требует установленного Xcode. Если Sparkle вам не нужен, шаги с ним из шаблонов лучше убрать — иначе BUILD_NUMBER в version.env придётся поднимать на каждом обновлении.

Какие задачи решает

  • развернуть скелет macOS-приложения на SwiftPM с нуля
  • собрать .app-бандл скриптом вместо Xcode
  • подписать и нотаризовать релизную сборку
  • сгенерировать appcast для обновлений Sparkle
  • настроить стабильную dev-подпись для локальных запусков

Примеры запросов агенту

  • Собери скелет macOS-приложения на SwiftPM и переименуй MyApp в HelloApp
  • Запакуй приложение через Scripts/package_app.sh и запусти его
  • Подпиши и нотаризуй релизную сборку, потом сделай appcast

Как установить macos-spm-app-packaging

1Через Skills CLI (Vercel)

npx skills add Dimillian/Skills --skill macos-spm-app-packaging -a claude-code

2Вручную: положить файлы

~/.claude/skills/macos-spm-app-packaging/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/macos-spm-app-packaging/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Вопросы о macos-spm-app-packaging

Как установить macos-spm-app-packaging в Claude?

Выполните npx skills add Dimillian/Skills --skill macos-spm-app-packaging -a claude-code. Скилл появится в ~/.claude/skills/macos-spm-app-packaging/SKILL.md.

Что делает macos-spm-app-packaging?

Проводит от создания папки SwiftPM-приложения до сборки, упаковки в .app, подписи, нотаризации и генерации appcast, всё без проекта Xcode.

Что нужно для работы скилла?

Скрипты запускаются на macOS, а Scripts/build_icon.sh требует установленного Xcode. Для нотаризации нужен ключ App Store Connect API.

Исходный текст

SKILL.md · MIT
---
name: macos-spm-app-packaging
description: Scaffold, build, and package SwiftPM-based macOS apps without an Xcode project. Use when you need a from-scratch macOS app layout, SwiftPM targets/resources, a custom .app bundle assembly script, or signing/notarization/appcast steps outside Xcode.
---

# macOS SwiftPM App Packaging (No Xcode)

## Overview
Bootstrap a complete SwiftPM macOS app folder, then build, package, and run it without Xcode. Use `assets/templates/bootstrap/` for the starter layout and `references/packaging.md` + `references/release.md` for packaging and release details.

## Two-Step Workflow
1) Bootstrap the project folder
   - Copy `assets/templates/bootstrap/` into a new repo.
   - Rename `MyApp` in `Package.swift`, `Sources/MyApp/`, and `version.env`.
   - Customize `APP_NAME`, `BUNDLE_ID`, and versions.

2) Build, package, and run the bootstrapped app
   - Copy scripts from `assets/templates/` into your repo (for example, `Scripts/`).
   - Build/tests: `swift build` and `swift test`.
   - Package: `Scripts/package_app.sh`.
   - Run: `Scripts/compile_and_run.sh` (preferred) or `Scripts/launch.sh`.
   - Release (optional): `Scripts/sign-and-notarize.sh` and `Scripts/make_appcast.sh`.
   - Tag + GitHub release (optional): create a git tag, upload the zip/appcast to the GitHub release, and publish.

## Minimum End-to-End Example
Shortest path from bootstrap to a running app:
```bash
# 1. Copy and rename the skeleton
cp -R assets/templates/bootstrap/ ~/Projects/MyApp
cd ~/Projects/MyApp
sed -i '' 's/MyApp/HelloApp/g' Package.swift version.env

# 2. Copy scripts
cp assets/templates/package_app.sh Scripts/
cp assets/templates/compile_and_run.sh Scripts/
chmod +x Scripts/*.sh

# 3. Build and launch
swift build
Scripts/compile_and_run.sh
```

## Validation Checkpoints
Run these after key steps to catch failures early before proceeding to the next stage.

**After packaging (`Scripts/package_app.sh`):**
```bash
# Confirm .app bundle structure is intact
ls -R build/HelloApp.app/Contents

# Check that the binary is present and executable
file build/HelloApp.app/Contents/MacOS/HelloApp
```

**After signing (`Scripts/sign-and-notarize.sh` or ad-hoc dev signing):**
```bash
# Inspect signature and entitlements
codesign -dv --verbose=4 build/HelloApp.app

# Verify the bundle passes Gatekeeper checks locally
spctl --assess --type execute --verbose build/HelloApp.app
```

**After notarization and stapling:**
```bash
# Confirm the staple ticket is attached
stapler validate build/HelloApp.app

# Re-run Gatekeeper to confirm notarization is recognised
spctl --assess --type execute --verbose build/HelloApp.app
```

## Common Notarization Failures
| Symptom | Likely Cause | Recovery |
|---|---|---|
| `The software asset has already been uploaded` | Duplicate submission for same version | Bump `BUILD_NUMBER` in `version.env` and repackage. |
| `Package Invalid: Invalid Code Signing Entitlements` | Entitlements in `.entitlements` file don't match provisioning | Audit entitlements against Apple's allowed set; remove unsupported keys. |
| `The executable does not have the hardened runtime enabled` | Missing `--options runtime` flag in `codesign` invocation | Edit `sign-and-notarize.sh` to add `--options runtime` to all `codesign` calls. |
| Notarization hangs / no status email | `xcrun notarytool` network or credential issue | Run `xcrun notarytool history` to check status; re-export App Store Connect API key if expired. |
| `stapler validate` fails after successful notarization | Ticket not yet propagated | Wait ~60 s, then re-run `xcrun stapler staple`. |

## Templates
- `assets/templates/package_app.sh`: Build binaries, create the .app bundle, copy resources, sign.
- `assets/templates/compile_and_run.sh`: Dev loop to kill running app, package, launch.
- `assets/templates/build_icon.sh`: Generate .icns from an Icon Composer file (requires Xcode install).
- `assets/templates/sign-and-notarize.sh`: Notarize, staple, and zip a release build.
- `assets/templates/make_appcast.sh`: Generate Sparkle appcast entries for updates.
- `assets/templates/setup_dev_signing.sh`: Create a stable dev code-signing identity.
- `assets/templates/launch.sh`: Simple launcher for a packaged .app.
- `assets/templates/version.env`: Example version file consumed by packaging scripts.
- `assets/templates/bootstrap/`: Minimal SwiftPM macOS app skeleton (Package.swift, Sources/, version.env).

## Notes
- Keep entitlements and signing configuration explicit; edit the template scripts instead of reimplementing.
- Remove Sparkle steps if you do not use Sparkle for updates.
- Sparkle relies on the bundle build number (`CFBundleVersion`), so `BUILD_NUMBER` in `version.env` must increase for each update.
- For menu bar apps, set `MENU_BAR_APP=1` when packaging to emit `LSUIElement` in Info.plist.

© Dimillian · MIT · Dimillian/Skills

Похожие скиллы

Всё по теме «Мобильная разработка» →
swiftpm-macos официальный OpenAI Собирает, запускает и тестирует macOS-пакеты SwiftPM. Пригодится, когда главным входом служит Package.swift, а проекта Xcode нет. CX Codex GP ChatGPT 58установок spm-build-analysis AvdLee Скилл находит узкие места в зависимостях Swift Package Manager, плагинах сборки и структуре модулей Xcode. Пригодится, когда затягивается чистая или инкрементальная сборка проекта. CX Codex +1 3 400установок packaging-notarization официальный OpenAI Скилл помогает проверить архив macOS-приложения, подпись и готовность к нотариальному заверению. Пригодится перед распространением приложения или при разборе сбоев, возникающих только после сборки. CX Codex GP ChatGPT 56установок capacitor-app-spm-migration capawesome-team Скилл ведёт агента через перенос iOS-зависимостей Capacitor-приложения с CocoaPods на Swift Package Manager. Пригодится, когда ios/ уже оброс кастомными файлами. CX Codex +1 593установок cmux-architecture manaflow-ai Скилл задаёт правила разделения кода cmux на пакеты Swift, инверсии зависимостей и многопоточности Swift 6. Помогает переносить модули без циклических связей. CX Codex +1 4 900установок macos-development rshankras Скилл для разработки приложений под macOS: Swift 6+, SwiftUI, SwiftData, AppKit и API macOS 26 Tahoe. Пригодится на код-ревью и разборе архитектуры. CX Codex +1 1 600установок

Из того же набора11

swift-concurrency-expert Скилл проверяет и исправляет проблемы параллелизма в Swift 6.2+: добавляет Sendable, применяет @MainActor, решает предупреждения об изоляции акторов и переводит completion handlers на async/await. CX Codex +1 2 000установок app-store-changelog Собирает коммиты с последнего тега и превращает их в текст «What's New» для App Store. Пригодится перед каждой выкладкой в стор. CX Codex +1 1 300установок react-component-performance Находит причины медленного рендера в React, изолирует часто обновляемый стейт и убирает лишние вычисления. Помогает при лагах списков и анимаций. CX Codex +1 1 100установок github Даёт агенту команды утилиты gh CLI для работы с задачами, пулл-реквестами и запусками CI прямо из терминала. CX Codex +1 870установок review-and-simplify-changes Разбирает изменённый код на переиспользование, качество, эффективность и ясность, а потом по желанию вносит безопасные правки. Пригодится перед коммитом. CX Codex +1 794установок project-skill-audit Анализирует прошлые сессии Codex, файлы памяти и локальные навыки проекта. Рекомендует обновить устаревшие инструкции или создать новые под частые задачи. CX Codex +1 785установок review-swarm Проводит параллельное ревью git-диффа или выбранных файлов без изменений в рабочей копии. Нужен для поиска регрессий, рисков безопасности и пробелов в тестах. CX Codex +1 756установок bug-hunt-swarm Ищет первопричину багов параллельно через субагентов и ранжирует версии. Нужен для регрессий, сбоев и нестабильного поведения без правок кода. CX Codex +1 713установок

Спонсоры проекта

Компании, которые помогают держать аналитику открытой