vphone-cli应用安装全流程解析:IPA提取、ldid签名与vsock通道,3步把应用装进虚拟iPhone
【免费下载链接】vphone-cli项目地址: https://gitcode.com/GitHub_Trending/vp/vphone-cli
vphone-cli是基于 Apple Virtualization.framework 启动虚拟 iPhone 的开源命令行工具,内置完整的IPA/TIPA 应用安装流水线:自动完成IPA 解压提取 → ldid 重签名 → vsock 通道传输 → LaunchServices 注册,让你无需 Xcode 即可把应用装进虚拟设备。
📦 一条命令完成安装
最简用法:在启动虚拟机时通过--install-ipa参数挂起你的 IPA 包,控制通道建立后自动完成安装:
vphone-cli vm launch myphone --install-ipa ./myapp.ipa已连接状态下,也可以打开 GUI 的Apps → Install IPA/TIPA...菜单选择安装包。两种方式最终都汇入同一套协议流程(见 VPhoneMenuApps.swift)。
🔄 宿主端:IPA 提取与上传
安装入口在 VPhoneControl.swift,核心流程为:
- 读取 IPA 包——支持
.ipa与.tipa两种格式(见 VPhoneInstallPackage.swift) - 创建临时目录——在 guest 的
/var/mobile/Documents/vphone-installs建好落盘位置 - vsock 上传——通过 vsock 端口1337,以长度前缀 JSON 协议把整个包推送到 guest
- 附带签名证书——如果本地资源中存在
signcert.p12(signcert.p12),会一并上传供 guest 重签名使用
🔏 Guest 端:ldid 重签名
guest 内的vphoned守护进程收到ipa_install请求后开始工作,核心实现位于 vphoned_install.m:
- 定位 ldid:依次查找
/var/jb/usr/bin/ldid、/iosbinpack64/usr/bin/ldid等路径 - 注入 entitlements:自动读取原包二进制中的 entitlements,补齐
container-required等字段,并写入jb.pmap_cs_custom_trust = PMAP_CS_APP_STORE,让越狱内核信任该应用的代码签名 - 递归签名:先签 Bundle 主可执行文件,再对整个
.app递归签名 - 注册应用:调用
LSApplicationWorkspace完成 LaunchServices 注册,并配置应用沙盒容器(含 App Groups / System Groups)
完成后宿主端会弹出结果提示,临时文件(IPA 与证书)自动清理。
🌐 vsock 控制通道详解
整套交互依赖一条vsock 通道(虚拟机与宿主机间无需网卡的专用链路):
| 项目 | 说明 |
|---|---|
| 端口 | 1337 |
| 协议 | 长度前缀 JSON 请求/响应 |
| Guest 端 | vphoned守护进程(vphoned.m) |
| 宿主端 | VPhoneControl.swift |
vphoned 由 CFW 安装阶段随 cfw_install.sh 交叉编译并写入 guest 的/usr/bin/vphoned,通过 vphoned.plist 以 LaunchDaemon 常驻。这也是它能注入 HID、读取 Keychain、安装应用等全部高级能力的底层通道。
✅ 常见问题速查
- 提示 "Guest vphoned does not support ipa_install yet":说明 guest 内还是旧版守护进程,重启虚拟机让新 daemon 接管即可
--install-ipa与--dfu冲突:DFU 模式不建立控制通道,请改用vm launch- 支持格式:仅
.ipa/.tipa,其余扩展名会被校验拒绝
📚 更多协议细节可参考 vphoned_protocol.h 与 VPhoneControl.swift 中的注释说明。
【免费下载链接】vphone-cli项目地址: https://gitcode.com/GitHub_Trending/vp/vphone-cli
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考