Iphone Xcode 5和iOS 7:体系结构和有效体系结构

Iphone Xcode 5和iOS 7:体系结构和有效体系结构,iphone,ios,xcode,ios7,Iphone,Ios,Xcode,Ios7,我正在用Xcode 5启动一个新项目。我想使用iosdk7开发应用程序,但部署目标是ios5.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

我正在用Xcode 5启动一个新项目。我想使用
iosdk7
开发应用程序,但部署目标是
ios5.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.
因此,将体系结构更改为标准(无64位)。我编译、运行,但我并不真正理解刚刚发生的事情。

Xcode项目构建设置中的
架构
有效架构
设置有什么区别?
如果我将
架构
设置为排除64位,那么在64位iPhone或iOS模拟器上运行我的应用程序时会发生什么(我知道它是有效的,我只是好奇下面会发生什么)?
你能解释一下新64位体系结构的混乱吗


将构建设置中的体系结构设置为标准体系结构(armv7、armv7s)

iPhone5S由A7 64位处理器供电

Xcode可以使用32位和64位二进制文件构建您的应用程序。此组合二进制文件要求最低部署目标为iOS 7或更高版本

注意:未来版本的Xcode将允许您创建一个应用程序,在iOS 6及更高版本上支持32位运行时,在iOS 7上支持64位运行时

从文档中我了解到的是

  • Xcode可以为单个应用程序创建两个64位32位二进制文件,但 部署目标应该是iOS7。他们说将来它会 是iOS 6.0吗
  • 32位二进制在iphone5s(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位设备上运行

更新(Xcode 5.1)
Xcode 5.1在架构部分做了重大更改。这将是您的后续工作。

当您设置64位时,生成的二进制文件是一个“Fat”二进制文件,其中包含所有三个Mach-O图像和一个精简的Fat头文件。您可以使用otool或jtool看到这一点。您可以查看作为iOS 7.0 SDK一部分的一些Fat二进制文件,例如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有更多的寄存器,这对程序速度有很大的影响。中有一个有趣的讨论,关于这是否会产生影响;到目前为止,基准测试清楚地表明了这一点


使用otool-tV将转储程序集(如果您使用的是XCode 5和更高版本),然后您可以自己查看指令集的差异。大多数(但不是所有)开发人员将对这些更改保持不可知状态,因为在大多数情况下,它们不会直接影响Obj-C(尽管有CG*API)编译器将发挥其魔力和优化功能。

我对Apple Docs的理解

  • Xcode构建设置中的架构是什么?
    • 指定二进制文件的目标体系结构。当指定多个体系结构时,生成的二进制文件可能包含每个指定体系结构的目标代码
  • Xcode构建设置中的有效架构是什么

    • 指定可为其构建二进制文件的体系结构
    • 在构建过程中,此列表与ARCH相交,生成的列表指定二进制文件可以运行的体系结构
  • 示例:-一个iOS项目在Xcode中具有以下生成设置

    • ARCH=armv7 armv7s
    • 有效的_ARCHS=armv7 armv7s arm64
    • 在本例中,将为armv7 armv7s arm64体系结构构建二进制文件。但相同的二进制文件将仅在ARCHS=armv7 armv7s上运行

通过从支持的体系结构中删除arm64设置,您无需将编译器仅限于armv7armv7s。 只需将部署目标设置为5.1.1即可


重要提示:您不能在“构建设置”部分将部署目标设置为5.1.1,因为它是一个只有固定值的下拉列表。但您可以在“应用程序设置”的“常规”部分轻松地将其设置为5.1.1,只需在文本字段中键入值即可。

所有答案都无效,然后我就忘了回答设置可在项目中找到的最低部署目标->常规->部署信息->部署目标->8.0

简单修复:

目标->构建设置->构建选项->启用位码->否


在iOS 9.3.3设备上工作正如我在问题中所写的,我已经做了。我的问题更多的是关于它会发生什么变化以及下面会发生什么。关于编辑:所以它只是关于包含的二进制文件?在架构设置为排除64位的情况下,iPhone 5S将运行32位二进制文件?关于编辑:我认为最低部署目标必须是iOS 6.0,而不是iOS 7.0。@CrazyyyOghter是的,与Mac一样-64位机器可以运行32位二进制文件,否则64位机器在首次引入时将无法运行。当前,要在5s和其他具有iOS 7部署目标的设备上运行应用程序,应为iOS 7。0@CrazyYoghurt然后你必须放下arm64。你看过苹果的显卡了吗每个论坛?有很多关于这个的帖子。没有