Build Setting中的Architectures参数问题
名词解释
Architectures
:你想支持的指令集
支持指令集是通过编译生成对应的二进制数据包实现的,如果支持的指令集数目有多个,就会编译出包含多个指令集代码的数据包,造成最终编译的包很大
Valid architectures
:即将编译的指令集
Valid architectures 和 Architecture两个集合的交集为最终编译生成的版本
Build Active Architecture Only
:是否只编译当前设备适用的指令集
如果这个参数设为YES,使用iPhone 6调试,那么最终生成的一个支持ARM64指令集的Binary。一般在DEBUG模式下设为YES,RELEASE设为NO
关于指令集如下参考
机器对指令集的支持是向下兼容的,例如armv7的指令集是可以运行在iphone5S的,只是效率没那么高而已~
armv6
- iPhone
- iPhone2
- iPhone3G
- 第一代和第二代iPod Touch
armv7
- iPhone4
- iPhone4S
armv7s
- iPhone5
- iPhone5C
arm64
- iPhone5S
- iPhone6 / 6P
- iPhone6S / 6SP
默认设置
对于支持64-bit,我们可以设置Architectures
为Standard architectures(armv7,arm64)
这样设置,你的Deployment target最低只能设置为 6.0
因此,Valid Architecture
的值选择:armv7
armv7s
arm64
原因如下:
使用默认设置,则打的包里面有32位、64位两份代码,iPhone5s的cpu是第一代64位的,所以
在iPhone5/5C之前的旧型号手机上,只能运行32位包,
在iPhone5S之后的新型号手机上,会首选运行64位代码包,
但是可以兼容32位代码包,但是包含两种架构的代码包,只有运行在ios6之后的系统上。
这也就是说,这种打包方式,对手机几乎没啥要求,但是对系统有要求,即ios6以上。
所以总结如下:
要发挥iPhone5s之后机型的64位性能,就要包含64位包,那么系统最低要求为ios6。
如果要兼容ios5以及更低的系统,只能打32位的包,系统都能通用,但是会丧失iPhone5s的性能。
那么问题来了
如果你的项目中用到的第三方库比较旧,旧到不支持64位编译,那就比较悲剧了。
最好祈祷项目中的第三方库赶紧更新,要么就只能牺牲一下,只编译32位的代码包。