单个应用程序二进制文件如何支持64位和32位应用程序

我们可以在这里看到苹果公告。 。 根据这个文档,我们可以提交相同的二进制支持32位和64位。 我发现这里有一个堆栈溢出的答案。 但根据这个答案,我们shoulddeployment target as IO7+设置deployment target as IO7+ 。 但是苹果doc说,你可以用IOS 7和IOS 6提交这个支持吗? 我的问题是, 如何通过部署目标IOS6 +生成支持32位和64位的二进制文件?

注意:我正在使用xcode 5.0

更新: Question above is fixed by using xcode 5.0.2 。 但是我很困惑,我怎样才能让32位和64位的代码。 我知道一件事,我们必须在一段时间内分别做两个代码。 但How can I do? 。 例如,如果在ios6中不赞成使用某种方法,我们也提供了ios 6和ios7的代码。 在这种情况下也跟着这里或者做一些其他的技术。

Xcode可以构build包含32位和64位二进制文​​件的应用程序,因此它可以在所有运行iOS 7的设备上运行。如果您希望继续支持iOS 6,那么只需要构build32位。 下个月,我们将进行更改,使您可以创build支持iOS 6上的32位以及iOS 7上的32位和64位的单个应用程序二进制文件。

将您的应用程序转换为64位二进制文​​件

在较高层面上,下面是创build一个针对32位和64位运行时环境的应用程序的步骤:

1.安装Xcode 5.0.1。

打开你的项目。 Xcode提示你更新你的项目。 对项目进行现代化增加了新的警告和错误,这对于编译64位应用程序非常重要。

3.更新您的项目设置以支持iOS 5.1.1或更高版本。 如果目标iOS版本早于iOS 5.1,则无法构build64位项目。

4.将项目中的体系结构构build设置更改为“标准体系结构(包括64位)”。

5.更新您的应用程序以支持64位运行时环境。 新的编译器警告和错误将有助于指导您完成此过程。 但是,编译器并没有为你做所有的工作; 使用本文档中的信息来帮助指导您调查自己的代码。

6.在实际的64位硬件上testing您的应用程序。 iOS模拟器在开发过程中也很有帮助,但是只有当您的应用程序在设备上运行时,才能看到一些更改,例如函数调用约定。

7.使用工具来调整应用程序的内存性能。

8.提交包含两种体系结构的应用程序以供审批。

本章的其余部分描述了将Cocoa Touch应用程序移植到64位运行时环境时经常发生的问题。 使用这些部分来指导您自己的努力来调查您的代码。

https://developer.apple.com/library/ios/documentation/General/Conceptual/CocoaTouch64BitGuide/ConvertingYourAppto64-Bit/ConvertingYourAppto64-Bit.html#//apple_ref/doc/uid/TP40013501-CH3-SW1

iOS应用程序依赖于由Objective-C语言和系统框架build立的底层应用程序二进制接口和编码约定。 从iOS 7开始,一些iOS设备使用64位处理器,同时提供32位和64位运行时环境。 对于大多数应用程序,64位运行时环境与32位运行时环境有两个显着的不同之处:

在64位运行时,Cocoa Touch框架(以及Objective-C语言本身)使用的许多数据types的大小已经增加,或者有更严格的内存alignment规则。 请参阅“ 对数据types的更改 ”。64位运行时需要在进行函数调用时使用正确的函数原型。 请参阅“ 函数调用的更改 ”。

应用程序二进制接口(ABI)

对64位运行时的其他更改

64位ARM指令集与32位指令集显着不同。 如果您的应用程序包含任何汇编语言代码,您需要重写它以使用新的指令集。 您还需要更详细地描述iOS中的64位调用约定,因为这些约定并不完全符合ARM标准。 有关更多信息,请参阅iOS ABI函数调用指南 。

在较高的层面上,为了让你的代码清洁64位,你必须做到以下几点:

  1. 避免将64位长整数分配给32位整数。
  2. 避免将64位指针分配给32位整数。
  3. 在算术运算期间避免指针和长整数的截断(或整数types改变引起的其他算术问题)。
  4. 修复数据types大小更改导致的alignment问题。
  5. 确保在32位和64位运行时间之间共享的内存结构共享相似的布局。
  6. 重写任何汇编语言代码,以便您的代码使用新的64位操作码和运行时。
  7. 避免将可变参数转换为具有固定数量参数的函数,反之亦然。

在较高层面上,下面是创build一个针对32位和64位运行时环境的应用程序的步骤:

安装Xcode 5.0.2(我只有这样做,也许更高更好)

打开你的项目。 Xcode提示你更新你的项目。 现代化项目会增加新的警告和错误,这对于编译64位应用程序非常重要。

更新您的项目设置,以支持iOS 5.1.1或更高版本。 如果目标iOS版本早于iOS 5.1,则无法构build64位项目。

将项目中的体系结构构build设置更改为“标准体系结构(包括64位)”。

更新您的应用程序以支持64位运行时环境。 新的编译器警告和错误将有助于指导您完成此过程。 但是,编译器并没有为你做所有的工作; 使用本文档中的信息来帮助指导您调查自己的代码。

在实际的64位硬件上testing您的应用程序。 iOS模拟器在开发过程中也很有帮助,但是只有当您的应用程序在设备上运行时,才能看到一些更改,例如函数调用约定。

使用工具来调整应用程序的内存性能。 提交包含两种体系结构的应用程序以供审批。

本章的其余部分描述了将Cocoa Touch应用程序移植到64位运行时环境时经常发生的问题。 使用这些部分来指导您自己的努力来调查您的代码。

按照指导,以支持苹果32和64位体系结构

程序xcode 5编译时包含两个二进制代码:32位和64位。在32位系统中会调用32位代码。在64位系统中会调用64位代码。 同时,想想同一个程序只有32位代码,64位系统包含两个框架:一个32位,一个64位。当运行32位程序的64位系统调用32位的底层支持框架,运行64位的程序会调用64位的底层支持框架。更多细节你可以看到苹果的官方文档“Cocoa Touch的64位转换指南”。

使用xcode 5可以很方便的将程序编译成64个程序。基本程序如下。

  1. 将支持设备设置为“ios7”

  2. “Build Setting”中的“架构”更改为“标准架构(包括64位)”。

至于第一部分的问题 – 基础SDK应该是iOS 7.0的“最新的iOS SDK”。 最低部署目标应该是iOS 6.0,否则您将无法为体系结构select“标准架构,包括64位(armv7,armv7s,armv8)”。 select这些设置后,你的应用程序将被构build为32位和64位。

至于更新 – 切换到32/64位拱门后,分析您的项目,并修复可能出现的新警告。 然后在真正的64位设备(iPhone 5s / iPad Air / iPad迷你视网膜)上testing您的应用程序。 如果您的应用程序使用iCloud,则testing32位和64位设备之间的同步。 有用的信息是在苹果的指导 (从那里总结@iDev答案)。

编辑

其实是的,最小值是5.1.1,但是你应该手动设置它,或者设置部署目标低于6.0,并且当你select体系结构到incl。 64位Xcode会要求你将其设置为5.1.1。 无论如何,我不确定为什么你想要支持5.1.1,特别是如果你想使用64位拱。