Contents
  1. 1. 名词解释
  2. 2. 关于指令集如下参考
  3. 3. 默认设置
  4. 4. 那么问题来了

名词解释

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,我们可以设置ArchitecturesStandard 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位的代码包。

Contents
  1. 1. 名词解释
  2. 2. 关于指令集如下参考
  3. 3. 默认设置
  4. 4. 那么问题来了