mcpField
S
simulator-use

simulator-use

ローカル
simulator-use.dev開発ツール44 日前に更新

simulator-use について

simulator-useは、iOS Simulatorを使うコーディングエージェント向けのMCPサーバーとCLIです。Xcodeプロジェクトのビルド、実行、テストに加え、画面要素のテキスト表示と操作、ログやクラッシュの確認、録画、クラウドiPhoneに対応します。

主な機能

  1. 01Xcodeプロジェクトのビルド、インストール、起動
  2. 02画面要素を簡潔なテキストで表示
  3. 03ラベル指定でタップ、入力、スクロール
  4. 04XCTestとXCUITestの実行
  5. 05アプリログとクラッシュの確認
  6. 06画面録画とクラウドiPhoneの利用

活用シーン

  1. 01iOS Simulatorでアプリの画面フローを検証
  2. 02テストケース単位で実行し失敗箇所を特定
  3. 03アプリログとクラッシュ箇所を調査
  4. 04Xcodeのない端末からクラウドiPhoneを利用

MCP 対応

MCPサーバーとCLIは同じツール定義から構成されています。MCPクライアントはSimulatorアプリのビルドや操作、画面とログの確認、テスト実行、クラウドiPhoneの利用ができます。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"app-nomac-simulator-use": {
"command": "npx",
"args": [
"-y",
"simulator-use"
]
}
}
}
起動コマンドnpx -y simulator-use

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
npmsimulator-use0.12.2

ツール

12

掲載時のツール一覧 · 4 日前に更新

このツールにパラメーターはありません。

詳細

simulator-use

AI エージェントが iOS Simulator を使うための、最速で最もトークン効率の高い方法です。 simulator-use を使うと、Claude Code、Codex、Cursor などのあらゆる MCP クライアントに iPhone を利用させることができます。Xcode プロジェクトをビルドして実行し、画面を数行のテキストとして読み取り、ラベルを指定してタップや入力を行い、テストをケースごとに実行します。独自のネイティブエンジンが Simulator と直接通信するため、画面全体の読み取りは約 250 ms、タップの送信は 1 ms 未満です。一方、呼び出しのたびにヘルパーを起動するツールでは 1.5~3 秒かかります。無料でオープンソース(MIT)であり、Xcode を搭載した Mac ならどれでも利用できるほか、クラウド iPhone を使えば Linux、Windows、Xcode を搭載していない Mac からも利用できます。

  • 高速: 画面全体の読み取りは約 250 ms、タップの送信は 1 ms 未満、スクリーンショットの撮影は約 60 ms です(2026 年 10 月、M6 Mac mini で測定)。
  • トークン効率が高い: エージェントが利用できる要素を 1 行ずつ表示し、それ以外は表示しません。ツールは 12 個で、説明も簡潔です。
  • 機能が充実: ビルド、インストール、起動、ケースごとの XCTest と XCUITest、ログとクラッシュ、ビデオ、権限の確認、iPhone と iPad に対応します。
  • 継続的に改善: 毎日数千のセッションから得られる知見をもとに、毎週リリースしています。
  • どこからでも利用可能: npx simulator-use cloud start を実行すると、Xcode を搭載したクラウド iPhone をあらゆるマシンから利用できます。

Xcode プロジェクトのビルド、実行、テストに対応し、あらゆるアプリ(SwiftUI、UIKit、React Native)の画面を読み取って操作できます。iOS の権限確認に応答し、アプリのログやクラッシュを読み取り、ビデオを録画します。

エージェントに表示される内容

