📌 项目地址:Lakr233/vphone-cli | ⭐ 9,495 颗星 | 🔧 Swift | 📜 未标注
📌 项目地址:Lakr233/vphone-cli | ⭐ 9,495 颗星 | 🔧 Swift
这个项目解决什么问题
想在电脑上跑 iOS,过去的选项基本只有 Xcode 模拟器——但模拟器不是 iOS,它跑的是 x86/ARM 的 macOS 进程,很多底层行为对不上。
vphone-cli 走了另一条路:用 Apple 自家的 Virtualization.framework,加上 PCC(Private Cloud Compute)研究 VM 的基础设施,在 Apple Silicon Mac 上虚拟出一台运行真实 iOS 固件的 iPhone。流程和给实体机刷机一模一样:下载官方 IPSW、修补引导链、DFU 恢复、安装 CFW、首次启动。宿主机换成了虚拟机,其他都是真的。
这条流水线能成立的前提很苛刻,也解释了为什么这类项目这么少——后面细说。
最快上手
brew install zqxwce/tap/vphone-cli
vphone-cli vm create myphone -V jb # -V / --variant
vphone-cli vm launch myphone
两条命令,从下载固件到首次启动全部自动完成。vm create 会按顺序执行:下载并合并 IPSW → 修补引导链 → DFU 恢复 → 安装 CFW → 首次启动。
想手动控制每一步?
vm create 跑的是一条固定流水线。如果你想拆开来看、或者只重跑某个阶段,README 给出了完整的手动流程:
vphone-cli vm new myphone # 1. 创建空 VM 包
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. 首次启动
注意第 4 步里获取 SHSH 和 DFU 恢复是分开的两个动作——和实体机的降级/保存票据逻辑对应。手动模式还有一个实际用途:升级到新版 iOS 时,给 fw prepare 指定本地 IPSW 即可:
--iphone-source /path/to.ipsw --cloudos-source /path/to.ipsw
管理命令:为批量场景设计
vphone-cli vm list # 列出 VM(--json 供脚本使用)
vphone-cli vm info myphone # 查看单个 VM
vphone-cli vm config myphone --cpu 8 --memory 8192
vphone-cli vm clone myphone myphone-2 # APFS 快速克隆,生成新设备身份
vphone-cli vm export myphone --out myphone.tzst # 默认 zstd 快速压缩
vphone-cli vm import myphone.tzst --name restored
vphone-cli vm rename myphone iphone16
vphone-cli vm delete iphone16
有两个设计细节值得说。
clone 走 APFS 克隆,速度很快,而且每个克隆会生成全新的设备身份。也就是说你可以几分钟内复制出一批”互不相同”的 iPhone——做自动化测试、批量验证时这比折腾实体机方便太多。
export 的默认格式是 zstd(快速),加 --max 切换到 xz -9(极限压缩)。--out 可以是目录,会自动命名 .tzst/.txz。导出时会自动跳过恢复目录和临时文件,拿到的是干净的镜像包。
门槛:为什么这不是人人能玩
用之前先对照这几条,一条不满足就跑不起来:
- 必须 Apple Silicon + macOS 15(Sequoia)以上。Intel Mac 不行,Virtualization.framework 的硬限制。
- 需要 Xcode 和 iOS SDK,因为要交叉编译 guest daemon(vphoned)。
- 需要放宽 SIP/AMFI,允许带 PV=3 私有 entitlement 的未签名二进制运行。这一步是主动降低系统安全配置,介意的话到此为止。
- 依赖不少:
python@3.13 aria2 wget gnu-tar openssl@3 ldid-procursus sshpass keystone cmake libusb ipsw zstd。
从源码构建的流程:
git clone --recurse-submodules https://github.com/Lakr233/vphone-cli.git
./scripts/setup_tools.sh # 安装依赖、构建工具链子模块、创建 Python venv
./scripts/build.sh # 构建并签名 vphone-cli,打包 .app,交叉编译 vphoned
cd .build/vphone-cli.app/Contents/MacOS/
vphone-cli --help
我的看法
iOS 逆向和安全研究一直有个痛点:测试要么用模拟器(行为不真),要么占着几台实体机反复刷机(又慢又伤设备)。vphone-cli 把”刷机”这件事变成了 APFS 克隆加两条命令,单从工程完成度看——完整的 CLI 管理、clone/export/import、--json 脚本接口——这不像一个研究性玩具,是奔着可日常使用的工具做的。
代价也明确:SIP/AMFI 放宽意味着你要在一台专用机器(或者至少专用分区)上跑它。适合有 iOS 安全研究、越狱工具开发、批量自动化测试需求的人;普通开发者用 Xcode 模拟器就够了。
9,495 星说明需求真实存在。如果你符合上面的硬件和环境条件,值得一试。