本文へスキップ

Xcode MCP の Device Interaction で iOS シミュレータを操作する

📋 目次

背景

Xcode 27 の MCP サーバーに DeviceInteractionStartSession などデバイス操作らしきツールが並んでいるのに気付きました。 実際にどこまでできるのか、手を動かして確かめました。

mcpbridge を直に叩いて動かす

Xcode MCP の実体は xcrun mcpbridge という実行ファイルで、標準入出力で JSON-RPC 2.0 のやり取りをします。 Claude Code を経由せず Python から直接起動すれば、ツールをそのまま試せます。

proc = subprocess.Popen(["xcrun", "mcpbridge"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, text=True)
send({"jsonrpc": "2.0", "id": 1, "method": "initialize", "params": {...}})

call("DeviceInteractionStartWorkspaceSession", {...})
call("DeviceInteractionInstallAndRun", {...})
call("DeviceInteractionSynthesize", {
    "interactSessionKey": session_key,
    "activationBundleId": "com.example.app",
    "interactionCommand": "t 200 400",
})
call("DeviceInteractionEndSession", {...})

セッションを開き、ビルドとインストールと起動を済ませ、interactionCommand に "t 200 400" を渡すとその座標をタップします。 activationBundleId を指定し忘れると、対象アプリではなく前面に出ている別のアプリに操作が届きます。 呼ぶたびにスクリーンショットと UI 階層のパスも返ってきます。

sim-use との比較

サードパーティ製ですが、シミュレータ操作には sim-use という CLI ツールもあります。 実際に動かして分かった違いは次の通りです。

sim-use と Device Interaction の比較表

ビルドから起動まで一つのツールで完結するのは Device Interaction の強みです。 一方で録画機能は見当たらず、実機は xcrun devicectl list devices 上では connected と表示されるのに、Device Interaction のデバイス候補には現れませんでした。

なお sim-use の実機対応も無条件ではありません。 実機ではアクセシビリティ要素を読む経路しか用意されておらず、座標タップの手段がないので、アクセシビリティ要素を持たないカスタム描画の UI は操作できません。

まとめ

シミュレータだけで完結し、録画が要らない作業なら Device Interaction を試す価値があります。 xcrun mcpbridge は Xcode があれば誰でも直に叩けるので、気になった方はぜひ試してみてください。

参考リンク

この記事をシェア