【免费下载链接】VirtualMacOniPad
People have dreamed of running macOS on iPad for more than a decade. Today, that dream comes true. With Virtual Mac, iPad finally breaks free from iPadOS, enabling pro apps like Xcode, Terminal, Final Cut Pro, Logic Pro, and Pixelmator Pro to run directly on device. Requires iPad Pro (M1, M2) or iPad Air (M1) running iPadOS 14 up to 16.3.1.
Virtual Mac(VirtualMacOniPad)让越狱后的 iPad 直接运行 macOS,其测试与性能基准套件(位于VirtualMac/scripts/tests/)负责持续验证虚拟机在 iPad 上的视频加速、网络连通、音频双向传输、输入键鼠与时钟同步是否可靠。本文带你快速看懂这 11 个测试脚本各自验证什么、如何一键运行,以及新手排查问题时该看哪些指标。
为什么 iPad 上的 macOS 需要专门测试?
Virtual Mac 并非普通虚拟机:它把 Apple 自家的 Hypervisor、Virtualization、ParavirtualizedGraphics 等框架从 macOS 中提取、改写后移植到 iPadOS 上运行。正因为这套"跨系统虚拟化栈"足够特殊,项目才配备了一整套回归测试,从视频转码到麦克风回声逐层验证,任何一次框架改动都可能被捕获。
脚本目录的官方说明见 scripts/README.md:
tests/contains test and benchmark harnesses.
所有脚本共享同一个基础设施 lib/common.sh:它通过iproxy在 Mac 与 iPad 之间建立 USB SSH 隧道(默认本地端口 2221),再经隧道转发到虚拟机内部(默认端口 2208),从而实现对"宿主 iPad → 虚拟机 macOS → 参考 Mac"三层环境的自动化探测。
测试套件总览:11 个脚本一张表
| 测试脚本 | 验证内容 | 运行环境 |
|---|---|---|
| benchmark-ipad-guest-video.sh | 视频转码基准(HEVC) | 虚拟机内 |
| check-ipad-guest-network.sh | 虚拟机出站网络 | 虚拟机内 |
| test-ipad-network-memory-pressure.sh | NAT 进程抗内存压力 | iPad 宿主 |
| test-ipad-guest-audio.sh | 音频双向传输 | iPad + 虚拟机 |
| test-ipad-input.sh | 键鼠输入自检 | iPad 宿主 |
| check-ipad-guest-clock.sh | 时钟同步精度 | 虚拟机内 |
| check-ipad-vm-health.sh | 虚拟机整体健康 | iPad 宿主 |
| test-ipad-vm-reservations.sh | 内存预留接口 | iPad 宿主 |
| verify-ipad-videotoolbox-runtime.sh | 运行时框架加载 | iPad 宿主 |
| test-extracted-vm-real-mac.sh | 提取框架真机对照 | 参考 Mac |
| test-shared-folders-real-mac.sh | 共享文件夹挂载 | 参考 Mac |
🎥 视频基准:1080p HEVC 转码压力测试
benchmark-ipad-guest-video.sh 是套件里最"硬核"的性能基准:
- 用 ffmpeg 生成一段15 秒、1920x1080@30fps 的 H.264 测试视频;
- 通过 SCP 送入 macOS 虚拟机;
- 在虚拟机内调用系统
avconvert以最高质量 HEVC预设转码(走 VideoToolbox 半虚拟化驱动); - 转码前后各用
kmutil showloaded确认AppleVideoToolboxParavirtualization驱动始终处于加载状态,防止高强度编码导致驱动崩溃卸载。
配套脚本 verify-ipad-videotoolbox-runtime.sh 则短暂挂载 LLDB 到正在运行的VirtualMachine进程,确认它加载的是随包分发的 Ventura 版 VideoToolbox 框架(/VirtualMac/payload/Frameworks/VideoToolbox.framework),而非 iPad 上的残留拷贝——检查完立即分离,虚拟机几乎无感恢复。
🌐 网络测试:从连通性到抗内存压力
网络验证分两层:
- 连通性:check-ipad-guest-network.sh 在虚拟机内确认
en0拿到 IPv4、默认路由存在,然后依次curl四个站点并打印 HTTP 状态码与解析到的 IP。 - 稳定性:test-ipad-network-memory-pressure.sh 针对"高内存占用虚拟机 + NAT 共享"场景,默认监控 60 秒(
VZ_NETWORK_PRESSURE_TEST_SECONDS可调):- 断言
InternetSharing与bootpd两个 NAT 守护进程全程保持同一 PID,不被系统重启; - 校验网络内存策略日志中
NetworkMemoryPolicy报告了 128 MiB 上限与对应优先级(iPadOS 14/15 为 14,16 为 140); - 记录监控期间的最小空闲内存页数,用于判断是否逼近内存悬崖。
- 断言
🎧 音频验证:扬声器与麦克风双向打通
test-ipad-guest-audio.sh 验证 virtio-sound 双向链路,设计相当精巧:
- 输出方向:虚拟机内
beep 5发声,信号经半虚拟化音频设备送往 iPad 扬声器; - 输入方向:在 iPad 端运行用
ldid按 VirtualMac.entitlements 签名并加入信任缓存的audio-tone-probe,播放确定频率的测试音调,驱动 iPad 物理麦克风; - 虚拟机内则自动编译运行 audio_capture_app.m 抓取输入流,脚本要求峰值大于零(拒绝"全是静音"的假通过);
- 最妙的一步:虚拟机首次调用麦克风会弹出 TCC 授权框,脚本用 window_list_probe.m 读取弹窗实际坐标,再通过 Virtual Mac 的一次性输入命令桥自动点击"允许",让测试在 USB SSH 下完全可重复执行。
⌨️ 输入自检:一键验证键鼠通路
test-ipad-input.sh 是三个脚本里最短的,但它驱动的是完整的输入管线自检:
- 以
VZ_IPAD_INPUT_SELF_TEST=1启动 Virtual Mac(见 launch-ipad-app.sh); - 在
/tmp/VirtualMac.log中确认出现input self-test、input pointer、input key三类自检记录; - 在
vzxpchook.log/vmmhook.log中确认process_keyboard_led_update键盘灯回调真实触发。
这意味着触摸板点按、双指滚动、虚拟键盘等交互路径都在无人值守下被完整覆盖。
🩺 健康检查与时钟漂移:两台"表"的赛跑
check-ipad-vm-health.sh 是一次"全身体检":确认宿主 App 与com.apple.Virtualization.VirtualMachine进程均在运行、日志中health state=1,并逐条断言半虚拟化图形跟踪日志(/tmp/pvg-trace.log)中零错误——没有TASK_LOOKUP_MISS、没有失败的内存预留与显存映射、没有 Metal 命令缓冲错误。
check-ipad-guest-clock.sh 则是一场"赛跑":先关闭虚拟机内的网络时间(NTP),测量宿主与虚拟机的 5 秒时间差——要求虚拟机 RTC 走了 4~8 秒(即实时速度),且初始偏差不超过 5 秒,测试结束自动恢复 NTP 设置。这对保证虚拟机内证书、日志时间戳正确至关重要。
🧪 真机 Mac 对照测试:用"标准答案"校准 iPad
由于虚拟机在参考 Mac 上跑同一套框架是已知正确行为,两个 real-Mac 测试充当"标准答案":
- test-extracted-vm-real-mac.sh:把项目提取出的 Hypervisor / ParavirtualizedGraphics / Virtualization 框架传到参考 Mac,用 Apple 官方示例 App 启动虚拟机后,用 LLDB
image list逐一核对——每个框架必须来自提取副本,严禁系统自带拷贝被加载,否则视为回归。 - test-shared-folders-real-mac.sh:启动带 VirtioFS 自动挂载的 Ventura 虚拟机,在宿主共享目录写入哨兵文件
ventura-virtiofs-oracle,SSH 进虚拟机确认其出现在/Volumes/My Shared Files且内容一致,证明共享文件夹全链路可用。
🚀 如何运行这些测试:完整步骤
- 准备一台越狱 iPad(iPad Pro M1/M2、iPad Air M1,iPadOS 14~16.3.1),安装 Virtual Mac 并创建虚拟机;
- Mac 连接 iPad USB 线,确认
iproxy、sshpass、ldid、xcrun可用(setup.sh会通过 Brewfile 自动装好); - 配置环境变量(脚本会读取仓库根目录的
.env):VZ_IPAD_PASSWORD—— iPad SSH 密码;VZ_GUEST_HOST/VZ_GUEST_USER/VZ_GUEST_PASSWORD—— 虚拟机 SSH 信息(common.sh 中 iPad 默认端口 2221、虚拟机转发端口 2208);- real-Mac 测试另需
VZ_REAL_MAC_HOST/VZ_REAL_MAC_USER/VZ_REAL_MAC_PASSWORD与VZ_REAL_MAC_VM;
- 按需运行,例如:
./VirtualMac/scripts/tests/check-ipad-vm-health.sh # 先做健康检查 ./VirtualMac/scripts/tests/test-ipad-input.sh # 再验证输入 ./VirtualMac/scripts/tests/benchmark-ipad-guest-video.sh # 最后跑视频基准所有脚本失败即退出(set -euo pipefail),输出干净、可接入 CI;结果目录统一落在build/validation/下,便于存档对比。
❓ 新手常见疑问
Q:没有参考 Mac 能跑吗?能。除两个*-real-mac.sh外,其余 9 个测试只需要 iPad + 一台 Mac。
Q:测试会破坏我的虚拟机吗?不会。时钟测试结束后自动恢复 NTP 设置;音频测试只播放短促提示音;网络压力测试明确"不改变虚拟机配置、不制造内存压力",仅做观察。
Q:视频基准卡住了先查什么?先跑 check-ipad-vm-health.sh 与 verify-ipad-videotoolbox-runtime.sh,确认驱动加载正常、框架来源正确,再排查转码本身。
Q:排查日常问题需要跑全套吗?不需要。建议顺序:健康检查 → 输入自检 → 网络 → 时钟 → 音频 → 视频基准,逐级缩小范围;仍无法定位时,可用应用内设置页"导出诊断"附上反馈。
写在最后
这套"视频 + 网络 + 音频 + 输入 + 时钟 + 健康"的组合拳,让 Virtual Mac 从"能开机"走向"可量化、可回归"。对新手而言,读懂这 11 个脚本的输出,基本也就读懂了 iPad 虚拟化栈的每一个关键通道。想深入探测程序源码,可以从 vz/development/probes/ 目录开始。
【免费下载链接】VirtualMacOniPad
People have dreamed of running macOS on iPad for more than a decade. Today, that dream comes true. With Virtual Mac, iPad finally breaks free from iPadOS, enabling pro apps like Xcode, Terminal, Final Cut Pro, Logic Pro, and Pixelmator Pro to run directly on device. Requires iPad Pro (M1, M2) or iPad Air (M1) running iPadOS 14 up to 16.3.1.
相关推荐
3步构建跨平台音乐聚合的完整解决方案:洛雪音乐音源配置终极指南
3步构建跨平台音乐聚合的完整解决方案:洛雪音乐音源配置终极指南 你是否厌倦了在不同音乐平台间反复切换只为寻找一首歌?是否因为版权分散而无法建立统一的音乐库?lx
音视频Orchard Core 性能基准测试指南:BenchmarkDotNet 套件与持续性能验证
Orchard Core 性能基准测试指南:BenchmarkDotNet 套件与持续性能验证 Orchard Core 是构建于 ASP.NET Core 之
CMS后端Web框架MicroPython 测试套件深度指南:单元测试、性能基准与 CPython 差异验证
MicroPython 测试套件深度指南:单元测试、性能基准与 CPython 差异验证 本指南以 MicroPython 仓库中的 tests/README.
嵌入式语言运行时编程语言解释器编译器物联网系统编程
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考