指令集
对iOS平台,每一代设备都有其对应的指令集。
| 指令集 | 设备 |
|---|---|
| armv6 | iPhone,iPhone2,iPhone3G |
| armv7 | iPhone 3GS, iPhone 4, iPhone 4S, |
| armv7s | iPhone5,iPhone5C |
| arm64/armv8 | iPhone 5s, iPhone 6(Plus), iPhone6s(Plus),iPhone7(Plus),iPhone8(Plus),iPhoneX |
机器的指令集都是向下兼容的,因此armv7的指令集可以运行在iPhone5s上,只是效率没有那么高而已。
iOS项目中的配置
也就是配置Build Setting里的Architectures选项

Architectures指定是该APP支持的指令集,新建一个项目,其默认的选项值为Standard architectures(armv7、arm64),表示该APP仅支持armv7和arm64的指令集。Valid architectures选项指即将编译的指令集,默认设置为armv6、armv7、arm64,表示会编译这三个指令集Build Active Architecture Only选项表示是否指编译当前使用的指令集,默认情况下在Debug时候设置为YES,以便可以更加高效、快速的调试程序;在Release情况下设置为NO,以便APP能够在各个机器上都能够一最高的效率运行。因为在Valid architectures中设置的指令集为armv6、armv7、arm64,在Release下会为各个指令集编译对应的代码,因此最后的ipa文件体积基本上翻了3倍。
总结
在大多数情况下,在实际的交叉编译过程中只需要编译 armv7和arm64两个指令集下的库,因为armv7到armv7s指令集的变化比较少,而且armv7s的设备并不是特别多,完全可以使用armv7来运行。arm64的变动比较多且设备比较多,需要单独编译出来,以保证这批设备的优质运行。
注:
iOS模拟器没有运行arm指令集,编译运行的是x86指令集,所以,只有在iOS设备上,才会执行设备对应的arm指令集。