多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

Virtual Mac 是怎么做到的?拆解 macOS 虚拟机在 iPad 上的运行原理

Virtual Mac 是怎么做到的?拆解 macOS 虚拟机在 iPad 上的运行原理 【免费下载链接】VirtualMacOniPadPeople 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.项目地址https://gitcode.com/gh_mirrors/vi/VirtualMacOniPad点击查看免费下载Virtual Mac 是一个开源的 macOS 虚拟机项目它让 iPad 终于跑起了完整的 macOS——Xcode、Terminal、Final Cut Pro 这些专业应用都能直接在设备上运行。它要求 iPad ProM1/M2或 iPad AirM1系统为 iPadOS 14 ~ 16.3.1需越狱。那么问题来了iPadOS 和 macOS 是两套不同的系统macOS 虚拟机是怎么在 iPad 上跑起来的这篇文章带你拆解它的 4 个核心原理。一、先决条件为什么偏偏是 M 系列 iPad一切的基础是同一颗 CPU。iPad Pro M1/M2 与 Mac 使用相同的 Apple Silicon 芯片相同的 arm64e 指令集与硬件虚拟化能力Hypervisor.framework 依赖的 EL2 虚拟地址空间相同的 GPU 架构支持同样的 Metal 图形 API。也就是说iPad 本身就是一台藏起来的 Mac。Virtual Mac 要做的就是把 macOS 的虚拟化堆栈搬到 iPadOS 上。这也是为什么iPadOS 16.4 之后不再支持——苹果在 XNU 内核中移除了 iPad 的 Hypervisor 支持。二、原理一从 dyld 共享缓存中提取虚拟化框架macOS 的虚拟能力来自四个框架Hypervisor、Virtualization、ParavirtualizedGraphicsPVG及配套设施。难点在于macOS 从 Big Sur 起把这些库合并进了dyld 共享缓存dyld shared cache——这是一种单向的编译优化提取出来的 arm64e 库无法直接加载。项目用uncache.py解决了这个问题它的处理流水线堪称教科书级遍历缓存的 slide 信息区分图内重定位rebase和跨图绑定bind并用符号表把绑定的符号解析到来源镜像重新排布 Mach-O 段生成新的链式指针修复表chained fixups同时保留指针认证ptrauth元数据重建 GOT / 认证 GOT 槽位修复跨段 PC 相对引用修复 Objective-C 的 selector、协议与方法表。三、原理二把 macOS 库改头换面成 iOS 库提取出来的库还写着我是 macOS 的iPadOS 的 dyld 不会加载它。于是stamp_ios.py登场改写LC_BUILD_VERSION把平台字段从 macOS 改成 iOS并指定最低系统版本ad-hoc 签名注意它刻意不用ldid -S因为那会重建 LINKEDIT 段、丢掉刚生成的 chained-fixups 指令。此外macOS 框架会调用一批 iPadOS 上不存在的 API项目用一层层**垫片shim**来补洞垫片作用NSViewShim.m补上 AppKit 的 NSView 等 UI 类型metalshim.m补 macOS 特有的 Metal 多 GPU 枚举 APIvmmhook.m钩住 VMM 服务补齐缺失的系统行为vzxpchook.m在用户态重连 XPC让宿主机能调用 VMM 服务其中最有意思的是 XPCiOS 的 launchd 根本不会注册框架里的 XPC 服务。vzxpchook.m的办法是——宿主进程自己posix_spawn挂起 VMM 进程再通过task_for_pid把一个匿名 XPC endpoint 的 Mach 端口注入子进程两边碰头后建立起com.apple.Virtualization.VirtualMachine这条通信管道。等于在没有 launchd 配合的情况下手工模拟了一套服务注册。四、原理三给虚拟机的安装 U 盘造一条虚拟 USB 总线macOS 镜像是怎么装进虚拟机的在 Mac 上安装程序会通过AppleUSBUserHCI内核服务连接到虚拟机的 DFU 恢复设备——而iPadOS 没有这个内核服务。installation_usb_shim.m的解法非常巧妙它在用户态伪造出一条 USB 控制器的完整 IOKit 注册表路径用0x766d2000这样的伪服务号拦截 MobileDevice/IOKit 对虚拟设备的查询把虚拟 USB 端点的流量转发到 iPadOS 原生的 MobileDevice 和 usbmuxd 组件。对安装程序来说体验和在 Mac 上完全一样DFU 设备出现、进入 RestoreOS、镜像写入完成。整条刷机链路就这样在 iPad 上被复刻了出来。五、图形加速与输入让虚拟机可用图形加速是 Virtual Mac 性能媲美 VirtualBuddy 的关键。虚拟机的 GPU 走的是半虚拟化图形PVG客户机的绘制命令通过 PVG 协议传到宿主由宿主的 Metal 执行。shaders/pvg_display.metal就是从 macOS 原版default.metallib的反射元数据反推重建的 shader 库逐条保持了资源索引与数学运算一致确保提取出的 PVG 框架能在 iOS 目标上正常建管线。输入则由越狱 tweakVZKeyboardPassthrough.m负责拦截宿主键盘事件并转译为虚拟机的 HID 键码还支持 Globe 键组合如 GlobeV转发给 macOS 客户机甚至处理了松开顺序不对导致按键卡死这种细节。没有物理键盘也没关系——应用内自带触控点击、双指滚动和浮动虚拟键盘。六、性能与使用建议由于走的是硬件 CPU 虚拟化 图形加速Virtual Mac 的性能与在 M1/M2 Mac 上跑 VirtualBuddy、UTM 处于同一级别日常开发体验非常流畅完整支持 macOS 12 Monterey ~ macOS 26 Tahoe推荐安装 Ventura ~ Sequoia1 TB/2 TB 机型有 16 GB 内存体验最佳因不支持 iCloud 登录安装时请选以后设置虚拟机配置CPU、内存、磁盘可在应用内按需调整。总结四个补丁拼出一台 Mac回顾 Virtual Mac 的运行原理本质是四块拼图uncache.py—— 把 dyld 共享缓存里的 macOS 虚拟化框架提取成可加载库stamp_ios.py 各垫片—— 改平台标记、补缺失 API骗过 dyldvmmhook.m/vzxpchook.m—— 手工搭起宿主与 VMM 虚拟机服务之间的 XPC 管道installation_usb_shim.m—— 用户态伪造 USB 恢复总线让 macOS 能刷进虚拟机。再加上 PVG 半虚拟化图形与 HID 键盘透传一台iPad 上的 Mac就完整成立了。这个项目的完整构建入口是setup.sh下载 macOS/iPadOS 恢复镜像 → 提取 → 修补 → 打包 deb感兴趣的读者可以从 scripts/README.md 开始深入了解每个构建阶段。赞分享【免费下载链接】VirtualMacOniPadPeople 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.项目地址https://gitcode.com/gh_mirrors/vi/VirtualMacOniPad点击查看免费下载相关推荐为什么 Virtual Mac 让 iPad 秒变 Mac运行 macOS 虚拟机的完整指南为什么 Virtual Mac 让 iPad 秒变 Mac运行 macOS 虚拟机的完整指南 Virtual Mac on iPad 是一款开源工具它让 i7 天 2.7k 星的增长拆解AirCard 做对了什么又是怎么起量的7 天 2.7k 星的增长拆解AirCard 做对了什么又是怎么起量的 一款只能在 macOS 上运行、用 USB 线连着 iPhone 才能用的桌面工具探索 Lima在 macOS 上轻松运行 Linux 虚拟机探索 Lima在 macOS 上轻松运行 Linux 虚拟机 在开发和测试环境中Linux 虚拟机的需求日益增长。对于 macOS 用户来说Lima 提供虚拟化开发工具创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表