世界を動かす技術を、日本語で。

AppleのVirtualization.frameworkを使用して仮想iPhoneを起動する

2026年8月29日原文(github.com)

概要

Apple Silicon搭載のmacOS 15+上で、Virtualization.frameworkを使い仮想iPhoneを構築・起動する手順ガイド。 vphone-cliを用いたインストール、仮想マシン(VM)の作成や管理、SIP/AMFI緩和設定までを網羅。 複数のファームウェアバリアントと接続方法、トラブルシューティングも解説。 自動化や高度な利用例にも対応。 公式リポジトリやFAQも参照可能。

Apple Virtualization.frameworkを利用した仮想iPhone起動ガイド(PCC研究VMインフラ対応)

  • Apple Silicon搭載Mac (macOS 15 Sequoia以降)での仮想iPhone起動手順
  • Xcode + iOS SDK が必須(ゲストデーモンのクロスコンパイル用)
  • SIP/AMFI緩和 が必要(未署名バイナリのprivate PV=3権限付与を許可)

必要な依存パッケージ

  • Homebrewで以下をインストール
    • python@3.13
    • aria2
    • wget
    • gnu-tar
    • openssl@3
    • ldid-procursus
    • sshpass
    • keystone
    • cmake
    • libusb
    • ipsw
    • zstd

vphone-cliのインストール・ビルド

  • brew tap & install
    • brew install zqxwce/tap/vphone-cli
  • リポジトリをクローン
    • git clone --recurse-submodules https://github.com/Lakr233/vphone-cli.git
  • セットアップスクリプト実行
    • ./scripts/setup_tools.sh(依存解決、ツールチェーン構築、Python venv作成)
    • ./scripts/build.sh(vphone-cliのビルド・署名、.appバンドル、vphonedクロスコンパイル)
  • コマンド確認
    • .build/vphone-cli.app/Contents/MacOS/vphone-cli --help

クイックスタート

  • 1コマンドでVM作成から起動まで自動化
    • vphone-cli vm create myphone -V jb(ダウンロード→パッチ→DFUリストア→CFWインストール→初回起動)
    • vphone-cli vm launch myphone

基本コマンド

  • VM管理
    • vphone-cli vm list(一覧表示、--jsonでスクリプト利用可)
    • vphone-cli vm info myphone(詳細表示)
    • vphone-cli vm new myphone(空バンドル作成、CPU/メモリ/ディスク指定可)
    • vphone-cli vm config myphone --cpu 8 --memory 8192(構成変更)
    • vphone-cli vm clone myphone myphone-2(APFSクローン、新デバイスID)
    • vphone-cli vm export myphone --out myphone.tzst(zstd形式でエクスポート、--maxでxz圧縮も可)
    • vphone-cli vm import myphone.tzst --name restored(インポート)
    • vphone-cli vm rename myphone iphone16(リネーム)
    • vphone-cli vm delete iphone16(削除)

手動でVM構築(vm createの自動化内容)

  • vphone-cli vm new myphone(1. 空バンドル作成)
  • vphone-cli fw prepare myphone --iphone-version 26.1(2. IPSW取得・マージ)
  • vphone-cli fw patch myphone --variant jb(3. ブートチェーンパッチ適用)
  • vphone-cli vm launch myphone --dfu &(4. DFUモードで起動、バックグラウンド実行)
  • vphone-cli restore myphone --get-shsh(SHSH取得)
  • vphone-cli restore myphone(DFUリストア)
  • vphone-cli vm stop myphone(DFUブート停止)
  • vphone-cli cfw install myphone --variant jb(5. CFWインストール、sudo権限要)
  • vphone-cli vm launch myphone(6. 初回起動)

iOSアップデート方法

  • fw prepare時に--iphone-source /path/to.ipsw--cloudos-source /path/to.ipswで任意のIPSWを指定可能

ファームウェアバリアント

  • less :パッチ4件、iOSのセキュリティ緩和なし
  • regular :パッチ42件、AMFI/SSV/Img4/TXMバイパス
  • dev :パッチ53件、TXM権限・デバッグバイパス追加
  • jb :パッチ113件、完全Jailbreak(Sileo, TrollStore自動インストール)
  • exp :パッチ141件、JB拡張+VM検出回避パッチ
    • 詳細はresearch/0_binary_patch_comparison.md参照

SSH/VNC接続

  • Jailbreak環境ssh -p 22222 mobile@<vm-ip>(パスワードalpine)
  • regular/dev環境ssh -p 22222 root@<vm-ip>
  • VNC接続vnc://<vm-ip>:5901

ファイル・データ保存先

  • ~/.vphone/ :全データルート($VPHONE_ROOTで変更可)
    • ~/.vphone/VMs/ :VMバンドル($VPHONE_LIBRARY_ROOTで変更可)
    • ~/.vphone/ipsws/ :ダウンロード済みIPSW
    • ~/.vphone/tools/ :APFS seal-volume成果物
    • ~/.vphone/debs/ :CFWインストール用deb
    • ~/.vphone/venv/ :Python仮想環境($VPHONE_VENV_DIRで変更可)

