mcpField
G
guide-macos-spm-packaging

guide-macos-spm-packaging

github.com/prisma-labs-dev開発349482 回インストール5 週間前に更新
リポジトリ

guide-macos-spm-packaging について

Xcodeを使わずにmacOS SwiftPMアプリを作成、ビルド、パッケージ化して実行するための開発者向けワークフローガイドです。テンプレートとスクリプトを含み、署名やリリースの手順も任意で扱います。

主な機能

  1. 01SwiftPMアプリのひな形作成
  2. 02SwiftPMでのビルドとテスト
  3. 03アプリバンドルのパッケージ化と実行
  4. 04署名と公証のオプション手順
  5. 05リリースとappcast用スクリプト

活用シーン

  1. 01Xcodeを使わずmacOSアプリを始める
  2. 02.appバンドルの作成と検証
  3. 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.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

詳細

ガイドスキル — API リファレンスドキュメントではなく、専門的なワークフロー/パターンガイドです。 Thomas Ricouard が作成した Dimillian/Skills が元になっています。MIT ライセンスです。

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 が出力されます。

コメント