macos-spm-app-packaging について
Xcode を使わずに SwiftPM の macOS アプリを作成、パッケージ化するスキルです。ひな形と、ビルド、実行、署名、公証、リリース準備用のスクリプトを提供します。
主な機能
- 01SwiftPM macOS アプリのひな形作成
- 02SwiftPM によるビルドとテスト
- 03アプリバンドルのパッケージ化と起動
- 04リリースビルドの署名と公証
- 05Sparkle の appcast エントリー生成
活用シーン
- 01Xcode なしで macOS アプリ開発を開始
- 02SwiftPM アプリのパッケージ化と実行
- 03署名・公証済みリリースの準備
- 04更新用 appcast エントリーの作成
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ dimillian/ skills --skill macos-spm-app-packagingインストール後、Claude Code で/macos-spm-app-packagingを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
agents/openai.yamlassets/templates/build_icon.shcompile_and_run.shlaunch.shmake_appcast.shpackage_app.shsetup_dev_signing.shsign-and-notarize.shversion.envassets/templates/bootstrap/Package.swiftversion.envassets/templates/bootstrap/Sources/MyApp/main.swiftassets/templates/bootstrap/Sources/MyApp/Resources/.keepreferences/packaging.mdrelease.mdscaffold.md詳細
macOS SwiftPM アプリのパッケージ化(Xcode なし)
概要
SwiftPM の macOS アプリフォルダー一式を作成してから、Xcode を使わずにビルド、パッケージ化、実行します。スターターレイアウトには assets/templates/bootstrap/ を使用し、パッケージ化とリリースの詳細については references/packaging.md と references/release.md を参照してください。
2 段階のワークフロー
-
プロジェクトフォルダーを作成する
assets/templates/bootstrap/を新しいリポジトリにコピーします。Package.swift、Sources/MyApp/、version.env内のMyAppを変更します。APP_NAME、BUNDLE_ID、バージョンをカスタマイズします。
-
作成したアプリをビルド、パッケージ化、実行する
assets/templates/からスクリプトをリポジトリにコピーします(例:Scripts/)。- ビルド/テスト:
swift buildとswift test。 - パッケージ化:
Scripts/package_app.sh。 - 実行:
Scripts/compile_and_run.sh(推奨)またはScripts/launch.sh。 - リリース(任意):
Scripts/sign-and-notarize.shとScripts/make_appcast.sh。 - タグ付けと GitHub リリース(任意):git タグを作成し、zip/appcast を GitHub リリースにアップロードして公開します。
最小限のエンドツーエンドの例
作成からアプリの実行までの最短手順:
# 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
検証チェックポイント
次のステージに進む前に問題を早期に検出できるよう、重要な手順の後にこれらを実行します。
パッケージ化後(Scripts/package_app.sh):
# 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
署名後(Scripts/sign-and-notarize.sh または開発用のアドホック署名):
# 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
公証とステープリングの後:
# 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
公証でよくある失敗
| 症状 | 考えられる原因 | 対処方法 |
|---|---|---|
The software asset has already been uploaded | 同じバージョンを重複して送信している | version.env の BUILD_NUMBER を増やして、再パッケージ化します。 |
Package Invalid: Invalid Code Signing Entitlements | .entitlements ファイルのエンタイトルメントがプロビジョニングと一致していない | Apple が許可する項目とエンタイトルメントを照合し、サポートされていないキーを削除します。 |
The executable does not have the hardened runtime enabled | codesign の呼び出しに --options runtime フラグがない | sign-and-notarize.sh を編集し、すべての codesign 呼び出しに --options runtime を追加します。 |
| 公証が停止する/ステータスメールが届かない | xcrun notarytool のネットワークまたは認証情報の問題 | xcrun notarytool history を実行してステータスを確認します。有効期限が切れている場合は、App Store Connect API キーを再エクスポートします。 |
公証成功後に stapler validate が失敗する | チケットがまだ反映されていない | 約 60 秒待ってから、xcrun stapler staple を再実行します。 |
テンプレート
assets/templates/package_app.sh:バイナリをビルドし、.app バンドルを作成して、リソースをコピーし、署名します。assets/templates/compile_and_run.sh:実行中のアプリを終了して、パッケージ化し、起動する開発用ループ。assets/templates/build_icon.sh:Icon Composer ファイルから .icns を生成します(Xcode のインストールが必要です)。assets/templates/sign-and-notarize.sh:リリースビルドを公証、ステープリングし、zip にします。assets/templates/make_appcast.sh:アップデート用の Sparkle appcast エントリーを生成します。assets/templates/setup_dev_signing.sh:安定した開発用コード署名 ID を作成します。assets/templates/launch.sh:パッケージ化された .app のシンプルなランチャー。assets/templates/version.env:パッケージ化スクリプトが読み込むバージョンファイルの例。assets/templates/bootstrap/:最小構成の SwiftPM macOS アプリのひな形(Package.swift、Sources/、version.env)。
注意事項
- エンタイトルメントと署名設定は明示的に管理し、再実装するのではなくテンプレートスクリプトを編集してください。
- アップデートに Sparkle を使用しない場合は、Sparkle 関連の手順を削除してください。
- Sparkle はバンドルのビルド番号(
CFBundleVersion)に依存するため、アップデートごとにversion.envのBUILD_NUMBERを増やす必要があります。 - メニューバーアプリの場合は、パッケージ化時に
MENU_BAR_APP=1を設定すると、Info.plist にLSUIElementが出力されます。
コメント
Markdown 対応