本文字数:2051字
预计阅读时间:15分钟
01
需要转换架构的原因
老版 Mac 使用 Intel 芯片,是x86_64架构,相应地在老版 Mac 上运行的模拟器使用的也就是 x86_64架构。
由于模拟器的 x86_64 架构与真机的 arm64、armv7 等架构不冲突,业界为了方便库文件管理,通常会将模拟器架构与真机架构通过 lipo 命令合并为一个 fat 文件。
对于 Intel 芯片的 Mac 这样处理就很高效合理的,但是 Apple 推出了 M 系列芯片的新版 Mac,这就导致模拟器也变成了 arm64 架构,同时 lipo 命令合并二进制文件时不允许出现同名的两个不同架构。也就是只要还采用通用二进制文件(fat 文件)的库管理方式,就无法同时使用真机 arm64 架构和模拟器 arm64 架构。
对于上述的问题, Apple 提供了两个解决方案:
1、XCFramework。可以根据编译环境指定使用的库文件,不用合成就避免了架构重名的问题。但是项目使用的第三方库很多,其他部门的库内又链接了其他的第三方库,全部更换不现实。(我们项目目前只有一个部门支持了XCFramework);
2、Rosetta Simulator。在 Xcode -》Product -》Destination 选项中,可以选择显示 Rosetta 模拟器,这样模拟器运行时使用的依旧是 x86_64 架构,同时搭配 Excluded Architectures = arm64 ,可以解决大部分项目模拟器运行的问题:
但是,visionOS Simulator 被 Apple 远程禁止了 Rosetta 选项!(早期的 Xcode15 beta 版还能