vphone-cli Requirements for Apple Silicon: Complete Setup Guide
vphone-cli requires macOS 15+, Apple Silicon hardware with SIP and AMFI disabled, Xcode 16 with Swift 6.0, and a configured Python environment with binary analysis libraries.
The vphone-cli project by Lakr233 is a macOS-exclusive command-line tool that virtualizes iOS devices using Apple's Virtualization.framework with private PV=3 APIs. Running it on Apple Silicon demands specific hardware configurations, disabled security protections, and a multi-language build environment. This guide breaks down every requirement with source-level accuracy.
macOS Version and Hardware Requirements
Operating System: macOS 15 Sequoia or Later
vphone-cli depends on Virtualization.framework features introduced in macOS 15. According to AGENTS.md, the platform support table explicitly lists:
| Platform | Variants |
|---|---|
| macOS 15+ | 1, 2, 3, UNKNOWN |
The PV=3 virtualization mode required for virtualized iPhone boot is only available starting with macOS 15. Earlier macOS versions lack the necessary private framework extensions.
Hardware: Apple Silicon Mandatory
The tool is architecturally bound to Apple Silicon (M1/M2/M3/…). Intel Macs are unsupported because:
- Virtualization.framework's PV=3 mode requires ARM-based CPU virtualization extensions
- The kernel patching mechanisms target arm64-specific memory layouts
- Firmware scripts assume arm64 binary formats
Critical Security Requirements: Disabled SIP and AMFI
System Integrity Protection (SIP)
vphone-cli requires complete SIP disablement to load private entitlements and kernel-level components. The scripts/setup_machine.sh file contains environment preparation logic, and repository documentation notes that standard SIP-blocked systems reject the tool's code signature modifications.
Apple Mobile File Integrity (AMFI)
AMFI must also be disabled via boot arguments. The private APIs used for virtualized device management trigger AMFI enforcement failures when active. Users must boot into Recovery Mode and execute:
# From Recovery Mode terminal
csrutil disable
# Additional AMFI boot argument required
nvram boot-args="amfi_get_out_of_my_way=1"
These security downgrades are documented as non-optional in the project's architecture overview.
Development Toolchain Requirements
Xcode 16 and Swift 6.0
The Package.swift file declares strict toolchain requirements:
// swift-tools-version:5.10
// When opened in Xcode, this package requires Swift 6.0
import PackageDescription
let package = Package(
name: "vphone",
platforms: [.macOS(.v14)],
// ...
)
Building requires:
- Xcode 16 or later installed
- Swift 6.0 toolchain active
- Command-line tools:
xcode-select --install
Swift Package Dependencies
The project pulls in Dynamic via submodule at scripts/repos/Dynamic/—a Swift package enabling runtime method dispatch without Objective-C bridging, essential for calling private Virtualization.framework APIs.
Python Environment and Firmware Tools
Required Python Packages
The requirements.txt specifies binary analysis dependencies for firmware patching:
capstone
keystone-engine
pyimg4
These power the patcher scripts in scripts/patchers/ for:
- capstone: Disassembling arm64 kernel binaries
- keystone-engine: Re-assembling modified instructions
- pyimg4: Parsing and resigning IMG4 firmware containers
Virtual Environment Setup
The Makefile automates Python environment preparation:
# From repository root
make setup_venv
This creates an isolated Python 3 environment with all cryptographic and binary analysis tools. The Makefile targets include:
| Target | Purpose |
|---|---|
setup_venv |
Creates Python venv and installs requirements |
build |
Compiles Swift executable with release optimizations |
boot |
Launches virtualized iPhone with GUI attachment |
External Dependencies and Submodules
Git Submodules
The .gitmodules file tracks three critical external projects:
[submodule "scripts/repos/trustcache"]
path = scripts/repos/trustcache
url = https://github.com/CRKatri/trustcache
[submodule "scripts/repos/insert_dylib"]
path = scripts/repos/insert_dylib
url = https://github.com/Tyilo/insert_dylib
[submodule "scripts/repos/libimobiledevice"]
path = scripts/repos/libimobiledevice
url = https://github.com/libimobiledevice/libimobiledevice
These provide:
- trustcache: Custom trust cache manipulation for bypassing code signing
- insert_dylib: Dynamic library injection for patched binaries
- libimobiledevice: USB communication with virtualized iOS devices
Clone with --recurse-submodules or run git submodule update --init --recursive after standard clone.
Host-Side Installation Privileges
The scripts/cfw_install_host.sh script requires sudo access for:
- Mounting disk images containing kernel extensions
- Installing CFW (Custom Firmware) drivers
- Manipulating virtualization storage backends
Complete Installation Workflow
Execute these commands in sequence on a prepared Apple Silicon Mac:
# 1. Verify macOS version (must report 15.0 or higher)
sw_vers -productVersion
# 2. Install Xcode 16 and select it
sudo xcode-select -s /Applications/Xcode.app
# 3. Clone with all submodules
git clone --recurse-submodules https://github.com/Lakr233/vphone-cli.git
cd vphone-cli
# 4. Build the Swift executable
make build
# 5. Prepare Python environment for firmware operations
make setup_venv
# 6. Verify installation
./.build/release/vphone --help
Verification Checklist
Before attempting to boot a virtual device, confirm:
- macOS 15+ running on Apple Silicon
- SIP disabled (
csrutil statusreports disabled) - AMFI disabled (boot-args contain
amfi_get_out_of_my_way=1) - Xcode 16 with Swift 6.0 selected
- Git submodules populated (
ls scripts/repos/shows all three directories) - Python venv active and packages installed
- Sudo access available for CFW installation steps
Summary
- vphone-cli requires macOS 15+ on Apple Silicon with SIP and AMFI completely disabled to function
- Build dependencies include Xcode 16, Swift 6.0, and the Dynamic Swift package for private API access
- Runtime firmware manipulation depends on Python 3 with
capstone,keystone-engine, andpyimg4in an isolated virtual environment - External C tools from trustcache, insert_dylib, and libimobiledevice submodules enable complete virtualized iOS device lifecycle management
- Administrative privileges via
sudoare required for host-side driver installation and disk manipulation
Frequently Asked Questions
Can vphone-cli run on Intel Macs with macOS 15?
No. The tool is architecturally restricted to Apple Silicon. The Virtualization.framework PV=3 mode and arm64-specific kernel patching mechanisms in scripts/patchers/ explicitly target ARM64 CPU features unavailable on Intel hardware.
Is disabling SIP and AMFI safe for daily use?
Disabling these security features exposes your system to elevated risk. The repository documentation treats this as a development/ research configuration only. Consider dedicated hardware or virtualized macOS environments for vphone-cli experimentation rather than daily-driver machines.
Why does the build fail with "no such module 'Virtualization'"?
This indicates macOS 14 or earlier, or SIP/AMFI partially enabled. The private Virtualization.framework headers required by Package.swift are only accessible when system protections are fully disabled and macOS 15+ is active. Verify with sw_vers and csrutil status.
Can I use an existing Python installation instead of make setup_venv?
Technically possible, but discouraged. The Makefile creates an isolated environment to prevent conflicts with system Python packages. The firmware patchers depend on specific capstone and keystone-engine versions that may conflict with other installed tools.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →