首先來了解一下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能使用架構對應的新硬件功能或提升運行效率,而庫文件的架構則必須統一。而它盡管向前兼容,但有對應架構的二進制指令可能效率會最優。暫時沒有找到文獻,得到證據后補上。