[英]Xcode 5 and iOS 7: Architecture and Valid architectures
我正在Xcode 5中開始新項目。我想使用iOS SDK 7
開發應用程序,但部署目標是iOS 5.0
。 一旦我在Xcode中創建新項目並嘗試將部署目標更改為5.0,我就收到此消息:
Applications including an arm64 slice are not compatible with versions of iOS
prior to 6.0
Adjust your Architectures build setting to not include arm64 in order to deploy
to releases prior to iOS 6.0.
因此將架構更改為Standard
(無64位)。 我編譯,運行,但我真的不明白剛剛發生了什么。
Xcode項目構建設置中的Valid architectures
Architectures
和Valid architectures
設置之間有什么區別?
如果我將Architectures
設置為排除64位當我在64位iPhone或iOS模擬器上運行我的應用程序時會發生什么(我知道它有效,我只是好奇下面有什么問題)?
你能用新的64位架構來解釋大混亂嗎?
將構建設置中的體系結構設置為標准體系結構(armv7,armv7s)
iPhone 5S采用A7 64位處理器。 來自蘋果文檔
Xcode可以構建包含32位和64位二進制文件的應用程序。 這種組合二進制文件需要iOS 7或更高版本的最低部署目標。
注意:Xcode的未來版本將允許您創建一個支持iOS 6及更高版本上的32位運行時的應用程序,並支持iOS 7上的64位運行時。
從文檔中我理解的是
更新(Xcode 5.0.1)
在Xcode 5.0.1中,他們添加了對iOS 5.1.1以后創建64位二進制文件的支持。
Xcode 5.0.1可以構建包含32位和64位二進制文件的應用程序。 此組合二進制文件需要iOS 5.1.1或更高版本的最低部署目標。 64位二進制文件僅在運行iOS 7.0.3及更高版本的64位設備上運行。
當你設置64位時,生成的二進制文件是一個“Fat”二進制文件,它包含所有三個與瘦胖文件頭捆綁在一起的Mach-O圖像。 你可以看到使用otool或jtool。 您可以查看一些包含在iOS 7.0 SDK中的胖二進制文件,例如AVFoundation Framework,如下所示:
% cd /Developer/Platforms/iPhoneOS.platform/DeviceSupport/7.0\ \(11A465\)/Symbols/System/Library/Frameworks/AVFoundation.framework/
%otool -V -f AVFoundation 9:36
Fat headers
fat_magic FAT_MAGIC
nfat_arch 3
architecture arm64 # The 64-bit version (A7)
cputype CPU_TYPE_ARM64
cpusubtype CPU_SUBTYPE_ARM64_ALL
capabilities 0x0
offset 16384
size 2329888
align 2^14 (16384)
architecture armv7 # A5X - packaged after the arm64version
cputype CPU_TYPE_ARM
cpusubtype CPU_SUBTYPE_ARM_V7
capabilities 0x0
offset 2359296
size 2046336
align 2^14 (16384)
architecture armv7s # A6 - packaged after the armv7 version
cputype CPU_TYPE_ARM
cpusubtype CPU_SUBTYPE_ARM_V7S
capabilities 0x0
offset 4407296
size 2046176
align 2^14 (16384)
至於二進制本身,它使用ARM64位指令集,它(主要與32位兼容,但是)完全不同的指令集。 這對於圖形程序(使用NEON指令和寄存器)尤為重要。 同樣,CPU有更多寄存器,這對程序速度有很大影響。 在http://blogs.barrons.com/techtraderdaily/2013/09/19/apple-the-64-bit-question/?mod=yahoobarrons中有一個有趣的討論是否會產生影響; 到目前為止,基准測試已明確表明它確實如此。
使用otool -tV將轉儲程序集(如果你有XCode 5及更高版本),然后你可以看到自己的指令集差異。 大多數(但不是全部)開發人員將對變化保持不可知,因為大多數情況下他們並不直接影響Obj-C(盡管CG * API),並且必須在低級指針處理方面做更多事情。 編譯器將實現其魔術和優化。
我對Apple Docs的理解。
什么是有效架構 (VALID_ARCHS)到Xcode構建設置?
示例: - 一個iOS項目在Xcode中具有以下構建設置。
通過從支持的體系結構中刪除arm64設置,您無需將編譯器限制為僅限armv7和armv7s 。 您只需將部署目標設置設置為5.1.1
重要說明:您無法在“ 構建設置”部分中將“部署目標”設置為5.1.1,因為它僅使用固定值下拉。 但只需在文本字段中鍵入值,即可在應用程序設置的常規部分輕松將其設置為5.1.1。
簡單修復:
目標 - >構建設置 - >構建選項 - >啟用Bitcode - >否
適用於iOS 9.3.3的設備
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.