Vphone-cli: a virtual iPhone on Mac for iOS testing that doesn't replace the Simulator

vphone-cli allows you to boot a virtual iPhone on Apple Silicon Macs using Apple’s Virtualization.framework, but it looks more like an iOS research lab than a direct replacement for Xcode’s Simulator.

That difference matters.

Xcode’s Simulator remains the standard path for most app development. It’s fast, integrated, and designed for the everyday cycle of building, running, and debugging. vphone-cli plays in a different space: it creates a virtualized iPhone environment with iOS kernel and filesystem, firmware patches, jailbroken variants, SSH/VNC access, and a control socket on the host for automation.

That makes it interesting for iOS testing, security research, reverse engineering, and agent-controlled UI experiments.

It also makes it a tool worth handling carefully.

As of August 30, 2026, the project requires Apple Silicon, macOS 15+, Xcode with the iOS SDK, dependencies installed via Homebrew, and SIP/AMFI relaxation. These aren’t casual requirements. They’re the kind of requirements that tell you exactly what class of tool this is: powerful, practical, and with sharp edges.

What is vphone-cli?

vphone-cli is an open source CLI for booting a virtual iPhone on Apple Silicon Macs using Apple’s Virtualization.framework and the Private Cloud Compute research VM infrastructure.

The project’s own README summarizes it as a way to boot a virtual iPhone via Virtualization.framework using PCC research VM infrastructure.

In practice, vphone-cli automates a workflow that would otherwise be deeply manual: creating a VM bundle, preparing iPhone and cloudOS firmware, patching the boot chain, restoring in DFU mode, installing custom firmware, and launching the resulting virtual device.

The README exposes that complexity in two layers.

The quick path is small:

vphone-cli vm create myphone -V jb
vphone-cli vm launch myphone

The manual path shows what happens underneath: vm new, fw prepare, fw patch, DFU boot, restore, stop, custom firmware installation, and first boot.

That’s why this isn’t simply another Simulator wrapper. vphone-cli works with VM bundles, IPSWs, boot chain patches, custom firmware variants, and host security constraints.

For developers, the appeal is clear: you have a scriptable iOS target that you can clone, export, import, launch, inspect, and control from the host.

The cost is also clear: you’re operating much closer to the platform’s internals.

How does vphone-cli differ from iOS Simulator?

vphone-cli differs from iOS Simulator because it virtualizes an iPhone environment rather than running Simulator builds as processes hosted on macOS.

That difference is the whole story.

iOS Simulator is great for normal app development, but it’s not a real iPhone. It doesn’t run as a full iPhone VM with the same kernel boundary, filesystem model, or device behavior. Many teams never need to worry about that difference. Others start worrying when a bug shows up on a real device and refuses to reproduce locally.

The discussion on Hacker News around vphone-cli came back to that point several times: Simulator is usually enough, until it isn’t. Comments mentioned categories where device-like behavior matters more: security research, Network Extensions, hardware-adjacent features, system behavior, locale-specific failures, and cases where an app works in Simulator but fails on a device.

vphone-cli doesn’t magically turn a Mac into a perfect physical iPhone. Apps can still detect that they’re not running on a normal device. Compatibility with Apple services is also a caveat: a GitHub discussion on the project tracks App Store, iMessage, and related services behavior, with participants pointing to virtualization and attestation obstacles.

So the correct mental model isn’t “a better Simulator”.

It’s “an iOS research virtual target”.

That makes the tool much more interesting and much less universal.

How to install vphone-cli on Mac?

vphone-cli installs with Homebrew, but the published installation also requires host prerequisites and security relaxation steps.

The README lists host requirements: Apple Silicon, macOS 15+ Sequoia, Xcode plus the iOS SDK, and SIP/AMFI relaxation to allow private PV=3 entitlements with unsigned binary.

It also lists these dependencies:

brew install python@3.13 aria2 wget gnu-tar openssl@3 ldid-procursus sshpass keystone cmake libusb ipsw zstd

Then the installation command is:

brew install zqxwce/tap/vphone-cli

That’s the simple part.

The uncomfortable part is SIP/AMFI. The README documents two options as of August 30, 2026.

The most permissive option disables SIP and then disables AMFI via boot-args:

csrutil disable
csrutil allow-research-guests enable

After restarting into macOS:

sudo nvram boot-args="amfi_get_out_of_my_way=1 -v"

The alternative keeps SIP active except for debug relaxation and then allows the binary with vphone-amfidont:

csrutil enable --without debug
csrutil allow-research-guests enable

Then:

vphone-amfidont

This is the part worth not overlooking.

Relaxing SIP and AMFI changes the security posture of your Mac host. It may be acceptable on a dedicated research machine. It may be unacceptable on a primary laptop with production credentials, customer data, signing keys, or internal repositories.

vphone-cli is installable. That doesn’t make it casual.

How to create and boot a virtual iPhone with vphone-cli?

You can create and boot a virtual iPhone with vphone-cli vm create and vphone-cli vm launch.

The README quick start is:

vphone-cli vm create myphone -V jb
vphone-cli vm launch myphone

The -V flag selects a firmware variant. The documented variants range from less, which keeps more iOS mitigations active, to regular, dev, jb, and exp, which add increasing levels of security bypass and research patches.

The jb variant includes full jailbreak with automatic Sileo and TrollStore installation on first boot. The exp variant goes further with anti-VM detection research patches.

That range is useful because different readers are going to want very different outcomes.

