
2026/08/29 8:02
Apple の Virtualization.framework を用いて仮想 iPhone を起動する
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
元の要約は高品質であり、リストから全ての主要ポイントを効果的に捉えています。文章の流れは、ツールの目的から前提条件、セットアップ、使用コマンド、高度な機能、そして最後にその波及影響へと論理的に展開しています。表現は明確かつ専門的でおり、改善点は見当たりません。
概要:
本テキストは、Apple Silicon macOS に仮想 iPhone をブートさせるための強力なツールチェーンである
vphone-cli を紹介します。これにより、開発時に物理デバイスを持つ必要が実質的になくなりつつあります。このシステムは、PCC リサーチインフラストラクチャ内の Apple の Virtualization フレームワークを活用し、ファームウェアのダウンロードからジャイルブレイクの実行までを含む完全な仮想マシンのライフサイクルを、安全なコマンドラインから管理できるようにします。起動には Xcode などの特定の前提条件と、SIP(システム整合性保護)や AMFI のようなシステム保護の設定変更が必要ですが、大部分の依存関係は Homebrew を通じて簡単に管理できます。セットアップが完了すると、開発者は SSH(ポート 22222)および VNC(vnc://<ip>:5901)を通じて仮想 iPhone に直接アクセスし、堅牢な品質保証タスクを実行できます。さらにこのエコシステムは、自動化ソケットを介したタッチ入力シミュレーションや AI 駆動のテストフレームワークの統合といった高度な相互作用も支援しています。究極的には、この技術は個人ユーザーも企業も、多数の実機ハードウェアユニットを維持する物流的な負担をかけずに、大規模なデバイステストを自動化し、カスタムファームウェアを展開し、深いセキュリティ研究を行うことを可能にします。本文
Apple Silicon で iPhone VM を起動する方法 (Virtualization.framework)
Apple の
Virtualization.framework と PCC リサーチインフラストラクチャを使用して、Mac で仮想的な iPhone(VM)を起動・運用するためのガイドです。
1. 前提条件と環境設定
システム要件
- チップセット: Apple Silicon (M1/M2/M3 など) 搭載 Mac
- OS: macOS 15 (Sequoia) 以降
- 開発環境: Xcode および iOS SDK(ゲストのデーモンをクロスコンパイルするため必須)
セキュリティ設定 (SIP/AMFI の緩和)
仮想マシンを実行するには、システム保護機能の一時的な緩和が必要です。以下のいずれかの方法で対応してください。
オプション A: SIP を完全に無効化する(推奨:最も制限が少ない)
Recovery モード(電源ボタン長押し → ターミナル起動)から実行します。
csrutil disable csrutil allow-research-guests enable
その後、以下のブート引数で再起動して AMFI を無効化します。
sudo nvram boot-args="amfi_get_out_of_my_way=1 -v"
オプション B: SIP を維持しつつホワイトリスト化する(デバッグ用)
Recovery モードから実行します。
csrutil enable --without debug csrutil allow-research-guests enable
その後、以下のコマンドを実行:
vphone-amfidont # ローカルビルドの場合: .build/vphone-cli.app/Contents/Resources/vphone-amfidont
依存関係のインストール
Homebrew を使用して必要なツールをインストールしてください。
brew install python@3.13 aria2 wget gnu-tar openssl@3 ldid-procursus sshpass keystone cmake libusb ipsw zstd # ldid-procursus の最新ビルドが必要な場合は: brew install --HEAD ldid-procursus && brew link --overwrite ldid-procursus
2. インストールとビルド
ソースの取得
brew install zqxwce/tap/vphone-cli git clone --recurse-submodules https://github.com/Lakr233/vphone-cli.git
ビルド手順
依存関係の解決、クロスコンパイル、署名処理を自動で行います。
cd vphone-cli ./scripts/setup_tools.sh # ツールチェーンの準備と仮想環境作成 ./scripts/build.sh # バインディング作成と vphoned のビルド
インストール確認
ビルドされたアプリケーションの確認:
cd .build/vphone-cli.app/Contents/MacOS/ vphone-cli --help
注意: 構築されたファイルは
に自動的に保存されます。~/.vphone/
3. クイックスタート (VM の作成と起動)
単一コマンドで VM のセットアップ(ダウンロード→パッチ→DFU リストアール→CFW 導入)を実行します。
# VM の作成 (-V / --variant でバージョン選択可能) vphone-cli vm create myphone -V jb # VM の起動 vphone-cli vm launch myphone
4. コマンド一覧と詳細な運用
管理コマンド
VM のライフサイクルを制御します。
| コマンド | 説明 |
|---|---|
| VM の一覧表示 ( オプション付き) |
| 単一 VM の詳細情報 |
| CPU/メモリ設定付きの空 VM の作成 |
| VM の仕様変更 (例: ) |
| APFS クローンによる高速複製(新しい ID を付与) |
| データの圧縮エクスポート (zstd/xz) |
| エクスポートデータのリストアール |
| VM 名の変更 |
| VM の削除 |
手動での VM ビルド(自動化を避ける場合)
以下の手順で個別に処理を行うことができます。
-
空のバインディング作成
vphone-cli vm new myphone -
IPSW ダウンロードとマージ
vphone-cli fw prepare myphone --iphone-version 26.1 # より新しい iOS のソースを指定したい場合: # vphone-cli fw prepare myphone --iphone-source <path> --cloudos-source <path> -
ブートチェーンパッチ適用
vphone-cli fw patch myphone --variant jb -
DFU リストアールと起動
vphone-cli vm launch myphone --dfu & # バックグラウンド実行 vphone-cli restore myphone --get-shsh # SHSH トークン取得 (オプション) vphone-cli restore myphone # 正式なリストアール -
CFW インストール
vphone-cli cfw install myphone --variant jb注意: このコマンドはホストマウントを使用するため、パスワード入力が必要です。
-
初回ブート
vphone-cli vm launch myphone
5. ファームウェアバリエーション (--variant
)
--variantセキュリティバイパスの度合いを制御するための 5 つのパターンがあります。
| バリエーション | ブートチェーンパッチ数 | CFW フェーズ数 | 特徴・用途 |
|---|---|---|---|
| less | 4 | 2 | パッチ未適用。iOS のセキュリティ緩和維持。 |
| regular | 42 | 10 | AMFI/SSV/Img4/TXM のバイパス実施。標準的運用向け。 |
| dev | 53 | 12 | TXM エントライティメント追加、デバッグ機能付与。 |
| jb | 113 | 14 | フル Jailbreak 対応。初回ブート時に Sileo, TrollStore が自動インストール。 |
| exp | 141 | 18 | JB の超集合+VM 検出回避パッチ(研究用)。 |
詳細な比較は
を参照してください。research/0_binary_patch_comparison.md
6. アクセス方法 (接続)
VM 起動後に以下のいずれかで接続できます。
- SSH (Jailbreak モード):
ssh -p 22222 mobile@<vm-ip> # パスワード: alpine - SSH (Regular/Dev モード):
ssh -p 22222 root@<vm-ip> - VNC:
vnc://<vm-ip>:5901
7. ファイル構成とパス管理
vphone-cli が生成するデータは、デフォルトでは ~/.vphone/ に格納されます。
このディレクトリ外に保存することで、署名されたバインディングの可搬性を保ちます。
デフォルトパス構造
| パス | 内容 |
|---|---|
| ユーザーデータルート ( で上書き可能) |
| VM バインディング(ライブラリとして機能) |
| ダウンロードされた IPSW ファイルキャッシュ |
| で取得した APFS seal-volume アーティファクト |
| CFW 導入時に置かれる パッケージ (Sileo, apt など) |
| Python 仮想環境 ( で上書き可能) |
優先順位(オーバーライド順)
- アイテム固有の上書き設定 (例:
) — 最優先$VPHONE_LIBRARY_ROOT $VPHONE_ROOT
— デフォルト~/.vphone
8. よくあるトラブルシューティング (FAQ)
-
エラーzsh: killed ./vphone-cli- AMFI やデバッグ制限が回避されていない可能性があります。
- 対処法:SIP/AMFI 緩和設定(
またはamfi_get_out_of_my_way=1
)を再確認してください。amfidont
-
特定のハードウェアで起動しない
- ネステッド仮想化(VM within VM)に対応していない可能性があります。
- macOS 15+ のホスト環境を使用しているか確認してください。
-
「ホームボタンを押して続行」でフリーズ
- VNC 経由で接続し、マウスの**右クリック(2 フィンガータップ)**でホームボタンの押下をシミュレーションしてください。
-
システムアプリのインストール失敗
- iOS セットアップ時の地域設定で「日本」や「EU」を選択すると追加規制チェックが発生します。
- **「米国」**などの他国を選択して回避してください。
-
起動時
エラーEXC_GUARD / GUARD_TYPE_MACH_PORT
で再パッチを適用し、リストアールを行ってください。(iOS 18 ベースでは必須)vphone-cli fw patch <name> --variant <v> --force-exc-guard
-
のインストール.ipa/.tipa- 起動中の VM ウィンドウ内のメニューから直接インストーターを使用するか、ドラッグ&ドロップ、またはファイルピッカー経由で導入してください。
-
によるメモリ無限増加・停止ldid-procursus
2.1.5-procursus7 のバグです。0 長所のエントリーメントを持つ Apple システムバイナリを処理する際、ゼロガードがないため発生します。ldid-procursus- 対処法:ソースから再ビルドして最新バージョンを使用してください(上記のインストールコマンド参照)。
9. オートメーション (vphone-mcp)
vphone-cli は <bundle>/vphone.sock というホストコントロールソケットを提供し、以下の機能をプログラム制御・テストに利用できます。
- スクリーンショット取得
- タッチ/スワイプ操作
- ハードウェアキー操作
- クリップボード管理
- AI 駆動のエンドツーエンドテスト(Inline スクリーンショット返却)
詳細は
vphone-mcp を参照してください。
10. 謝辞
本プロジェクトおよび関連ドキュメントは以下を参考に作成されました。