首先来了解一下Architectures中几个参数的含义
ARMv6:ARM11内核用于iPhone2G和iPhone3G中的架构
ARMv7:modern ARM内核用于iPhone3GS和iPhone4/S中的架构
ARMv7s:A6内核用于iPhone5中的架构
ARM64:A7内核用于iPhone5S/C中的架构
然后在Xcode的build setting的Architectures一栏中有几个比较重要的选项,而代码的编译架构一般设置以下两项:Architectures和Valid Architectures。其中Architectures是指项目编译时生成哪几个架构的二进制指令,项目建成时会自动选择,但在Xcode5中其选择的结果是默认包含ARM64,若果项目使用没有在ARM64上编译的第三方库,通常会有很多错误或告警而编译不过,这时就必须将ARM64去掉,即选择armv7 armv7s,因为ARM的指令是向前兼容的,即使这样选择也能在iPhone5S/C上运行。
但在Valid Architectures一项中,必须选上你要支持的具体架构类型,比如这项没有arm64的话就不能在iPhone5S/C上运行了。
这里我猜测在Architectures选上最新的架构是为了app能使用架构对应的新硬件功能或提升运行效率,而库文件的架构则必须统一。而它尽管向前兼容,但有对应架构的二进制指令可能效率会最优。暂时没有找到文献,得到证据后补上。