Demo · Sign In · iPhone 17 Pro (iOS 27.0)
textfield "Email" #email @201,194
securefield "Password" #password @201,246
switch "Remember me" #remember off @341,298
button "Sign In" #signIn @201,350
text "Not signed in" #status @201,402
tabs: Login (selected) @158,822, Items @244,822
  • 要素ごとに 1 行で、種類、ラベル、#id(アプリのアクセシビリティ識別子)、状態、@x,y(ポイント単位の中心位置)を表示します。
  • グループ、ボタン内のアイコン、スクロールバー、ステータスバー、キーボードのキーは省略されます。タブバー、スクロール領域、キーボードはそれぞれ 1 行で表示されます。
  • タップ可能な要素のみが表示されます。前面にアラート、シート、メニュー、全画面ビューが表示されている場合、その背後の画面は隠れます。iOS 独自の権限確認も、アプリ上に表示されるアラートとして読み取られます。ナビゲーションバー、タブバー、キーボードの下にある行は、一覧に表示されず、非表示(上、下、左、右)としてカウントされます。
  • UIKit の Web ビュー(Capacitor、React Native の WebView、多くのアプリ内のサインインページ)は要素ごとに読み取られ、見出し、テキスト、フィールド、チェックボックス、ボタン、リンクが、ほかの要素と同様に一覧表示されます。SwiftUI でホストされる Web ビュー、Safari 独自のページ、アプリ内ブラウザー、マップ、ゲーム、iOS のプロセス外ピッカーは、アクセシビリティで読み取れる情報がありません。これらは位置情報付きの unreadable 行として返されるため、エージェントはスクリーンショットを撮って位置を指定してタップできます。
  • スクリーンショットを要求すると、ポイント単位のサイズで返されるため、画像内のポイントをそのままタップできます。screenshot_file は、人物による確認、レポート、App Store 用に、画面をフル解像度の PNG として保存します。クラウドモードでは、使用中のマシンにも保存されます。
  • 上記のサインイン画面は約 70 トークンです。この画面の元になっているアクセシビリティツリー全体は約 40,000 トークンです。

画面の操作

ui_act は、ui_look が出力するのと同じ語句で手順を受け取り、順番に実行して、変更された内容を返します。

ui_act steps: ["fill #email [email protected]", "fill #password secret1", "tap #signIn", "wait \"Welcome\""]

4 steps done in 4.5 s
changed: #email "[email protected]" · #password "•••••••" · #status "Welcome, [email protected]"

手順:

手順動作
tap #id、tap "label"、tap button "label"、tap @x,yタップします。スイッチには実際にタッチします
fill #id textフィールドにフォーカスし、内容を消去して入力し、テキストを読み返します
type textフォーカスされているフィールドに入力します
scroll down、scroll right @201,402画面、またはカルーセルを1つスクロールします
swipe left、swipe left "Row 3"画面、または行を1つスワイプします(削除を表示する場合など)
hold "Row 5" [seconds]コンテキストメニューを表示するために長押しします
set #volume 75スライダーをパーセントで設定します
back、home、key return戻るボタン(または画面端のスワイプ)、ホームボタン、キーを操作します
wait "Welcome" [seconds]、gone "Loading"表示されるまで、または消えるまで待ちます

