mcpField
M
macos-spm-app-packaging

macos-spm-app-packaging

github.com/dimillian開発4.0k1.4k 回インストール30 週間前に更新
リポジトリ

macos-spm-app-packaging について

Xcode を使わずに SwiftPM の macOS アプリを作成、パッケージ化するスキルです。ひな形と、ビルド、実行、署名、公証、リリース準備用のスクリプトを提供します。

主な機能

  1. 01SwiftPM macOS アプリのひな形作成
  2. 02SwiftPM によるビルドとテスト
  3. 03アプリバンドルのパッケージ化と起動
  4. 04リリースビルドの署名と公証
  5. 05Sparkle の appcast エントリー生成

活用シーン

  1. 01Xcode なしで macOS アプリ開発を開始
  2. 02SwiftPM アプリのパッケージ化と実行
  3. 03署名・公証済みリリースの準備
  4. 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.yaml
assets/templates/
build_icon.sh
compile_and_run.sh
launch.sh
make_appcast.sh
package_app.sh
setup_dev_signing.sh
sign-and-notarize.sh
version.env
assets/templates/bootstrap/
Package.swift
version.env
assets/templates/bootstrap/Sources/MyApp/
main.swift
assets/templates/bootstrap/Sources/MyApp/Resources/
.keep
references/
packaging.md
release.md
scaffold.md

詳細

macOS SwiftPM アプリのパッケージ化(Xcode なし)

概要

SwiftPM の macOS アプリフォルダー一式を作成してから、Xcode を使わずにビルド、パッケージ化、実行します。スターターレイアウトには assets/templates/bootstrap/ を使用し、パッケージ化とリリースの詳細については references/packaging.md と references/release.md を参照してください。

2 段階のワークフロー

  1. プロジェクトフォルダーを作成する

    • assets/templates/bootstrap/ を新しいリポジトリにコピーします。
    • Package.swift、Sources/MyApp/、version.env 内の MyApp を変更します。
    • APP_NAME、BUNDLE_ID、バージョンをカスタマイズします。
  2. 作成したアプリをビルド、パッケージ化、実行する

    • 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 enabledcodesign の呼び出しに --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 が出力されます。

コメント