Xcode中Architecture與iphone版本對應關係

Arm是處理器是移動設備上佔用率最大的處理器。 
armv6、armv7、armv7s、arm64都是arm處理器的指令集。通常指令是向下兼容的。在模擬器運行時,iOS模擬器運行的是x86指令集。只有在真機上,纔會對執行arm指令集。

如果出現錯誤: 
OBJC_CLASS$_xx文件名”, referenced from: 
linker command failed with exit code 1 (use -v to see invocation)

要設置:

Build Active Architecture Only

這個屬性設置爲yes,是爲了debug的時候編譯速度更快,它只編譯當前的architecture版本,所以會報錯編譯不到文件,出錯(”OBJC_CLASS$_ZBarReaderViewController”, referenced from:) 
而設置爲no時,會編譯所有的版本。

設備對應的architecture:

架構 版本
armv6 iPhone,iPhone 2G/3G,
iPod 1G/2G
armv7 iPhone 3GS,iPhone4,iPhone 4s,
iPad,iPad2,iPad3(The New iPad),iPad mini,
iPod Touch 3G,iPod Touch4
armv7s iPhone5, iPhone5C,
iPad4,
iPod5
arm64 iPhone5s,iPhone6,iPhone6 Plus,
iPad Air,iPad mini2(iPad mini with Retina Display)

從XCode45開始,不再支持armv6指令集。

Xcode的Achitectures設置

Architectures:

選擇Target生成包所支持的指令集,則意味着生成的包裏面要包含對應的指令集代碼。原則上選擇的Target多,會造成生成的包比較大。

Valid Architectures:

Valid Architectures限制可能被支持的指令集範圍。

生成的包裏,是Valid Architectures與Architectures的交集。

Build Active Architecture Only:

是否只編譯當前連接設備所支持的指令集。

編譯生成的包裏支持的指令集,與上面的三個選項設置都有密切的關係。如: 
現XCode連接New iPad(支持armv7)設置:

選項
Build Active Architecture Only YES
Architectures armv7 armv7s arm64
ValidArchitectures armv7 armv7s arm64
這時生成包支持指令集 armv7

如果是下面情況就會出現問題:

選項
Build Active Architecture Only YES
Architectures armv7 armv7s arm64
ValidArchitectures armv6 armv7s arm64
這時生成包支持指令集 編譯報錯:No architectures to compile for…

Build Active Architecture Only一般在Debug設爲Yes,Release設置爲No。

其它問題

xcode有時會提示:

Pods was rejected as an implicit dependency for ‘libPods.a’ because its architectures ‘XXX’ didn’t contain all required architectures ‘XXX’.

除了按上面的提示進行必要的分析設置,另外可以把Pods的Targets Architectures設置:

Build Active Architecture Only :No


發佈了46 篇原創文章 · 獲贊 9 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章