An app developer trying to reproduce a bug that only shows up on device might not want the most invasive patch set. A security researcher may need exactly the most permissive variants. An automation experiment may prioritize repeatability and control over realism.

vphone-cli also supports normal VM management commands:

vphone-cli vm list
vphone-cli vm info myphone
vphone-cli vm clone myphone myphone-2
vphone-cli vm export myphone --out myphone.tzst
vphone-cli vm import myphone.tzst --name restored
vphone-cli vm delete iphone16

That management surface is one of the reasons the project deserves coverage. It’s not just a proof-of-concept script. It has the shape of a developer tool: install, create, launch, inspect, clone, export, import, and automate.

What is a virtual iPhone on Mac good for?

A virtual iPhone on Mac is good for device-close testing, security research, reverse engineering, jailbroken workflows, UI automation, and repeatable experiments that are inconvenient on physical hardware.

The most obvious workflow is testing.

If an app behaves differently on a real device than in the Simulator, a virtualized environment gives the team another target between “it works on my Mac” and “go find a physical iPhone”. It doesn’t replace real device testing, but it can reduce how many times a team needs hardware just to check a hypothesis.

The second flow is research.

The README includes variants of firmware patches, jailbreak-oriented behavior, SSH access, VNC access, and references to binary patch comparisons. That makes the tool relevant for people working close to iOS internals, not just those publishing apps on the App Store.

The third flow is automation.

vphone-cli exposes a control socket on the host at <bundle>/vphone.sock for programmatic control. The README says it supports screenshots, taps, swipes, hardware buttons, and clipboard operations, with each action returning an inline screenshot for AI-driven end-to-end testing.

That’s where vphone-mcp becomes interesting.

The separate vphone-mcp project wraps the VM control socket as an MCP server. Its README describes tools for screenshots, hardware buttons, app launching, scrolling, swipes, coordinate-based taps, opening the Notification Center, opening the Control Center, and navigating iOS UI. It also says each action returns a compact grayscale screenshot so an LLM can see what happened.

This is the yoDEV angle hiding in plain sight.

A virtual iPhone is useful. A virtual iPhone that an agent can see, touch, swipe, and inspect is a different testing surface.

Does vphone-cli replace a physical iPhone for testing?

vphone-cli doesn’t replace a physical iPhone for final testing, but it can narrow the gap between testing only in the Simulator and debugging only with hardware.

That’s the sober answer.

There are still several hard limits.

First, this is virtualization, not a physical device. Anything that depends on sensors, radios, secure hardware, biometrics, Apple Pay, carrier behavior, the camera, NFC, SEP-backed attestation, or Apple’s production services may not behave like on a real iPhone.

Second, the project’s own FAQ includes regional warnings. During iOS setup, the README says don’t choose Japan or the European Union because there are additional regulatory checks the VM can’t satisfy. That’s exactly the kind of detail that should make a team cautious before using the VM as proof of production behavior.

Third, setup depends on platform internals that can shift. Apple can change iOS, cloudOS, Virtualization.framework behavior, PCC research VM assumptions, or enforcement details. The project already documents tested environments as a specific matrix of host, iPhone, and cloudOS versions. That matrix is useful, but it’s also a warning label.

For real release confidence, you still need coverage on physical devices.

For reproducing certain classes of bugs, exploring system behavior, building investigation flows, and giving agents a controllable iOS target, vphone-cli is much more interesting.

What should teams review before using vphone-cli?

Teams should review host security, limitations with Apple services, version compatibility, and the provenance of privileged steps before adopting vphone-cli.

Host security is the big point. The relaxation of SIP/AMFI isn’t a minor installation detail. It changes what the host allows. Recommending a dedicated Mac for this work is much simpler than recommending a daily machine with sensitive credentials.

The Apple services question matters too. The GitHub discussion about App Store, iMessage, and related compatibility suggests this isn’t a reliable way to test flows that depend on the real Apple services stack. That can affect Apple Pay, iCloud, App Store downloads, Messages, Wallet, or account-linked behavior.

Compatibility is inevitable. As of August 30, 2026, the README documents specific tested combinations of host, iPhone, and cloudOS. Treat them as dated facts, not permanent promises.

The privileged steps deserve normal supply chain caution. The Hacker News discussion includes concern about binaries used during setup and operations with root. That doesn’t make the project bad; it means it’s the kind of tool you evaluate as infrastructure, not as a small package for a toy project.

For individual researchers, that can be fine.

For teams, the reasonable path is a contained lab machine, pinned documentation, repeatable setup notes, and a clear line between experimental testing and release approval.

Why does vphone-cli matter now?

vphone-cli matters because it turns iOS virtualization from an obscure research route into an installable artifact for developers with automation hooks.

That’s the shift.

The repo has Homebrew installation. It documents commands. It has VM lifecycle management. It exposes automation from the host. It connects with MCP via vphone-mcp. It hit the Hacker News front page on August 29, 2026 because developers immediately understood the shape of the opportunity: not just “run iOS on a Mac”, but making iOS test environments more scriptable.

For developers in Latin America, the practical question isn’t whether everyone should install it tomorrow.

Most teams shouldn’t.

The better question is: where does your current iOS flow have a gap between the Simulator and a real device?

If that gap is routine UI work, the Simulator is still the right tool.

If that gap is system behavior, repeatable research, jailbreak analysis, Network Extension quirks, UI testing with agents, or a class of bugs that only appears outside the Simulator, vphone-cli deserves close attention.

It’s powerful because it doesn’t try to be friendly.

And precisely because of that it belongs in the “use with care” drawer.