SIP/AMFI緩和手順

  • Option A:SIP完全無効+AMFI無効(最も許容的)
    • リカバリーモードでcsrutil disablecsrutil allow-research-guests enable
    • 再起動後、sudo nvram boot-args="amfi_get_out_of_my_way=1 -v"(再起動要)
  • Option B:SIP有効(デバッグのみ緩和)+amfidontでバイナリ許可
    • リカバリーモードでcsrutil enable --without debugcsrutil allow-research-guests enable
    • 再起動後、vphone-amfidont実行(ローカルビルド時は.build/vphone-cli.app/Contents/Resources/vphone-amfidont

動作確認済み環境

  • Mac16,11/16,8/16,12/16,6 などApple Silicon機種、iOS 26.1〜27.0b2、CloudOS各種で検証済み

FAQ・トラブルシューティング

  • zsh: killed ./vphone-cli :AMFI/デバッグ制限未緩和、SIP/AMFI緩和手順参照
  • Virtualization is not available :Mac自体がVM上の場合は不可、ネイティブmacOS 15+必須
  • "Press home to continue"で停止 :VNC接続し右クリック(2本指タップ)でホームボタン操作
  • System appsがインストール不可 :iOSセットアップ時に日本/EU以外(例:United States)を選択
  • AppがEXC_GUARDでクラッシュvphone-cli fw patch <name> --variant <v> --force-exc-guardで再パッチ&再インストール
  • .ipa/.tipaのインストール :VMのInstallメニューからドラッグ&ドロップまたはファイル選択
  • cfw installでldid-procursusがハング :Homebrewでbrew install --HEAD ldid-procursus && brew link --overwrite ldid-procursus、既存プロセスはsudo kill -9 <pid>で停止

自動化・拡張

  • vphone-cliは制御ソケット(<bundle>/vphone.sock)を提供
    • スクリーンショット、タッチ、スワイプ、キー操作、クリップボード制御等が可能
    • AIによるE2Eテスト用にインラインスクリーンショット返却
    • MCPサーバとしてvphone-mcpも提供

謝辞

  • wh1te4ever/super-tart-vphone-writeup へのリスペクト

公式リポジトリhttps://github.com/Lakr233/vphone-cli 詳細・最新情報はREADMEやissueも参照

Hackerたちの意見

これって、AppleがXcodeでやってることなの?

シミュレーターのこと言ってるなら、違うよ。それは仮想化じゃなくて、単に自分のマシンでローカルに動かしてるだけだから。普通の命令セットを使うから、RAMやCPUのオーバーヘッドも少ないし、別のカーネルやユーザースペースを動かさないからね。

面白いプロジェクトだね。もし実際に動くなら、テストやリバースエンジニアリングの可能性がめっちゃ広がるよ。

このプロジェクトは本当にクールだけど、SIPを無効にしたり部分的に無効にしなきゃいけないのが残念だな。これが原因でいくつかの機能が壊れちゃうかもしれないし。

ほんと残念だけど、企業のマシンでは絶対にこれを動かせないし、趣味としてしかできないんだよね。

すごいリリースだね!ビルダーにおめでとう!ここでたくさんの素晴らしい作業が行われたし、最近のiOSプロファイリングもすごかった。Corelliumが研究専用になっちゃって、思うようにアプリをプロファイリングできなくなったのが辛い。朝のコーヒータイムに楽しいことが待ってるよ!

コレリウムを潰そうとしたのに、自分たちで必要なパーツを送ったのがなんか変な感じだな。https://github.com/wh1te4ever/super-tart-vphone-writeup

このプロジェクトで仮想iPhone上でアプリのパフォーマンステストがやりやすくなるのかな?

iOSのセットアップ中に、日本やEUを地域として選ばないでね(VMが満たせない追加の規制チェックがあるから) これらのチェックって何なんだろう?

日本ではフェリカチップかもしれないね。

第三者のアプリストアへのアクセスを防ぐためだろうね。EUと日本ではそれを許可しなきゃいけない法律があるから。 > EUの代替アプリマーケットプレイスに関するサポート文書で、Appleは「代替アプリマーケットプレイスのデバイスの適格性は、デバイス内処理を使用して決定され、適格性のインジケーターのみがAppleに送信される」と説明している。実際には、EUのiOSユーザーが代替マーケットプレイスをインストールしたい場合、Apple IDの国または地域を適格な国または地域に設定する必要がある。また、サポートされているEUの国に物理的にいる必要もある。 > EUのiOSユーザーが適格な地域を離れた場合、Appleは「猶予期間」を設け、代替アプリストアからダウンロードしたアプリの更新ができなくなるまでの期間を設ける。「あまりに長く離れると、新しい代替アプリマーケットプレイスのインストールを含むいくつかの機能にアクセスできなくなる」と会社は説明している。https://www.thurrott.com/apple/298862/apple-adds-some-condit...

兄弟たちが言ってた第三者インストール機能に加えて、日本にはサイドボタンを第三者の音声アシスタントに再割り当てする地域機能もあるよ(com.apple.developer.side-button-access.allow)。

Hacker Newsで議論の続きを見る