iPhone Useのソースを読む:CodexはiPhoneをどこまで操作できるか
iPhone Useは、Macに接続した実物のiPhoneをCodexと中国のデスクトップアシスタント2製品から操作できるオープンソースのプラグインです。アプリを開き、画面を読み取り、タップ、スクロール、文字入力ができます。2026年10月6日にGitHubで公開され、1週間後には3504スターを獲得しました。当サイトが追跡するオープンソースのスマートフォン操作エージェントの中でも、特に速いペースで注目を集めています。ただし、私たちは実行していません。エージェントに任せてもよい予備の端末がなく、大切なアカウントで試すつもりもないためです。この記事は、特定のコミットに固定したソースコードを読んだものです。何ができるのか、どこで操作を止めてくれるのか、何がMacの外へ送られるのかを見ていきます。
- iPhone Useはエージェントに17のツールを提供します。7つは画面の読み取り専用で、残りは操作を行います。任意の場所のタップ、文字入力、インストール済みの任意のアプリの起動、1回の呼び出しで最大20ステップの実行などが可能です。
- コードはパスワード欄への入力を拒否し、送信結果を確認できなかった場合はバッチ処理を止めます。送信や支払いの扱いを含む、それ以外の保護措置はすべて、モデルに従うよう求める指示文です。
- スクリーンショットと画面の要素ツリーは、ホストとなるアシスタントが使用するモデルに送られます。Codex向けのインストールでは、匿名の利用イベントもデフォルトでPostHogに送信されます。ほかの2つのインストーラーでは、この送信を無効にしています。
- WeChatやAlipayなどのアプリがこの種の自動操作を検知するか、検知されたアカウントがどうなるかについて、リポジトリには記載がありません。
iPhone Useとは何か、誰が開発しているのか
プロジェクトはzhongerxin/iPhone-useで公開されており、ライセンスはMITです。READMEでは、Codex、WorkBuddy、Doubaoのデスクトップ業務アシスタントから、USB経由で実物のiPhoneを操作するためのツールと説明されています。アシスタントのサイドバーには、端末の画面がリアルタイムで表示されます。README。
開発のペースは速く、変更履歴は10月7日の0.2.xから、今回読んだ10月13日の0.3.12まで続いています。匿名の利用状況分析は10月9日の0.3.7で追加され、WorkBuddyとDoubaoのアダプターは10月13日にマージされました。この記事が伝えるのは、ある時点の姿です。確認したコミットは5cc2fa8です。
探しに行く前に知っておきたい、小さな食い違いがあります。READMEには今も、リポジトリは非公開でGitHubへのアクセス権が必要だと書かれています。READMEの50行目。実際には公開されています。また、ほぼ同じ名前のleeguooooo/iphone-useは、別の作者による別のツールです。この記事の対象ではありません。
iPhone UseがCodexと実物のiPhoneをつなぐ仕組み
構成要素は3つで、すべてMacとiPhone上で動作します。
| 構成要素 | 内容 | 動作する場所 |
|---|---|---|
| MCPサーバー | 標準ライブラリのみを使う単一のPythonファイル。ホストアシスタントとはstdioで通信する | Mac |
| USBフォワーダー | 127.0.0.1:18100で待ち受け、端末のポート8100へ転送する小さなNodeスクリプト | Mac |
| WebDriverAgent | AppiumのオープンソースUI自動操作サービス。16.14.0に固定され、自分のApple署名を使ってビルドする | iPhone |
出典:MCPサーバー、フォワーダー、WDAのバージョンとビルド。
WebDriverAgentは、アプリ開発者がテスト中に自分のアプリを操作するために使うテスト自動化サービスです。iPhone Useはその用途を変え、テストスクリプトの代わりに言語モデルがタップする場所を決めます。クライアントはMac自身のアドレス以外にあるWebDriverAgentとの通信を拒否します。また、コード内にWi-Fi経由の接続経路は見つからなかったため、端末は接続したままにする必要があります。ループバックのチェック。
リアルタイムの画面表示は、同じMCPサーバーが配信する小さなWebパネルです。コンテンツセキュリティポリシーは外部への接続を一切許可していないため、プレビュー自体が外部へ情報を送ることはありません。ウィジェットのリソース。
iPhone Useのツール:エージェントが読めるもの、操作できるもの
READMEによると、モデル向けのツールは17あり、それとは別にプレビューパネルだけが使うツールが2つあります。ツール一覧。コードでは各ツールに読み取り専用または破壊的操作という属性が付いており、役割を理解する手がかりになります。アノテーション。
| 端末から読み取る | 端末を操作する |
|---|---|
pua_observe:要素ツリー、スクリーンショット、またはその両方 | pua_tap:要素またはx/y座標を指定してタップ |
pua_find:要素を探す | pua_type_text:文字を入力し、指定があれば送信する |
pua_wait:要素が現れるのを待つ | pua_swipe、pua_scroll_find |
pua_apps:アプリのバンドルIDを探す | pua_launch_app:インストール済みの任意のアプリを開く |
pua_doctor、pua_metrics:動作状態と処理時間 | pua_press_button:ホーム、音量 |
pua_screen:プレビューを開く、一時停止する | pua_batch:1回の呼び出しで最大20ステップを実行 |
pua_collect_list、pua_setup、pua_ready |
このうち2つは、詳しく見ておく必要があります。pua_launch_appがアプリを開く前に確認するのは、バンドルIDの形式が正しいかどうかだけです。エージェントが開いてよいアプリ、開いてはいけないアプリのリストはありません。起動処理。また、pua_batchでは、モデルがタップ、文字入力、アプリ起動、待機を最大20ステップまでまとめて実行できます。これが速さを生む一方、誤った前提のまま最も先まで操作が進んでしまう箇所でもあります。バッチの上限。
ファイルロックにより、端末上で2つの操作が同時に走ることは防がれています。2つ目の呼び出し元にはdevice_busyが返り、その操作は行われません。操作ロック。
iPhone Useのセットアップに必要な作業と、信頼して任せる範囲
脱獄も別途のAppiumサーバーも不要ですが、セットアップは依然として開発者向けです。macOS、Xcodeのフルインストール、Python 3.9以降、Node 20.19以降が必要です。動作要件。WebDriverAgentは、自分のAppleアカウントと開発チームで署名します。署名。
セットアップ用スキルには、利用者本人にしかできない作業が列挙されています。Xcodeへのサインイン、「このコンピュータを信頼」のタップ、デベロッパモードの有効化と再起動、必要に応じた設定内のUIオートメーションの有効化、デベロッパプロファイルの信頼、そして端末のロックを解除した状態に保つことです。手動で行う作業。モデルには、認証情報を利用者に求めず、完了したと決めつけることなく、実際に「完了した」という返答が来るまで待つよう指示されています。利用者への引き継ぎルール。
端的に言えば、デベロッパモードを有効にしてWebDriverAgentを動かすと、iPhoneが接続され、ロックが解除されている間、Mac上のソフトウェアから端末全体を操作できます。それがこのツールの目的です。同時に、銀行やメッセージのアプリが入った端末を接続する前に、理解しておくべき点でもあります。
iPhone Useが操作を止める場面:パスワード、送信、支払い
パーソナルエージェントにとって最も重要な部分であり、保護措置は2種類に分かれます。
コードで強制される保護。 iOSがパスワードに使うようなセキュアなテキストフィールドへの入力は拒否され、代わりに利用者へ入力を依頼するようモデルに伝えるエラーが返ります。セキュアな入力欄への入力拒否。文字入力後の送信は、指定がない限り無効です。また、送信結果を確認できなかった場合、バッチ処理はその時点で停止します。送信のデフォルト設定とバッチの停止。長文を分割して入力する場合は、入力を始めたアプリと入力欄に処理がひも付けられます。どちらかが変わると、残りの文章は入力されません。継続入力の保護。
モデルに従うよう求める保護。 それ以外はすべて、スキル内の指示文です。パスワード、PIN、確認コード、Face IDは、プレビューを一時停止して利用者に引き継ぎます。認証の引き継ぎ。メッセージは、利用者が送信を許可している場合に限り、宛先と下書き全文を確認してから送ります。送信ルール。入力、送信、支払い、注文の結果が不確かな場合は、必ず結果を確認し、同じ操作を再実行してはいけません。再実行の禁止。
一方、支払い前にエージェントが必ず停止して利用者に確認するというルールは、コードにもスキルにも見つかりませんでした。スキルが防ごうとしているのは2重払いであり、確認なしに1回支払うことではありません。また、アプリが通常のテキストフィールドとして実装したパスワード欄も、コードによるチェックの対象外です。こちらをカバーするのはスキルの指示文だけです。認証に関する参照資料。私たちが詳しく調べた製品と比べると、Pineは請求に関わる操作のたびに確認を求め、Museは承認を1つのゲートキーパーに集約しています。
iPhone Useの利用時にMacの外へ送られるもの
外部へ送られるものは3つあります。
- 画面はモデルへ。 要素ツリーとスクリーンショットはホストアシスタントに返され、そのアシスタントが使うモデルへ送信されます。スクリーンショットは先に縮小してJPEGに変換され、元の画像はディスクに残ります。画像の処理。チャット、残高、コードなど、画面にあるものはその画像に含まれます。
- アプリの検索はAppleへ。 アプリのバンドルIDを探す際、Appleの公開検索APIに問い合わせることがあります。アプリ検索。
- 利用イベントはPostHogへ。 Codexプラグインは匿名イベントをデフォルトで送信します。WorkBuddyとDoubaoのインストーラーでは、
--analyticsを指定しない限り無効です。デフォルト設定、WorkBuddyのインストーラー。
利用状況分析のコードをANALYTICS.mdと照合したところ、内容は一致していました。イベントは5種類で、ランダムなインストールID、ツール名、処理結果、所要時間、エラーコードを扱います。許可リストにより、事前に名前が定義されていないフィールドは除外されます。画面内のテキスト、スクリーンショット、セレクター、デバイスID、署名に使うチームの情報は送信されません。許可リスト。IPHONE_USE_ANALYTICS=0またはDO_NOT_TRACK=1を設定すると停止します。この設定は、記録前と送信前の両方で確認されます。オプトアウト。
文書には書かれていない点が2つあります。イベントではPostHogの位置情報検索が無効にされていますが、リクエストにはIPアドレスが伴うため、PostHogのサーバーには届きます。それが保存されるかどうかは、コードからは分かりません。また、ほかの2つのホストから送られた場合も含め、すべてのイベントにCodexプラグイン由来というラベルが付いています。送信元ラベル。
iPhone Useとアカウント停止:リポジトリに書かれていないこと
XやXiaohongshuで共有されたデモには、WeChat Momentsのスクロールやフードデリバリーの注文が含まれています。いずれも、独自の自動操作対策システムを持つ企業が運営するアプリ内での操作です。変更履歴にはWeChat向けの最適化への言及がありますが、長いチャット一覧を速く読み取るためのもので、検知を避けるためのものではありません。WeChatに関する記述。ランダムな待ち時間や、人間の操作らしい揺らぎは見つかりませんでした。文字入力は一定の速度で行われます。文字入力の定数。自動操作であることを隠さない実装ですが、それは同時に、自動操作を偽装する仕組みが何もないことを意味します。
リポジトリには、プラットフォームの規約、不正利用対策、アカウント停止についての記載がありません。WeChat、Alipay、MeituanがWebDriverAgentによる入力を検知するかどうかは分からず、試してもいません。この情報の欠落はiPhone Useだけの問題ではありません。Droidrunを支えるホスト型Androidサービスは逆の方向を取り、検知を避ける文字入力をうたっています。この点はスマートフォン操作エージェントの概説で取り上げています。iPhone Useを試すなら、失っても差し支えない端末とアカウントを使ってください。
iPhone Useについて確認できなかったこと
- 動作するか、どの程度成功するか。 私たちは実行していません。プロジェクトは成功率を公表しておらず、この記事には実測結果はありません。当サイトの試験の対象にもなっておらず、スコアはありません。
- ホスト側が何を保存するか。 スクリーンショットはCodex、WorkBuddy、Doubaoと、それぞれのモデル提供元に送られます。それらがどのようにデータを保持するかは、このリポジトリの範囲外です。
- PostHogによるIPアドレスの保持。 各イベントとともに届くIPアドレスが、どのように保持されるかは確認できていません。
- 0.3.12より後の変更すべて。 現在の開発ペースでは、この記事の詳細は数日以内に変わる可能性があります。コミットを固定したリンクから、私たちが読んだ内容を正確に確認できます。
よくある質問
iPhone Useは安全に試せますか? オープンソースであり、利用状況分析の実装も文書の説明と一致しています。多くのツールよりも、その点は明確です。ただし、エージェントはロックが解除された端末上で任意のアプリを開き、どこでもタップできます。コード上で操作を止めるのは、パスワード欄への入力と、結果を確認できなかった送信だけです。支払いの確認はモデルに委ねられています。予備の端末と、失っても差し支えないアカウントを使ってください。
iPhone Useには脱獄が必要ですか? いいえ。自分のApple開発チームで署名したAppiumのWebDriverAgentを使います。加えて、端末のデベロッパモードと、MacへのXcodeのフルインストールが必要です。
iPhone UseはWi-Fi経由で使えますか? 今回読んだバージョンでは使えません。クライアントがWebDriverAgentと通信する経路はMac上のフォワーダー経由に限られ、Wi-Fi経由の接続経路は見つかりませんでした。
iPhone UseはPostHogに何を送信しますか? 匿名イベントは5種類で、ツール名、処理結果、所要時間、エラーコード、ランダムなインストールIDを扱います。画面の内容、スクリーンショット、デバイスIDは送りません。Codex向けのインストールではデフォルトで有効、WorkBuddyとDoubao向けでは無効です。IPHONE_USE_ANALYTICS=0で無効にできます。
これを使うとWeChatやAlipayのアカウントは停止されますか? 分かりません。リポジトリにも答えはなく、アカウント停止やプラットフォームの規約には一切触れていません。コードには、自動操作であることを隠す仕組みはありません。
iPhone Useはどうインストールしますか? Xcodeをフルインストールし、Python 3.9以降とNode 20.19以降を備えたMacでリポジトリをクローンし、Codexプラグイン用にsh scripts/install.shを実行します。WorkBuddyとDoubaoには、それぞれ専用のインストーラーがあります。その後、自分のAppleチームでWebDriverAgentに署名し、端末側でMacを信頼する設定を行います。インストール手順。私たちはこの手順を読みましたが、実行はしていません。ほかのスマートフォン操作エージェントは、概説ページで比較しています。