UnrealEngine黑苹果打包
目前IOS程序编译工具链仍然只有MacOS版,UE编译IOS程序必须依赖MacOS, 手头没有白苹果情况下,只能选择黑苹果编译IOS代码。 传统的黑苹果大多使用OpenCore(或Clover)来伪装PC机器的信息,实现引导和安装MacOS, 这种方式的关键步骤在于伪装PC机器的信息,也就是制作机器专用的EFI引导文件。 由于PC机器配置五花八门,实际操作起来非常麻烦,需要针对不同CPU、主板各自配置, 而且相当一部分AMD CPU不能安装。自苹果改用M1芯片之后,新Intel CPU(以及配套主板) 在安装黑苹果时问题也比较多,比如大小和调度等问题,所以考虑在虚拟化的方式。
虚拟机是标准化的设备环境,在处理引导配置时不用在各自折腾,开箱即用。 目前VMWare和VirtualBox都能安装黑苹果,不过限制很多,目前只能虚拟化CPU, 其他的GPU等设备无法虚拟化,需要寻找虚拟化更全面的方案,即qemu。 qemu抹平了CPU的差异,通过iommu让客户端系统直接访问外部硬件设备。 github已有相关实现方案,OSX-KVM和Docker-KVM。OSX-KVM使用简单, PC机器安装好linux系统,根据安装文档即可安装MacOS,安装上符合黑苹果要求的AMD显卡, 即可通过iommu直通让MacOS直接使用显卡,其他设备类似,走PCI直通给MacOS, Docker-KVM机制类似,区别在于前者是 PC设备->Linux->qemu-MacOS, 而后者是Windows+WSL->qemu-MacOS, 要多运行一个Windows系统,对系统资源有较多消耗, 故优先考虑OSX-KVM。
OSX-KVM的硬件配置没有传统黑苹果要求那么多,尤其是CPU、网卡等, 但也有一些注意点。显卡跟黑苹果要求一样,依赖MacOS内的驱动,如果只是纯粹作为打包机器, 不使用MacOS桌面环境,不要显卡问题也不大, 甚至可以更进一步使用PVE(基于Debian的Linux),进一步减少主机系统对资源占用; 如果在打包之外还需要进行调试IOS等其他操作,安装一个AMD显卡是必要的。 另外,目前Iphone无法通过USB重定向给MacOS(Docker-OSX可以), 所以如果要调试IOS,需要一个PCIE-USB转接卡。关于磁盘问题,通常情况下MacOS不会像PC刻意分区,整个系统和数据都在一个磁盘上,但是黑苹果的稳定性无法和白苹果相比,故要拆分磁盘,降低异常情况发生时恢复难度,系统磁盘,够用就行(MacOS+XCode以及其他常用软件,500GB即可),项目文件(包括UE)单独放在一个磁盘;如果有mvme磁盘,可以直通给MacOS,如果是SATA,则需要使用虚拟盘,使用RAW模式能以接近原生模式运行,如果使用qcow模式,注意默认是zlib压缩,可以改成zstd压缩,在速度和空间占用上折中。