我正在开发一个针对 iOS 5.1.1 到 iOS 8 的应用程序。它是一个包含 arm64、armv7 和 armv7s 的通用二进制文件。现在,arm64 将在 iOS 7 及更高版本(在受支持的设备上)上加载,但我想强制它仅在 iOS 8 上加载(即,使 iOS 7 恢复为加载 armv7s)。
动机:出于效率原因,我需要对某些 iOS 8 特定功能进行条件编译。我正在将整个渲染后端从 OpenGL ES 切换到 iOS 8 上的 Metal,并且不想为两者之间的任何动态调度付费。后端是一堆 c 函数,因此动态选择 API 需要为所有内容添加一层额外的函数指针。如果 arm64 只有 iOS 8,我可以有条件地使用#ifdef __arm64__
.
我认为可能有效的方法:我在“iOS 部署目标”下为 arm64 添加了条件构建设置。我检查了构建日志,看到它-miphoneos-version-min=8.0
是为 arm64 构建添加的。它在 iOS 8 和 arm64 上运行良好。对于 iOS 7 和 arm64,我看到了两种可能的结果;1) iOS 7 查看 64 位二进制文件,将其视为不受支持而丢弃,然后继续加载 armv7s。2) 尝试加载 64 位二进制文件并崩溃。问题是我唯一的 64 位设备运行 iOS 8,所以我无法对其进行测试。
我的问题是这是否可行(也许以前有人尝试过),或者是否有其他解决方案。
条件构建设置的屏幕截图以供参考: