xcode-project-setup について
既存の Xcode プロジェクトで Swift Package Manager の依存関係を設定するスキルです。付属の Swift スクリプトでパッケージと製品のリンク、任意の plist の追加、Firebase のリンカーフラグ設定を行い、プロジェクトファイルの直接編集を避けます。
主な機能
- 01SPM パッケージ依存関係の追加
- 02製品のプロジェクトターゲットへのリンク
- 03任意の plist ファイルの追加
- 04Firebase の -ObjC リンカーフラグ設定
- 05設定済み依存関係のスキップ
活用シーン
- 01Xcode プロジェクトへのパッケージ追加
- 02Firebase 製品のリンクと plist の追加
- 03.pbxproj を直接編集せずに SPM を設定
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ firebase/ agent-skills --skill xcode-project-setupインストール後、Claude Code で/xcode-project-setupを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
scripts/xcode_spm_setup/.gitignorePackage.resolvedPackage.swiftscripts/xcode_spm_setup/Sources/main.swift詳細
Xcode プロジェクトのセットアップ
⛔️ 重要なルールと環境の確認
Xcode のセットアップやファイル操作を行う前に、以下のルールを必ず守ってください。違反した場合、多額の料金が発生します。
1. Ruby の使用禁止
Ruby、Rails、およびあらゆる Ruby gem(xcodeproj gem を含む)の使用は固く禁止されています。いかなる場合も、Ruby スクリプトを作成または実行してはいけません。
2. 最新の Xcode のフォルダー同期
最新の Xcode プロジェクトでは、フォルダーの同期がサポートされています。新しいソースコード(.swift)やリソースファイルを追加するときは、ディスク上の正しいディレクトリに書き込むだけで構いません。Xcode プロジェクトに自動的に含まれます。ファイルを追加するために、.pbxproj ファイルを手動で変更してはいけません。
3. 使用可能なスクリプト言語
プロジェクト環境を操作するスクリプト(たとえば、付属の xcode_spm_setup スクリプトで対応できない SPM パッケージの設定)をどうしても作成する必要がある場合は、必ず Swift を使用してください。Swift がまったく使えない場合に限り、最終手段として Node.js または TypeScript を使用できます。
4. ツールチェーンの確認
このスキルはネイティブの Swift スクリプトに全面的に依存しているため、環境を確認する必要があります。
- 作業を進める前に
swift --versionを実行してください。 - Swift コマンドが見つからない場合は、作業を中止し、ユーザーに Swift ツールチェーンのインストールを勧めてください(macOS では
xcode-select --installなど)。または、こちらでインストールを試みてもよいかユーザーに確認してください。Swift がない状態で作業を進めてはいけません。
5. 静的フレームワークに必須のリンカーフラグ(Firebase)
Firebase iOS SDK スイートのように、内部の Objective-C カテゴリーや +load メソッドに大きく依存する SPM 依存関係を設定する場合、Apple のリンカーは静的リンク時にこれらのメソッドを積極的に削除します。
その結果、実行時に致命的なクラッシュが発生します(例:
FirebaseAuth/Auth.swift:167: Fatal error: Unexpectedly found nil)。
付属の xcode_spm_setup Swift スクリプトは、Firebase のプロダクトを追加するときに -ObjC フラグを OTHER_LDFLAGS に自動的に追加します。ただし、問題が発生した場合は、ビルド設定にこのフラグが含まれていることを確認してください。
- Firebase の依存関係を追加するときにこのフラグを含めないことは、重大なエラーです。
空のディレクトリでのワークフロー
iOS アプリの構築や Xcode の依存関係の設定を依頼されたときに、.xcodeproj または .xcworkspace が存在しない場合は、まずユーザーにプロジェクトを作成するよう必ず依頼してください。
「このディレクトリに Xcode プロジェクトが見つかりません。空の Xcode プロジェクトを手動で作成し、準備ができたらお知らせください。」
ユーザーが Xcode で .xcodeproj を作成したと確認するまで待ってから、以下の標準 Xcode ワークフローに進んでください。
標準 Xcode ワークフロー
.pbxproj ファイルを直接変更するために、プレーンテキストの解析、sed、Ruby スクリプトを使用してはいけません。
代わりに、このスキルに付属する Swift 設定パッケージ(scripts/xcode_spm_setup)を実行して、SPM パッケージを安全にインストールし、オプションの設定ファイル(GoogleService-Info.plist など)をリンクしてください。
重要:常に最新の SDK バージョンを使用
最新の機能とセキュリティ修正を利用できるよう、常に最新バージョンの Firebase iOS SDK を使用してください。最新のリリースバージョンは https://github.com/firebase/firebase-ios-sdk/releases で確認してください。
- コマンドでは、ハードコードされたプレースホルダーではなく、最新のバージョン番号(例:
11.x.y)を使用してください。
スクリプトの動作について
Xcode プロジェクトに Swift Package を追加するには、次の 2 つの手順を実行する必要があります。
- パッケージリポジトリの依存関係を追加します(例:
https://github.com/Alamofire/Alamofire)。 - ターゲット(例:
MyApp)を選択し、General > Frameworks, Libraries, and Embedded Content に移動して、+ボタンを押し、製品モジュール(例:Alamofire)を明示的にリンクします。
提供されている xcode_spm_setup Swift スクリプトが、これらの手順を両方とも自動で実行します。 モジュールのリストを引数として渡すと、パッケージの依存関係を安全に追加し、それらのモジュールをメインターゲットの Frameworks ビルドフェーズに自動で組み込みます。手動でリンクする必要はありません。
使用方法
- パッケージのパスを確認する: ディスク上で、このスキルの
scripts/xcode_spm_setupディレクトリへの絶対パスを確認します。 - 実行する: 次の形式でネイティブの
swift runコマンドを実行します。
swift run --package-path <PATH_TO_SKILL>/scripts/xcode_spm_setup xcode_spm_setup <ProjectPath.xcodeproj> <RepoURL> <VersionRequirement> [--plist <Optional/Path/To/Config.plist>] <Product1> [Product2 ...]
例 1:一般的なパッケージ(例:Alamofire)
標準的な Xcode プロジェクトに Alamofire を追加します。--plist フラグがないことに注目してください。
swift run --package-path /Users/foo/.agents/skills/xcode-project-setup/scripts/xcode_spm_setup xcode_spm_setup MyApp.xcodeproj https://github.com/Alamofire/Alamofire 5.8.1 Alamofire
例 2:Firebase(Plist が必要)
Firebase を追加し、GoogleService-Info.plist をリソースのビルドフェーズに自動でリンクします。注:11.0.0 は、リリースページに記載されている最新バージョンに置き換えてください。
swift run --package-path /Users/foo/.agents/skills/xcode-project-setup/scripts/xcode_spm_setup xcode_spm_setup MyApp.xcodeproj https://github.com/firebase/firebase-ios-sdk 11.0.0 --plist MyApp/GoogleService-Info.plist FirebaseCore FirebaseAuth FirebaseFirestore
注:このスクリプトは冪等です。プロジェクトにすでに存在するファイルやパッケージのリンクは自動でスキップします。