すべての手順を検証するため、何も報告されずに成功することはありません。

  • 入力したテキストはフィールドから読み返されます。iOS の自動修正やスマート句読点によって変更された場合(-- から —、' から ’ など)は、代わりにテキストを貼り付けます。iOS は貼り付けた内容をそのまま受け取ります。それでもフィールドに別の内容が表示されている場合は、呼び出しを停止し、表示内容を伝えます。
  • Café、日本語、絵文字など、あらゆる言語のテキストを入力できます。米国キーボードにない文字は、Simulator のクリップボード経由で入力されます。
  • fill はテキストフィールド以外を受け付けないため、フォーカスが残っているフィールドにキーが入力されることはありません。
  • タップしても何も変わらない場合は、権限の確認など、応答が遅れて表示されるものを考慮して 2.5 秒待ってから報告します。読み取りできない領域をタップした場合は、確認できないことを伝えます。
  • 画面にまだ表示されていない対象は、表示されるまで 2 秒待ってから、次の手順とともに失敗を返します。「2 elements are below: scroll down」や、アラートが手前に表示された場合の「Answer it first: tap "Cancel" or "Open"」などです。
  • 最初に失敗した手順で残りの処理を停止し、その時点の画面を返します。
  • 新しい画面が表示された場合は全体を返し、それ以外の場合は変更部分のみを返します。

ツール

ツールCLI動作
app_runsimulator-use runここで Xcode プロジェクトをビルドしてインストール、起動し、最初の画面を返します。エラーは file:line で示します。--xcode 26.6 を指定すると、インストール済みの別の Xcode でビルドします
devicessimulator-use devicesこの Mac 上の Simulator と、そのランタイム、UDID、状態、および Xcode を一覧表示します
device_usesimulator-use use "iPhone 17 Pro"他のツールが使用する Simulator を選択し、起動します(同時に起動できるのは1台です)。ダークモードで、ステータスバーは初期状態です
app_controlsimulator-use app launch dev.example.appinstall、launch(最初の画面を返します)、terminate、uninstall、open_url を実行します。grant、revoke、reset_permissions で権限を管理します。location、push、および電話の appearance、locale、timezone、text_size、初期状態の status_bar を設定します
ui_looksimulator-use look画面を読み取ります。find は一致する行を絞り込み、screenshot は画像を追加し、screenshot_file は全解像度の PNG を保存し、full はツリー全体を保存します
ui_actsimulator-use act "tap #signIn" ...手順を順番に実行し、変更された内容を返します
app_logssimulator-use logsアプリの出力と、アプリ固有のシステムログ行を表示します。grep、wait_for、crashes を利用できます
tests_runsimulator-use test単体テストと UI テストを実行します。各ケースの完了時に結果を出し、件数、各失敗の file:line、最も時間のかかったテストを表示します。「0 tests ran」はエラーです
screen_recordsimulator-use record start画面の録画を開始または停止します。停止すると MP4 を返します
job_statussimulator-use job時間のかかるビルドの完了を最大 40 秒待ち、結果または進捗を返します
job_cancelsimulator-use cancelジョブを停止します
cloudsimulator-use cloud startすべてのツールが以降使用する NoMac クラウドフォンの start、status、stop を実行します。run は1回の呼び出しでビルド、テスト、停止を実行します(Cloud を参照)

MCP サーバーと CLI は同じリストからビルドされるため、常に一致します。ツールリストと手順は 4,000 トークン未満に保たれており、テストで検証されます。

ビルドと実行

app_run は、プロジェクトの検索(最初にワークスペース、次にプロジェクト、XcodeGen の仕様ファイル、または ios/)、スキームの選択、シミュレーター向けのビルド、インストール、起動をまとめて 1 回の呼び出しで行い、最初の画面を返します。

アプリの権限は、インストール時と初回起動時のプロンプト(通知も含む)に回答すると付与されるため、エージェントの作業をプロンプトで妨げません。テストする場合は、permissions: "ask" を指定すると iOS のプロンプトが表示されます。別のアプリを開くリンクでは、open_url が iOS の「“…”で開きますか?」に回答します。

Built Demo in 4.2 s, installed dev.simtap.demo.
Launched Demo in 3.9 s.
Demo · Sign In · iPhone 17 Pro (iOS 27.0)
textfield "Email" #email @201,194
...
  • ビルドに失敗した場合は、Sources/App.swift:49:37: error: ... のようなエラーのみと、完全なログへのパスを返します。
  • 各フォルダー(各 git worktree)は、それぞれ独自の DerivedData にビルドするため、再ビルドは差分ビルドになり、worktree 間で成果物が共有されることはありません。SIMULATOR_USE_CACHE_DIR を指定すると、保持しておくディスクに保存されるため、次回のマシンでのビルドも差分ビルドになります。
  • XcodeGen プロジェクトは、各ビルドの前に project.yml から再生成されます(変更がない場合はスキップされる)ので、新しいファイルも常に含まれます。
  • 同じフォルダーでの次の呼び出しでは、引数は不要です。
  • env: "API_URL=http://127.0.0.1:8080 MODE=test" を指定すると、Xcode スキームと同様に、アプリにこれらの変数が渡されます(アプリは ProcessInfo から読み取ります)。変数は後続の起動でも保持され、env: "" を指定するとクリアされます。
  • MCP 呼び出しは 40 秒以内に応答します。ビルドにそれ以上かかる場合はジョブを返し、job_status が完了まで待機します。CLI からは、simulator-use run がそのまま待機します。
  • 同じプロジェクトのビルドが同時に実行されることはありません。2 つのプロセスから実行した場合も同様で、2 つ目にはどのプロセスがビルド中かが示されます。
  • Expo、React Native、Flutter、Capacitor のビルドにはまだ対応していません。それぞれのツールでビルドしてから、app_control install を実行してください。

テスト

tests_run はスキームのテストを実行し、流れていく出力ではなく Xcode の結果バンドルから結果を読み取ります。

Tests failed: 1 passed, 2 failed (3 in 35.3 s). Result bundle: .../tests-1792370825323.xcresult
DemoTests/SignInTests/testRejectsAShortPassword(): Tests/SignInTests.swift:12: XCTAssertEqual failed: ("Welcome, [email protected]") is not equal to ("Invalid email or password")
DemoTests/rejectsAnEmailWithoutAt(): Tests/SignInTests.swift:18: Expectation failed: ...
  • XCTest と Swift Testing の両方に対応しています。
  • 失敗した各テストは、再実行対象を 1 つだけ指定する only に渡せる形式で名前が示されます。
  • 「0 tests ran」(テストターゲットがない、またはフィルターに一致するテストがない)は、成功ではなくエラーです。

ログとクラッシュ

app_logs は、Apple のフレームワークが内部から記録する何千行ものログではなく、アプリ自体が出力した内容を表示します。

  • app_control がアプリを起動した時点から保持される、アプリの print() 出力。
  • 起動時からストリーミングされる、アプリ独自のシステムログ行(アプリのサブシステム、またはアプリ独自のコードによるログ)。macOS は情報レベルの行をメモリー内にのみ保持し、シミュレーターがビジー状態になると数秒以内に破棄するため、後からログストアを読んでも見つかりません。
  • grep は、画像が見つからない場合やレイアウト警告など、Apple のログ行も検索します。
  • wait_for は、タップ後にネットワーク呼び出しが始まった場合などに、ログ行が出るまで最大 25 秒待機します。
  • crashes は、クラッシュしたスレッドをコードの行まで示すクラッシュレポート(ItemsView.body.getter (App.swift:64))を、アプリの最後の出力とともに一覧表示します。最後の出力には Swift 自身のメッセージ(App.swift:64: Fatal error: ...)が含まれます。macOS がレポートを書き込むまで、最大 1 分かかる場合があります。

複数のエージェント、1 台の Mac

  • 各エージェントは独自の MCP サーバーを実行し、device_use を通じて独自のシミュレーターを保持し、独自のクラウドフォンも使用します。あるエージェントの cloud start が別のエージェントのツールに影響することはなく、あるエージェントの cloud stop が別のエージェントのフォンを終了させることもありません。フォンは、エージェントのサーバーが終了すると停止します。ターミナルで入力した cloud start は、コマンドライン自身のものです。
  • Mac 上のすべての simulator-use プロセスを通じて、シミュレーターの起動が重なることはありません。8 GB の Mac でシミュレーターを 2 台同時に起動すると、数分間スワップが発生したためです。
  • SIMULATOR_USE_MAX_BOOTED で同時に実行できる台数を制限できます。別のシミュレーターを要求すると、先にほかのシミュレーターがシャットダウンされます。
  • Mac 上のすべての simulator-use プロセスを通じて、1 台のシミュレーターでの操作は一度に 1 つだけ実行されます。そのため、2 つのエージェントや 2 つのコマンドによるタップが割り込むことはありません。

一度に1つのコマンド

シェルから1回の呼び出しにつき1つのコマンドを実行してシミュレーターを操作するエージェントには、同じツールが提供されます。

  • simulator-use use の指定は記憶されます。次のコマンドではその Simulator が使われ、複数の Simulator が起動している場合も同様です。SIMULATOR_USE_STATE_DIR を指定すると、simulator-use のファイルの保存先を変更できます(デフォルトは一時フォルダー内の simulator-use)。
  • 各コマンドは自身の処理が完了するまで待機するため、追跡するジョブはありません。
  • simulator-use call <tool> '<json>' は、MCP 名でツールを呼び出し、MCP コンテンツを1行で出力します。失敗時は {"content":[...],"isError":true}、画像は base64 で出力されます。
$ simulator-use call ui_look '{"find":"Sign In"}'
{"content":[{"type":"text","text":"Demo · Sign In · iPhone 17 Pro (iOS 27.0)\nbutton \"Sign In\" #signIn @201,350"}]}

現時点でできないこと

  • SwiftUI がホストする Web ビュー、Safari のページ、アプリ内ブラウザー、Flutter、ゲームのキャンバスは読み取れません。その場合は読み取れないことが通知されますが、スクリーンショットを撮り、座標を指定してタップできます。
  • 実機、Android、横向きへの回転、ピンチ操作、マルチタッチには対応していません。
  • アプリがアクセシビリティ情報から隠しているテキストは読み取れません。一部の React Native アプリではテスト ID がラベルに設定されており、そのような場合は読み取り時に通知されます。

インストール

Xcode と Simulator ランタイムを備えた macOS、および Node 20 以降が必要です。

Mac がありませんか? エージェントを Linux、Windows、またはクラウドサンドボックスで動かす場合は、NoMac を使うと、Xcode と iOS Simulator を備えたクラウド上の実機 Mac を分単位の料金で利用できます。

# Claude Code
claude mcp add simulator-use -- npx -y simulator-use mcp

# Codex
codex mcp add simulator-use -- npx -y simulator-use mcp

Claude Code では、プラグインとしても利用できます:/plugin install simulator-use --marketplace NoMac-app/simulator-use。

Cursor、Windsurf、VS Code、および JSON 設定に対応するその他のクライアント:

{
  "mcpServers": {
    "simulator-use": { "command": "npx", "args": ["-y", "simulator-use", "mcp"] }
  }
}

その他のクライアントでは、npx -y simulator-use mcp を stdio サーバーとして実行します。MCP 2024-11-05 から 2026-07-28 までのバージョンに対応しています。

シェルから操作するエージェントは、代わりに CLI を利用できます。パッケージ内の skill/SKILL.md で、2 KB 未満で使い方を説明しています。

シェルからは、npx simulator-use look を実行します。

クラウド

このマシンでシミュレーターを実行できない場合(Linux、Windows、クラウドエージェントなど)や、CI の場合は、同じツールを NoMac 上のクラウド iPhone シミュレーターで実行できます。Xcode を搭載した Mac を、1 分単位で 1 時間あたり $0.80 で利用できます。

simulator-use cloud start      # signs in through a link the first time (or NOMAC_API_KEY), starts a phone (--device ipad for an iPad, --device iphone-pro-max for 6.9-inch App Store screenshots)
simulator-use run              # every tool now runs there; run and test send the project first
simulator-use cloud extend 30  # 30 minutes more (an hour by default), up to 8 hours in all
simulator-use cloud stop       # ends it; the tools run on this machine again
simulator-use cloud run . --tests   # CI in one line: start, build, run, test, a screenshot and a recording, stop

スマートフォンにないファイルだけが送信されます(1 ファイルの変更なら 1 ファイルだけが送信されます)。アカウント専用の暗号化されたワークスペースに保存され、セッション間でも保持されるため、ビルドはインクリメンタルに実行されます。ビルド出力と依存関係は送信されません。前回の送信後に変更されたファイルだけが再度読み込まれます(simulator-use の状態フォルダー内のインデックスを使用します。SIMULATOR_USE_SYNC_INDEX=0 を設定すると、すべてのファイルを読み込みます)。CocoaPods プロジェクトもそこでビルドできます。Podfile と Podfile.lock に記載されたものと異なる Pod の場合、ビルド前にスマートフォンのホストで pod install が実行され、ロックファイルで指定されたバージョンが維持されます。次回のビルドではこの処理は省略されます。cloud ツールも MCP 経由で同じ処理を行います。

cloud start は、ブラウザーでスマートフォンを見るためのリンクと、スマートフォンを操作するためのリンクを返します。cloud stop はセッションのリプレイを返します。画面の映像と各呼び出しが並んで表示されます(入力したテキストは含まれません)。リプレイは 7 日間保持されます。

マシン上のバックエンドと通信するアプリは、トンネル経由でバックエンドにアクセスします(Node 22 以降が必要です)。

simulator-use cloud tunnel 8080    # until Ctrl-C: the phone reaches localhost:8080 here, each request printed

応答には、スマートフォン上のアプリが使用するアドレス(例:http://127.0.0.1:20199)が記載されます。たとえば run --env "API_URL=http://127.0.0.1:20199" のように、アプリにそのアドレスを指定してください。通過した各リクエストは、ステータスと時刻とともに一覧表示されます(ポートを指定せずに cloud tunnel を実行すると、MCP 経由で表示されます)。トンネルはスマートフォンの実行中は有効で、接続が切れても自動的に再接続されます。ポート 0 を指定して cloud tunnel を実行すると、トンネルが閉じます。トンネルが開いている間は、スマートフォン上のアプリ、Safari のページ、プロジェクトのビルドなど、スマートフォン上のあらゆるものがそのポートにアクセスできます。スマートフォン外からはアクセスできません。

GitHub では、どのランナーからでも実行できます。結果は各プルリクエストに投稿され、スクリーンショットと録画は成果物として保存されます。

permissions:
  pull-requests: write
steps:
  - uses: actions/checkout@v5
  - uses: NoMac-app/[email protected]
    with:
      api-key: ${{ secrets.NOMAC_API_KEY }}

実行には simulator-use 自身のタグが使われます(@v0.12 はそのタグの内容を実行し、version で別のバージョンを選択します)。path はプロジェクトのフォルダー、scheme は複数ある場合に使用するスキームです。tests: false にするとテストを省略できます(テストターゲットがないプロジェクトは、それ以外の場合は失敗します。テストが 0 件でも合格にはなりません)。キャンセルされた実行ではスマートフォンが停止します。また、フォークからのプルリクエストはシークレットを取得できないため、その理由を示して失敗します。ジョブのログとプルリクエストのコメントは公開される可能性があるため、CI(CI または GITHUB_ACTIONS が設定されている環境)では、cloud run はサインインせずに開けるリンクを出力しません。リンク先のファイルは実行の成果物に保存され、リプレイのリンクはアカウントのキーを使って読み込みます(GET https://nomac.app/api/v1/simulator/sessions/{id、links.replay)。

プライバシー

クラウドモードが有効でない限り、simulator-use は何も送信しません。テレメトリーはなく、実行時にネットワークへアクセスすることもありません。処理はすべて Mac 上で xcrun simctl、同梱の AXe バイナリ、sips を実行して行われます。クラウドモードが有効な場合は、実行またはテストするプロジェクトとツールの呼び出しが NoMac に送信され、セッションのリプレイは 7 日間保持されます。プロジェクトとは、そのプロジェクトが属する Git リポジトリ内で Git が追跡するファイル、または追跡対象となるファイルです(.gitignore で除外されるものはマシン上に残ります)。Git リポジトリに属していない場合は、そのフォルダーが対象になります。いずれの場合も、ビルド出力、依存関係、エディターの状態、キーや認証情報のファイル(.env ファイル。ただしそのサンプルを除く。.p8、.p12、.pfx、.pem、.key、プロビジョニングプロファイル、キーストア、SSH キー、.netrc)は、Git で追跡されていても送信されません。

仕組み

simulator-use は、小規模なネイティブエンジン(native/engine)を使って Simulator を読み取ります。Simulator ごとに 1 つのプロセスを起動し、パッケージ化の際にチェックサムを検証した固定バージョンを同梱する AXe(MIT)のフレームワークと、xcrun simctl を基盤にしています。エンジンは Simulator の入力、アクセシビリティセッション、画面バッファーを開いたままにするため、タップは数ミリ秒、画面全体の読み取りは数百ミリ秒で完了します。また、ステップでは固定時間待つのではなく、ピクセルの変化が止まるまで待機します。Web ビューはポイントごとに読み取ります。エンジンを実行できない場合は、AXe が呼び出しごとに 1 つのプロセスで同じ処理を行います。ビルドするテストランナーがないため、初回の呼び出しもそれ以降と同じ速さです。

開発

npm install
npm run axe        # fetch the pinned AXe into vendor/axe
npm run native     # build the engine and the clipboard helper into vendor/axe (IDB_HEADERS: idb's PrivateHeaders)
npm test           # node --test, no build needed
npm run build      # dist/ for the npm package
node bin/simulator-use.js look

エンジンのビルドに使えるのは、AXe のフレームワークをビルドしたものと同じ Swift だけです。AXe 1.8.0 の場合は Swift 6.3.2 です。これは Xcode 26.5(ビルド 17F42)のリリースに使われたバージョンです。npm run native は最初にコンパイラーを確認します。別の Xcode が選択されている場合は、Xcode 26.5 の Contents/Developer を DEVELOPER_DIR に設定してください。ビルドは再現可能です。Xcode 26.5 を使えば、リリースタグの新規クローンから、どのフォルダーでも、公開済みパッケージとバイト単位で一致する両方のバイナリーをビルドできます。署名も含めて一致します。2026 年 10 月 26 日に確認した sha256:

リリースsimulator-use-enginesimulator-use-pbset
0.12.0 to 0.12.22bc4891ec8a2a92b26bd970066df46d55553ff1fdd682f3637a7645a1d9184ea903d589b5d9b1a7763447472bc60a0f2dc971384a0ded6cd77782896d2da3f22
0.11.0f65ccd92d5eadcfa9dc9065c66c0f71e9acd3f22282f94be5f977a7c919c7cc0903d589b5d9b1a7763447472bc60a0f2dc971384a0ded6cd77782896d2da3f22

examples/swiftui-demo は、テスト対象の画面を提供するサンプルアプリです。scripts/golden.sh はこれをビルドして Simulator で実行し、19 個のゴールデンタスクを確認します。ビルドと起動を 1 回の呼び出しで行うこと、サインイン、切り替え、項目を開くこと、戻ることとスクロール、アプリのログ、クラッシュ、file:line 形式のビルドエラーとテスト失敗、動画、そして大きなエラー表示で失敗しなければならない誤ったパスワードが含まれます。

examples/edge-lab は、セグメント、ステッパー、スライダー、メニュー、アラート、シート、フルスクリーンカバー、権限のプロンプト、あらゆる言語のテキスト、自動修正、遅れて表示されるコンテンツ、トースト、スワイプで削除、長押し、Web ビュー、UIKit、ディープリンクなど、扱いにくい画面をすべて備えたアプリです。scripts/lab.sh はこれをビルドし、26 項目のチェックを実行します。

SIMULATOR_USE_DEBUG=1 を設定すると、各ステップとプログラムの実行時間がすべて出力されます。

NoMac で開発

simulator-use は NoMac で開発されています。NoMac では、AI エージェントがクラウド上の実機 Mac を借りて、Apple アプリのビルド、実行、テストを行えます。このツールは、そうした Mac 上での何千ものエージェント実行から生まれました。エージェントがどこで行き詰まるか、画面上の何を読み違えるか、作業を続けるために何を伝える必要があるかを踏まえています。

simulator-use を実行できない環境(Mac がない、Xcode がない、Simulator ランタイムがない)では、エラーメッセージに入手先として NoMac が表示されます。simulator-use が動作している場合には表示されず、SIMULATOR_USE_NO_CLOUD_HINT=1 を設定すると非表示にできます。

ライセンス

MIT です。同梱される AXe と IDB のフレームワークも MIT です。THIRD_PARTY_LICENSES を参照してください。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。