<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Vphone-Cli on Producthunt daily</title>
        <link>https://producthunt.programnotes.cn/en/tags/vphone-cli/</link>
        <description>Recent content in Vphone-Cli on Producthunt daily</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>en</language>
        <lastBuildDate>Sun, 30 Aug 2026 20:52:44 +0800</lastBuildDate><atom:link href="https://producthunt.programnotes.cn/en/tags/vphone-cli/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>vphone-cli</title>
        <link>https://producthunt.programnotes.cn/en/p/vphone-cli/</link>
        <pubDate>Sun, 30 Aug 2026 20:52:44 +0800</pubDate>
        
        <guid>https://producthunt.programnotes.cn/en/p/vphone-cli/</guid>
        <description>&lt;img src="https://images.unsplash.com/photo-1660296547779-aecd6c1ebfa6?ixid=M3w0NjAwMjJ8MHwxfHJhbmRvbXx8fHx8fHx8fDE3ODgwOTQyNDd8&amp;ixlib=rb-4.1.0" alt="Featured image of post vphone-cli" /&gt;&lt;h1 id=&#34;lakr233vphone-cli&#34;&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/Lakr233/vphone-cli&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Lakr233/vphone-cli&lt;/a&gt;
&lt;/h1&gt;&lt;div align=&#34;right&#34;&gt;&lt;strong&gt;&lt;a href=&#34;./docs/README_ko.md&#34;&gt;🇰🇷한국어&lt;/a&gt;&lt;/strong&gt; | &lt;strong&gt;&lt;a href=&#34;./docs/README_ja.md&#34;&gt;🇯🇵日本語&lt;/a&gt;&lt;/strong&gt; | &lt;strong&gt;&lt;a href=&#34;./docs/README_zh.md&#34;&gt;🇨🇳中文&lt;/a&gt;&lt;/strong&gt; | &lt;strong&gt;🇬🇧English&lt;/strong&gt;&lt;/div&gt;
&lt;h1 id=&#34;vphone-cli&#34;&gt;vphone-cli
&lt;/h1&gt;&lt;p&gt;Boot a virtual iPhone via Apple&amp;rsquo;s Virtualization.framework using PCC research VM infrastructure.&lt;/p&gt;
&lt;h2 id=&#34;prerequisites&#34;&gt;Prerequisites
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;Host:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Apple Silicon&lt;/li&gt;
&lt;li&gt;macOS 15+ (Sequoia)&lt;/li&gt;
&lt;li&gt;Xcode + iOS SDK (cross-compiles the guest daemon)&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#sipamfi-relaxation&#34; &gt;SIP/AMFI relaxation to allow private PV=3 entitlements with unsigned-binary&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Dependencies:&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;brew install python@3.13 aria2 wget gnu-tar openssl@3 ldid-procursus sshpass keystone cmake libusb ipsw zstd
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;install&#34;&gt;Install
&lt;/h2&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;brew install zqxwce/tap/vphone-cli
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;build&#34;&gt;Build
&lt;/h2&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;7
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git clone --recurse-submodules https://github.com/Lakr233/vphone-cli.git
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./scripts/setup_tools.sh      &lt;span class=&#34;c1&#34;&gt;# install deps, build toolchain submodules, create the Python venv&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./scripts/build.sh            &lt;span class=&#34;c1&#34;&gt;# build + sign vphone-cli, bundle the .app, cross-compile vphoned&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; .build/vphone-cli.app/Contents/MacOS/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vphone-cli --help
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;quick-start&#34;&gt;Quick Start
&lt;/h2&gt;&lt;p&gt;One command creates a VM end-to-end (download → patch → DFU restore → CFW install → first boot):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vphone-cli vm create myphone -V jb        &lt;span class=&#34;c1&#34;&gt;# -V / --variant&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vphone-cli vm launch myphone
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;commands&#34;&gt;Commands
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;vphone-cli vm create&lt;/code&gt; runs the whole pipeline; the individual steps below let you drive it manually or re-run one stage.&lt;/p&gt;
&lt;h3 id=&#34;manage&#34;&gt;Manage
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;9
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vphone-cli vm list                         &lt;span class=&#34;c1&#34;&gt;# list VMs (--json for scripting)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vphone-cli vm info myphone                  &lt;span class=&#34;c1&#34;&gt;# show one VM&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vphone-cli vm new myphone                   &lt;span class=&#34;c1&#34;&gt;# create an empty bundle (cpu/mem/disk options)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vphone-cli vm config myphone --cpu &lt;span class=&#34;m&#34;&gt;8&lt;/span&gt; --memory &lt;span class=&#34;m&#34;&gt;8192&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vphone-cli vm clone myphone myphone-2       &lt;span class=&#34;c1&#34;&gt;# fast APFS clone, fresh device identity&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vphone-cli vm &lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; myphone --out myphone.tzst   &lt;span class=&#34;c1&#34;&gt;# zstd fast by default (--max = xz -9); --out may be a dir (auto-names &amp;lt;vm&amp;gt;.tzst/.txz); skips restore dir + staging files&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vphone-cli vm import myphone.tzst --name restored
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vphone-cli vm rename myphone iphone16
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vphone-cli vm delete iphone16
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;build-a-vm-manually-what-vm-create-automates&#34;&gt;Build a VM manually (what &lt;code&gt;vm create&lt;/code&gt; automates)
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vphone-cli vm new myphone                              &lt;span class=&#34;c1&#34;&gt;# 1. empty bundle&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vphone-cli fw prepare myphone --iphone-version 26.1     &lt;span class=&#34;c1&#34;&gt;# 2. download + merge IPSWs&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vphone-cli fw patch myphone --variant jb                &lt;span class=&#34;c1&#34;&gt;# 3. patch the boot chain&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vphone-cli vm launch myphone --dfu &lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;                    &lt;span class=&#34;c1&#34;&gt;# 4. boot into DFU (background)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vphone-cli restore myphone --get-shsh                   &lt;span class=&#34;c1&#34;&gt;#    fetch SHSH&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vphone-cli restore myphone                              &lt;span class=&#34;c1&#34;&gt;#    DFU restore&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vphone-cli vm stop myphone                              &lt;span class=&#34;c1&#34;&gt;#    stop the DFU boot&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vphone-cli cfw install myphone --variant jb             &lt;span class=&#34;c1&#34;&gt;# 5. install CFW (host-mount; asks for sudo)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vphone-cli vm launch myphone                            &lt;span class=&#34;c1&#34;&gt;# 6. first boot&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Update to a newer iOS by pointing &lt;code&gt;fw prepare&lt;/code&gt; at an IPSW: &lt;code&gt;--iphone-source /path/to.ipsw --cloudos-source /path/to.ipsw&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&#34;firmware-variants&#34;&gt;Firmware Variants
&lt;/h2&gt;&lt;p&gt;Five patch variants with increasing security bypass — pass one to &lt;code&gt;--variant&lt;/code&gt;:&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Variant&lt;/th&gt;
					&lt;th&gt;Boot Chain&lt;/th&gt;
					&lt;th&gt;CFW&lt;/th&gt;
					&lt;th&gt;Notes&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;less&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;4 patches&lt;/td&gt;
					&lt;td&gt;2 phases&lt;/td&gt;
					&lt;td&gt;Patchless — keeps iOS mitigations enabled&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;regular&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;42 patches&lt;/td&gt;
					&lt;td&gt;10 phases&lt;/td&gt;
					&lt;td&gt;AMFI/SSV/Img4/TXM bypass&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;dev&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;53 patches&lt;/td&gt;
					&lt;td&gt;12 phases&lt;/td&gt;
					&lt;td&gt;+ TXM entitlement/debug bypass&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;jb&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;113 patches&lt;/td&gt;
					&lt;td&gt;14 phases&lt;/td&gt;
					&lt;td&gt;+ full jailbreak (Sileo, TrollStore auto-install on first boot)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;exp&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;141 patches&lt;/td&gt;
					&lt;td&gt;18 phases&lt;/td&gt;
					&lt;td&gt;JB superset + anti-VM-detection research patches&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;See &lt;a class=&#34;link&#34; href=&#34;./research/0_binary_patch_comparison.md&#34; &gt;&lt;code&gt;research/0_binary_patch_comparison.md&lt;/code&gt;&lt;/a&gt; for the per-component breakdown.&lt;/p&gt;
