Claude Code に iPhone アプリをシミュレータでテストさせる方法
Claude Code に iPhone アプリを自分でテストさせるには、2 つのものを渡せば十分です。iOS シミュレータでアプリをビルドし、インストールし、起動し、スクリーンショットを撮るためのコマンド。そして Xcode 26.3 以降なら、Xcode 自身の MCP サーバーへのアクセスです。この 2 つがあれば、画面を変更して、実行して、結果を見て、気づいた問題を直してから報告してくれます。
私は iPhone アプリをほぼ一人で作っていて、Swift の多くは Claude Code が書いています。仕事のやり方がいちばん変わったのは、ループを閉じたときでした。つまり、エージェントが自分で変更したアプリを自分で見られるようにしたことです。それまでは、「できました」はすべて推測で、私が手で確認するしかありませんでした。
モデルよりもループが大事な理由
アプリを実行できないエージェントは、コードを読むことでしか自分の仕事を確かめられません。それで見つかるのはタイプミス程度です。キーボードの下に隠れたボタン、3 行に折り返した日本語のラベル、誰もデザインしていない空の状態。こうしたものは見逃されます。そして App Review や星 1 つのレビューで指摘されるのは、まさにこういう部分です。
シミュレータは Xcode に必ず付いてきて、できることのほとんどは xcrun simctl でコマンドラインから操作できます。必要なものはほぼこれだけです。人がシミュレータをクリックしてできることには、たいていコマンドがあります。コマンドがあれば、エージェントに任せられます。
ループを閉じるコマンド
まずシミュレータを探して起動します。simctl ではデバイス ID の代わりに booted と書けるので、以降のコマンドが短くなります。
xcrun simctl list devices available
xcrun simctl boot "iPhone 17"
ビルドの出力先はプロジェクト内のフォルダにしておきます。そうすればエージェントはアプリがどこにできるか常にわかります。
xcodebuild -scheme MyApp \
-destination 'platform=iOS Simulator,name=iPhone 17' \
-derivedDataPath build build
次にインストールして、起動して、スクリーンショットを撮ります。
xcrun simctl install booted build/Build/Products/Debug-iphonesimulator/MyApp.app
xcrun simctl launch booted com.example.myapp
xcrun simctl io booted screenshot shot.png
Claude Code は PNG を開いて中身を説明できます。だからこの最後の 1 行が、ビルドをフィードバックに変えてくれます。スクリーンショットを本来あるべき画面と比べるように頼めば、実際にピクセルを見る 2 回目のチェックが手に入ります。
自分では開かない状態をテストする
本当に価値があるのは、たどり着くのが面倒で開発者が飛ばしてしまう状態です。simctl ならその多くに 1 行で届きます。
xcrun simctl ui booted appearance dark
xcrun simctl ui booted content_size accessibility-extra-extra-extra-large
xcrun simctl launch booted com.example.myapp -AppleLanguages "(ja)" -AppleLocale ja_JP
xcrun simctl privacy booted revoke photos com.example.myapp
xcrun simctl openurl booted "myapp://settings"
ダークモード、いちばん大きな文字サイズ、日本語のアプリ、ユーザーが拒否した権限、特定の画面へのディープリンク。どれもスクリーンショット 1 枚で確認できます。日本に住んでいる私が 1 つだけ残すなら、言語の起動引数です。英語では完璧に見えるレイアウトも、日本語のテキストで崩れるからです。
simctl は xcrun simctl push と小さな JSON でプッシュ通知を再現できますし、xcrun simctl status_bar booted override --time 9:41 でステータスバーを固定して App Store 用のスクリーンショットをきれいに撮ることもできます。
Xcode の MCP サーバーをつなぐ
Apple は 2026 年 2 月 3 日に Xcode 26.3 を発表し、Anthropic の Claude Agent や OpenAI の Codex などのコーディングエージェントに対応しました。ターミナルで Claude Code を使う人にとって大事なのは、Xcode が自分の機能を Model Context Protocol で公開するようになり、外部のエージェントもそれを使えるようになった点です。
Apple の 外部エージェントに Xcode へのアクセスを許可するガイドには 3 つのステップがあります。Xcode で Settings を開き、Intelligence を選び、Model Context Protocol の下にある「Allow external agents to use Xcode tools」をオンにします。それから Claude Code にブリッジを登録します。
claude mcp add --transport stdio xcode -- xcrun mcpbridge
claude mcp list
最後に、指示を出す前にプロジェクトを Xcode で開いておきます。外部エージェントが接続したときと動いている間、Xcode は通知を出します。誰かほかのものが操作しているときに必ずわかるので、いい習慣になります。
私は両方のやり方を残しています。MCP のツールは Xcode と同じようにプロジェクトを理解します。シェルのコマンドは単純で、スクリプトにでき、ログでも読みやすい。片方がうまくいかないときも、もう片方はたいてい動きます。
手順は一度だけ書く
メモリに関するドキュメントによると、Claude Code はセッションの開始時に毎回プロジェクトの CLAUDE.md を読み込みます。手順はそこに書きます。スキーム名、使うシミュレータ、バンドル ID、ビルドフォルダ、そして UI を変更したら必ずライトモード、ダークモード、最大の文字サイズでスクリーンショットを撮る、という短い指示です。
書いておけば、ループは頼み忘れに左右されなくなります。提案ではなく強制したいなら、編集のあとにフックでビルドを走らせることもできます。このパターンは自己修正するフックのガイドに書きました。
シミュレータではわからないこと
シミュレータは、スマートフォンのふりをした Mac です。カメラ入力、Apple のサーバーを通る本物のプッシュ通知、古い端末での動作速度、触覚フィードバック、満員電車で片手で使ったときの感覚。どれもスクリーンショットには写りません。課金も、StoreKit の設定かサンドボックスのアカウントがなければ意味のあるテストになりません。
だから私はシミュレータのループを最低ラインと考えています。崩れたレイアウト、抜けている文字列、処理されていない状態を早めに見つけてくれるので、実機での自分の時間は実機でしかわからないことに使えます。この分担が、一人で AI と一緒に iOS アプリを出す方法の大きな部分であり、2025 年に Apple が却下した 200 万件の申請に入らないための安上がりな方法でもあります。