1. 了解 ARM
ARM 处理器,因为其低功耗和小尺寸而闻名,现在几乎所有的手机处理器都是基于 ARM。
armv6、armv7、armv7s、arm64 都是 ARM 处理器的指令集,并且所有指令集原则上都是向下兼容的,如 iPhone4S的 CPU 默认指令集为 armv7 指令集,但是它同时兼容 armv6 指令集,只是使用 armv6 指令集时无法充分发挥其性能,无法使用 armv7 指令集中的新特性,同理,iPhone5 的处理器标配 armv7s 指令集,同时也支持armv7 指令集,只是无法进行相关的性能优化,从而导致程序的执行效率没那么高。
2. 相关设备的指令集
arm64 | armv7s | armv7 |
---|---|---|
iPhone6s | iPhone5 | iPhone4 |
iPhone6s plus | iPhone 5C | iPhone4S |
iPhone 6 | iPad4 | iPad |
iPhone6s plus | - | iPad2 |
iPhone5s | - | iPad3 |
iPad Air | - | iPad mini |
我们可能还见过 i386 和 x86_64 的:
- i386 是针对Intel通用32 位微处理器
- x86_64是针对 x86 架构的 64 位处理器
所以:
- 模拟器32位处理器测试需要i386架构
- 模拟器64位处理器测试需要x86_64架构
- 真机32位处理器需要armv7,或者armv7s架构
- 真机64位处理器需要arm64架构(现在出的设备都是 64 位的了)
3. Xcode 设置支持的指令集
截屏2020-07-28 下午9.44.41.png结合上图,我们先要认识 3 个设置:
-
Architectures
该编译选项指定了工程将被编译成支持哪些指令集,支持指令集是通过编译生成对应的二进制数据包实现的,如果支持的指令集数目有多个,就会编译出包含多个指令集代码的数据包,造成最终编译的包很大。 -
Valid Architectures
该编译项指定可能支持的指令集,该列表和 Architectures 列表的交集,将是 Xcode 最终生成二进制包所支持的指令集,比如,你的Valid Architectures设置的支持arm指令集版本有:armv7/armv7s/arm64,对应的Architectures设置的支持arm指令集版本有:armv7s,这时Xcode只会生成一个armv7s指令集的二进制包。 -
Build Active Architecture Only
该编译项用于设置是否只编译当前使用的设备对应的arm指令集。当该选项设置成YES时,你连上一个armv7指令集的设备,就算你的Valid Architectures和Architectures都设置成armv7/armv7s/arm64,还是依然只会生成一个armv7指令集的二进制包。
当然该选项起作用的前提是你的Xcode必须成功连接了调试设备。如果你没有任何活跃设备,即Xcode没有成功连接调试设备,就算该设置项设置成YES依然还会编译Valid Architectures和Architectures指定的二进制包。
通常情况下,该编译选项在Debug模式都设成YES,Release模式都设成NO。
4. 选择支持的指令集
如果你的软件对安装包大小非常敏感,你可以减少安装包中的指令集数据包,而且这能达到立竿见影的效果。
网友评论