test-xcode について
test-xcodeは、XcodeBuildMCPを使ってiOSアプリをシミュレーターでビルド、インストール、テストするスキルです。画面とログを確認し、端末操作が必要な場合は人による確認を求めます。
主な機能
- 01Xcodeプロジェクトとスキームの検出
- 02シミュレーター起動とiOSアプリのビルド
- 03アプリのインストールと起動
- 04スクリーンショット撮影とログ確認
- 05操作が必要なテストで人の確認を依頼
活用シーン
- 01iOSアプリの主要画面の表示確認
- 02シミュレーターテスト失敗の再現と記録
- 03iOSコード変更後のビルドと実行状況のレビュー
MCP 対応
接続済みのXcodeBuildMCP MCP サーバーを必要とし、シミュレーター検出、ビルド、インストール、起動、撮影、ログ取得のツールを利用します。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ everyinc/ compound-engineering-plugin --skill test-xcodeインストール後、Claude Code で/test-xcodeを入力して読み込まれたか確認します。
詳細
Xcode Test Skill
XcodeBuildMCP を使用して、シミュレーター上で iOS アプリをビルド、インストール、テストします。スクリーンショットやログを取得し、アプリの動作を検証します。
前提条件
- コマンドラインツールがインストールされた Xcode
- XcodeBuildMCP MCP サーバーへの接続
- 有効な Xcode プロジェクトまたはワークスペース
- 少なくとも 1 台の iOS シミュレーター
ワークフロー
0. XcodeBuildMCP が利用可能であることを確認する
list_simulators ツールを呼び出して、XcodeBuildMCP MCP サーバーに接続されていることを確認します。
MCP ツール名はプラットフォームによって異なります:
- Claude Code:
mcp__xcodebuildmcp__list_simulators - その他のプラットフォーム:
XcodeBuildMCPサーバーのlist_simulatorsメソッドに対応する MCP ツール呼び出しを使用します
ツールが見つからない場合、またはエラーが発生した場合は、XcodeBuildMCP MCP サーバーを追加する必要があることをユーザーに伝えます:
XcodeBuildMCP not installed
Install via Homebrew:
brew tap getsentry/xcodebuildmcp && brew install xcodebuildmcp
Or via npx (no global install needed):
npx -y xcodebuildmcp@latest mcp
Then add "XcodeBuildMCP" as an MCP server in your agent configuration
and restart your agent.
XcodeBuildMCP が正常に動作することを確認するまで、先に進まないでください。
1. プロジェクトとスキームを確認する
XcodeBuildMCP の discover_projs ツールを呼び出して利用可能なプロジェクトを探し、次にプロジェクトのパスを指定して list_schemes を呼び出し、利用可能なスキームを取得します。
引数が指定されている場合は、そのスキーム名を使用します。「current」の場合は、デフォルトまたは最後に使用したスキームを使用します。
2. シミュレーターを起動する
list_simulators を呼び出して利用可能なシミュレーターを確認します。boot_simulator にシミュレーターの UUID を指定して、優先するシミュレーター(iPhone 15 Pro を推奨)を起動します。
先に進む前に、シミュレーターの準備が整うまで待ちます。
3. アプリをビルドする
プロジェクトのパスとスキーム名を指定して build_ios_sim_app を呼び出します。
失敗した場合:
- ビルドエラーを記録します
- ビルドエラーごとに P1 の ToDo を作成します
- 具体的なエラーの詳細を添えてユーザーに報告します
成功した場合:
- インストール用にビルドされたアプリのパスを記録します
- 手順 4 に進みます
4. インストールして起動する
- ビルドされたアプリのパスとシミュレーターの UUID を指定して
install_app_on_simulatorを呼び出します - バンドル ID とシミュレーターの UUID を指定して
launch_app_on_simulatorを呼び出します - シミュレーターの UUID とバンドル ID を指定して
capture_sim_logsを呼び出し、ログの取得を開始します
5. 主要な画面をテストする
アプリの主要な画面ごとに、次の手順を行います。
スクリーンショットを撮る:
シミュレーターの UUID と、わかりやすいファイル名(例:screen-home.png)を指定して take_screenshot を呼び出します。
スクリーンショットで次の点を確認します:
- UI 要素が正しく描画されている
- エラーメッセージが表示されていない
- 想定されるコンテンツが表示されている
- レイアウトが適切である
ログでエラーを確認する:
シミュレーターの UUID を指定して get_sim_logs を呼び出します。次の項目を確認します:
- クラッシュ
- 例外
- エラーレベルのログメッセージ
- 失敗したネットワークリクエスト
既知の自動化の制限 — SwiftUI の Text リンク:
シミュレートされたタップ(XcodeBuildMCP またはその他のシミュレーター自動化ツール経由)は、インラインの AttributedString リンクを含む SwiftUI の Text ビュー上のジェスチャー認識をトリガーしません。タップは成功したと報告されますが、効果はありません。これはプラットフォームの制限です。インラインリンクはアクセシビリティツリー内で個別の要素として公開されません。Text リンクをタップしても画面に変化がない場合は、シミュレーター上で手動でタップするようユーザーに依頼します。対象 URL がわかっている場合は、代替手段として xcrun simctl openurl <device> <URL> で直接開けます。
6. 人による確認(必要な場合)
デバイス操作が必要なタッチフローをテストする場合は、作業を一時停止して人による入力を求めます。
| フローの種類 | 確認する内容 |
|---|---|
| Apple でサインイン | 「シミュレーターで Apple でサインインを完了してください」 |
| プッシュ通知 | 「テスト用プッシュ通知を送信し、表示されることを確認してください」 |
| アプリ内購入 | 「サンドボックス購入を完了してください」 |
| カメラ/写真 | 「アクセスを許可し、カメラが動作することを確認してください」 |
| 位置情報 | 「位置情報へのアクセスを許可し、マップが更新されることを確認してください」 |
| SwiftUI Text リンク | 「[要素の説明] を手動でタップしてください。自動タップではインラインテキストリンクをトリガーできません」 |
ユーザーに質問するには、プラットフォームの質問ツール(例:Claude Code の AskUserQuestion、Codex の request_user_input、Gemini の ask_user)を使用するか、番号付きの選択肢を提示して回答を待ちます:
Human Verification Needed
This test requires [flow type]. Please:
1. [Action to take on simulator]
2. [What to verify]
Did it work correctly?
1. Yes - continue testing
2. No - describe the issue
7. 失敗への対応
テストが失敗した場合:
-
失敗内容を記録します:
- エラー状態のスクリーンショットを撮影します
- コンソールログを取得します
- 再現手順を記録します
-
どのように進めるかユーザーに確認します:
Test Failed: [screen/feature] Issue: [description] Logs: [relevant error messages] How to proceed? 1. Fix now - I'll help debug and fix 2. Create todo - Add a todo for later (using the todo-create skill) 3. Skip - Continue testing other screens -
「今すぐ修正」の場合: 調査し、修正案を提示して、再ビルドと再テストを行います
-
「TODO を作成」の場合:
todo-createスキルを読み込み、優先度 p1、説明xcode-{description}で TODO を作成して続行します -
「スキップ」の場合: スキップとして記録し、続行します
8. テストの概要
すべてのテストが完了したら、概要を提示します:
## Xcode Test Results
**Project:** [project name]
**Scheme:** [scheme name]
**Simulator:** [simulator name]
### Build: Success / Failed
### Screens Tested: [count]
| Screen | Status | Notes |
|--------|--------|-------|
| Launch | Pass | |
| Home | Pass | |
| Settings | Fail | Crash on tap |
| Profile | Skip | Requires login |
### Console Errors: [count]
- [List any errors found]
### Human Verifications: [count]
- Sign in with Apple: Confirmed
- Push notifications: Confirmed
### Failures: [count]
- Settings screen - crash on navigation
### Created Todos: [count]
- `006-pending-p1-xcode-settings-crash.md`
### Result: [PASS / FAIL / PARTIAL]
9. クリーンアップ
テスト後:
- シミュレーターの UUID を指定して
stop_log_captureを呼び出します - 必要に応じて、シミュレーターの UUID を指定して
shutdown_simulatorを呼び出します
使用例
# Test with default scheme
/test-xcode
# Test specific scheme
/test-xcode MyApp-Debug
# Test after making changes
/test-xcode current
ce:review との統合
iOS コードに関する PR をレビューする際、ce:review ワークフローではエージェントを起動して、このスキルを実行し、シミュレーター上でビルドして、主要な画面をテストし、クラッシュがないか確認できます。