[英]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.