&lt;h2 id=&#34;running--connecting&#34;&gt;Running &amp;amp; Connecting
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;SSH (jailbreak):&lt;/strong&gt; &lt;code&gt;ssh -p 22222 mobile@&amp;lt;vm-ip&amp;gt;&lt;/code&gt; (password &lt;code&gt;alpine&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SSH (regular/dev):&lt;/strong&gt; &lt;code&gt;ssh -p 22222 root@&amp;lt;vm-ip&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;VNC:&lt;/strong&gt; &lt;code&gt;vnc://&amp;lt;vm-ip&amp;gt;:5901&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;locations&#34;&gt;Locations
&lt;/h2&gt;&lt;p&gt;Everything vphone-cli creates lives under &lt;code&gt;~/.vphone/&lt;/code&gt; — kept outside the repo and the &lt;code&gt;.app&lt;/code&gt; so the signed bundle stays portable. Redirect the whole tree with &lt;code&gt;$VPHONE_ROOT&lt;/code&gt;:&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Path&lt;/th&gt;
					&lt;th&gt;Contents&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;~/.vphone/&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;The per-user data root — override the entire location with &lt;code&gt;$VPHONE_ROOT&lt;/code&gt;.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;~/.vphone/VMs/&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;VM bundles — one directory per VM. This is the library; override with &lt;code&gt;$VPHONE_LIBRARY_ROOT&lt;/code&gt;.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;~/.vphone/ipsws/&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Downloaded iPhone + cloudOS IPSWs, cached and reused across VMs.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;~/.vphone/tools/&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Cached APFS seal-volume artifacts (&lt;code&gt;apfs_sealvolume_&amp;lt;version&amp;gt;&lt;/code&gt;) fetched during &lt;code&gt;fw prepare&lt;/code&gt;.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;~/.vphone/debs/&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Cached &lt;code&gt;.deb&lt;/code&gt; packages the &lt;code&gt;jb&lt;/code&gt;/&lt;code&gt;exp&lt;/code&gt; CFW install lays into the guest (Sileo, apt, …).&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;~/.vphone/venv/&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Auto-provisioned Python environment (see &lt;a class=&#34;link&#34; href=&#34;#python-runtime&#34; &gt;Python runtime&lt;/a&gt;; override with &lt;code&gt;$VPHONE_VENV_DIR&lt;/code&gt;).&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Precedence: the per-item overrides (&lt;code&gt;$VPHONE_LIBRARY_ROOT&lt;/code&gt;, &lt;code&gt;$VPHONE_VENV_DIR&lt;/code&gt;) win over &lt;code&gt;$VPHONE_ROOT&lt;/code&gt;, which wins over the &lt;code&gt;~/.vphone&lt;/code&gt; default. The &lt;code&gt;ipsws/&lt;/code&gt;, &lt;code&gt;tools/&lt;/code&gt;, and &lt;code&gt;debs/&lt;/code&gt; caches always sit directly under whichever root is active.&lt;/p&gt;
&lt;h2 id=&#34;sipamfi-relaxation&#34;&gt;SIP/AMFI Relaxation
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;Option A — fully disable SIP, then disable AMFI via boot-arg (most permissive).&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;In Recovery (long-press power → Terminal):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;csrutil disable
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;csrutil allow-research-guests &lt;span class=&#34;nb&#34;&gt;enable&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Then reboot into macOS and set the AMFI boot-arg (needs SIP fully off to take effect):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo nvram boot-args&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;amfi_get_out_of_my_way=1 -v&amp;#34;&lt;/span&gt;   &lt;span class=&#34;c1&#34;&gt;# reboot after&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Option B — keep SIP on (debug-only relaxed), then allowlist the binary with amfidont&lt;/strong&gt; (leaves AMFI enabled system-wide).&lt;/p&gt;
&lt;p&gt;In Recovery:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;csrutil &lt;span class=&#34;nb&#34;&gt;enable&lt;/span&gt; --without debug
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;csrutil allow-research-guests &lt;span class=&#34;nb&#34;&gt;enable&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Then reboot into macOS and:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vphone-amfidont         &lt;span class=&#34;c1&#34;&gt;# .build/vphone-cli.app/Contents/Resources/vphone-amfidont for local builds&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;tested-environments&#34;&gt;Tested Environments
&lt;/h2&gt;&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Host&lt;/th&gt;
					&lt;th&gt;iPhone&lt;/th&gt;
					&lt;th&gt;CloudOS&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;Mac16,11 27.0b2&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;17,3_18.6.2_22G100&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;26.1-23B85&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Mac16,8 26.5.1&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;17,3_26.0_23A341&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;26.1-23B85&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Mac16,8 26.5.1&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;17,3_26.0.1_23A355&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;26.1-23B85&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Mac16,12 26.3&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;17,3_26.1_23B85&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;26.1-23B85&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Mac16,12 26.3&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;17,3_26.3_23D127&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;26.1-23B85&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Mac16,12 26.3&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;17,3_26.3_23D127&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;26.3-23D128&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Mac16,12 26.3&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;17,3_26.3.1_23D8133&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;26.3-23D128&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Mac16,11 26.2&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;17,3_26.4_23E246&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;26.4-23E5207q&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Mac16,11 26.2&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;17,3_26.5_23F77&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;26.4-23E5207q&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Mac16,11 27.0b2&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;17,3_26.5.2_23F84&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;26.4-23E5207q&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Mac16,6 26.4.1&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;17,3_26.6_23G71&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;26.4-23E5207q&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Mac16,11 27.0b2&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;17,3_26.6.1_23G83&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;26.4-23E5207q&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Mac16,11 27.0b2&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;17,3_27.0_24A5380h&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;26.4-23E5207q&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Mac16,6 26.4.1&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;17,3_27.0_24A5390f&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;26.4-23E5207q&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Mac16,6 26.6.1&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;17,3_27.0_24A5408d&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;26.4-23E5207q&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Mac16,11 27.0b2&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;17,3_27.0_24A5418b&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;26.4-23E5207q&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Mac16,11 27.0b2&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;17,3_27.0_24A5424a&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;26.4-23E5207q&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;faq&#34;&gt;FAQ
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;&lt;code&gt;zsh: killed ./vphone-cli&lt;/code&gt;&lt;/strong&gt; — AMFI/debug restrictions aren&amp;rsquo;t bypassed; see &lt;a class=&#34;link&#34; href=&#34;#prerequisites&#34; &gt;Prerequisites&lt;/a&gt; (&lt;code&gt;amfi_get_out_of_my_way=1&lt;/code&gt; or &lt;code&gt;amfidont&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;Virtualization is not available on this hardware&lt;/code&gt;&lt;/strong&gt; — your Mac is itself a VM; PV=3 guest boot can&amp;rsquo;t nest. Use a non-nested macOS 15+ host.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Stuck on &amp;ldquo;Press home to continue&amp;rdquo;&lt;/strong&gt; — connect via VNC and right-click (two-finger click) to simulate the home button.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;System apps won&amp;rsquo;t install&lt;/strong&gt; — during iOS setup, don&amp;rsquo;t pick Japan or the EU as your region (extra regulatory checks the VM can&amp;rsquo;t satisfy); pick e.g. United States.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;App crashes on launch with &lt;code&gt;EXC_GUARD&lt;/code&gt; / &lt;code&gt;GUARD_TYPE_MACH_PORT&lt;/code&gt;&lt;/strong&gt; — re-patch with &lt;code&gt;vphone-cli fw patch &amp;lt;name&amp;gt; --variant &amp;lt;v&amp;gt; --force-exc-guard&lt;/code&gt;, then re-restore/install (&lt;a class=&#34;link&#34; href=&#34;https://github.com/Lakr233/vphone-cli/issues/291&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;#291&lt;/a&gt;). Always on for iOS 18 bases.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Install a &lt;code&gt;.ipa&lt;/code&gt;/&lt;code&gt;.tipa&lt;/code&gt;&lt;/strong&gt; — use the running VM&amp;rsquo;s Install menu (drag-drop or file picker).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;cfw install&lt;/code&gt; hangs re-signing a system binary (e.g. &lt;code&gt;Campo&lt;/code&gt;), memory climbing unbounded&lt;/strong&gt; — known bug in &lt;code&gt;ldid-procursus&lt;/code&gt; up to &lt;code&gt;2.1.5-procursus7&lt;/code&gt; (the current Homebrew &lt;code&gt;stable&lt;/code&gt;): &lt;code&gt;bytes(uint64_t)&lt;/code&gt; calls &lt;code&gt;__builtin_clzll(0)&lt;/code&gt; with no zero-guard, which is undefined behavior, and on this build resolves to a &lt;code&gt;0&lt;/code&gt;-length that underflows an unsigned loop counter — &lt;code&gt;ldid&lt;/code&gt; spins writing one byte at a time into a growing buffer instead of terminating. Triggered by &lt;em&gt;any&lt;/em&gt; entitlements plist containing an integer value of exactly &lt;code&gt;0&lt;/code&gt; (some real Apple system binaries have these). Fixed upstream but not yet in a tagged release; rebuild from source: &lt;code&gt;brew install --HEAD ldid-procursus &amp;amp;&amp;amp; brew link --overwrite ldid-procursus&lt;/code&gt;. Kill the hung &lt;code&gt;ldid&lt;/code&gt; process first (&lt;code&gt;sudo kill -9 &amp;lt;pid&amp;gt;&lt;/code&gt;) if you already hit it.&lt;/p&gt;
&lt;h2 id=&#34;automation&#34;&gt;Automation
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;vphone-cli&lt;/code&gt; exposes a host control socket (&lt;code&gt;&amp;lt;bundle&amp;gt;/vphone.sock&lt;/code&gt;) for programmatic control — screenshots, touch, swipes, hardware keys, clipboard — each action returning an inline screenshot for AI-driven E2E testing. See &lt;a class=&#34;link&#34; href=&#34;https://github.com/pluginslab/vphone-mcp&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;vphone-mcp&lt;/a&gt; for an MCP server wrapping it.&lt;/p&gt;
&lt;h2 id=&#34;acknowledgements&#34;&gt;Acknowledgements
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/wh1te4ever/super-tart-vphone-writeup&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;wh1te4ever/super-tart-vphone-writeup&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        
    </channel>
</rss>
