vphone-cli构建失败排查指南:zsh: killed 与 Virtualization 不可用的两大根因
2026/9/2 9:08:52 网站建设 项目流程

vphone-cli构建失败排查指南:zsh: killed 与 Virtualization 不可用的两大根因

【免费下载链接】vphone-cli项目地址: https://gitcode.com/GitHub_Trending/vp/vphone-cli

vphone-cli 是一个基于 Apple Virtualization.framework 的虚拟 iPhone 启动工具,可在 Apple Silicon Mac 上引导完整的 iOS 虚拟机。新手构建或运行它时,最常卡在两个报错:zsh: killedVirtualization is not available on this hardware。本文用最短路径讲清这两个错误的根因与修复步骤,让你一次跑通构建流程。

两大报错速查表 🧭

报错信息根因修复方向
zsh: killed ./vphone-cli宿主机 SIP/AMFI 限制未绕过,签名二进制的私有虚拟化授权被系统杀掉设置 boot-arg 或启用 amfidont 白名单
Virtualization is not available on this hardware你的 Mac 本身就是一台虚拟机(嵌套虚拟)换到物理 Mac 上使用

两者都发生在宿主机环境层面,与代码、网络、依赖无关——所以先别怀疑自己的构建命令。

根因一:zsh: killed是 AMFI 在拦截 ⚠️

为什么进程会被直接 killed

vphone-cli 的签名文件携带了一组私有授权,例如 sources/vphone.entitlements 中的com.apple.private.virtualizationcom.apple.private.virtualization.security-research。普通 macOS 的 AMFI(Mobile File Integrity 安全机制)默认拒绝未签名/私有授权二进制运行,进程会被内核直接以SIGKILL杀掉,zsh 就打印出zsh: killed

换句话说:编译成功了、签名也成功了,是系统策略不允许它启动。项目自带的预检脚本 scripts/boot_host_preflight.sh 也明确提示:若签名二进制退出码为 137(signal 9),即代表宿主机尚未放行这些授权。

方案 A:boot-arg 放行(最宽松)

在恢复模式(长按电源键 → 终端)执行:

csrutil disable csrutil allow-research-guests enable

重启进入 macOS 后设置 AMFI 启动参数,再重启一次:

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

方案 B:amfidont 白名单(保留 SIP)

如果不想完全关闭 SIP,可只放宽 debug 权限,再用 amfidont 把项目二进制加入白名单:

csrutil enable --without debug # 恢复模式下 csrutil allow-research-guests enable

然后直接运行项目封装好的脚本,它会自动以 daemon 模式启动 amfidont 并覆盖项目路径:

make amfidont_allow_vphone

对应源码为 scripts/start_amfidont_for_vphone.sh,原理很简单:amfidont daemon --path 项目根目录 --spoof-apple,让签名后的 vphone-cli 被"放行"执行。

根因二:Virtualization 不可用 = 你在嵌套虚拟机里 🚫

报错含义

当你看到Virtualization is not available on this hardware根因只有一个:你当前的 Mac 本身就运行在虚拟机里。vphone-cli 依赖 PV=3 级别的研究型虚拟机启动能力,而这种能力无法在虚拟机内再嵌套一层。

项目通过两个信号判断这一点(见 scripts/boot_host_preflight.sh 的预检逻辑):

  1. sysctl -n kern.hv_vmm_present返回1(该 sysctl 由 Virtualization.framework 在访客设备树中植入,物理机上为 0);
  2. 机型名称是Apple Virtual Machine 1(典型嵌套 VM 标识)。

只要命中其一,就会直接判定"Virtualization.framework guest boot is unavailable"。

解决办法:换一台物理 Mac

✅ 满足以下条件的宿主机即可:

  • Apple Silicon 芯片
  • macOS 15(Sequoia)及以上
  • 物理机,不是任何虚拟化环境(包括云桌面、UVM 等嵌套场景)

⚠️ 注意:这不是配置问题,在嵌套 VM 里调整任何参数都无法解决,唯一解法就是换宿主机。

一键自检:用 preflight 脚本定位问题 🔍

修复前建议先跑一次自检,它会完整输出宿主机型号、hv_vmm_present值、SIP 状态、boot-args、签名授权与策略评估:

make boot_host_preflight

输出中重点看两行:

  • kern.hv_vmm_present: 1→ 嵌套 VM,命中根因二;
  • 签名二进制exit=137→ AMFI 拦截,命中根因一。

修复后的完整构建流程 ✅

物理 Mac上按以下步骤走一遍即可:

git clone --recurse-submodules https://gitcode.com/GitHub_Trending/vp/vphone-cli cd vphone-cli ./scripts/setup_tools.sh # 安装依赖、构建工具链子模块、创建 Python venv ./scripts/build.sh # 构建并签名 vphone-cli、打包 .app、交叉编译 vphoned

验证是否成功:

cd .build/vphone-cli.app/Contents/MacOS/ ./vphone-cli --help # 不再出现 zsh: killed,即为通过

如果一切顺利,你就可以创建第一台虚拟机了:

vphone-cli vm create myphone -V jb # 端到端:下载→打补丁→DFU 恢复→CFW 安装→首次启动 vphone-cli vm launch myphone

小结

症状一句话根因一句话修复
zsh: killedAMFI 拒绝私有虚拟化授权amfi_get_out_of_my_way=1make amfidont_allow_vphone
Virtualization is not available宿主机是嵌套虚拟机换物理 Apple Silicon Mac(macOS 15+)

两个报错都与你的代码无关,属于宿主机环境门槛。按本文顺序检查 SIP/AMFI 状态与宿主机类型,基本可以一次定位问题所在。

【免费下载链接】vphone-cli项目地址: https://gitcode.com/GitHub_Trending/vp/vphone-cli

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询