guide-macos-spm-packaging について
Xcodeを使わずにmacOS SwiftPMアプリを作成、ビルド、パッケージ化して実行するための開発者向けワークフローガイドです。テンプレートとスクリプトを含み、署名やリリースの手順も任意で扱います。
主な機能
- 01SwiftPMアプリのひな形作成
- 02SwiftPMでのビルドとテスト
- 03アプリバンドルのパッケージ化と実行
- 04署名と公証のオプション手順
- 05リリースとappcast用スクリプト
活用シーン
- 01Xcodeを使わずmacOSアプリを始める
- 02.appバンドルの作成と検証
- 03署名・公証済みリリースの準備
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ prisma-labs-dev/ apple-skills --skill guide-macos-spm-packagingインストール後、Claude Code で/guide-macos-spm-packagingを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
assets/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詳細
ガイドスキル — API リファレンスドキュメントではなく、専門的なワークフロー/パターンガイドです。 Thomas Ricouard が作成した Dimillian/Skills が元になっています。MIT ライセンスです。
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 対応