2014-01-18 141 views
11

我们可以看到,苹果宣布here.。根据这个文档,我们可以提交支持32位和64位的相同二进制文件。我发现一个堆栈溢出回答here。但根据这个答案,我们shoulddeployment target as IO7+。但苹果文档说,你可以提交这个IOS 7和IOS 6支持?我的问题是,如何通过部署目标IOS6 +生成支持32位和64位的二进制文件?如何单一应用二进制支持64位和32位应用程序

注:我使用xcode 5.0

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

+0

声音是好的。为什么不接受我的回答 – codercat

+0

@iDev需要更多的解释。但是你的回答对未来的用户更有帮助。你可以更新你的答案和有用的例子,这会让你更满意:)你提供了两个答案,使它成为一个答案。它会更有用.. – Mani

回答

2

在较高水平,这里有创建目标无论是32位和64位运行时环境的应用程序的步骤:

安装的Xcode 5.0.2(我这个只是做,也许越高越好)

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

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

更改架构建立在您的项目设置为“标准架构(包括64位)。”

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

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

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

本章的其余部分描述了一个移植可可触摸应用的64位运行时环境时经常出现的问题。使用这些部分来指导您自己的努力来调查您的代码。

由苹果按照guide for supporting the 32 and 64 bit架构

+0

我正在使用Xcode5.0。但是,如果我试图设置''标准体系结构(包括64位)“,我不能将部署目标设置为比IOS7更早? – Mani

+0

首先Xcode与IOS 7.0 sdk可能是一个问题,你尝试新版本5.0.3我想会为你做 – Retro

+0

你使用Xcode 5.0.3吗?我已经将Base sdk设置为7.0?是否有任何需要更改基础SDK? – Mani

0

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

使用Xcode的5可以很容易地编写程序到64.The基本过程如下。

  1. 在“生成设置”变更为“标准架构(包括64位)”设置在支撑装置成“ios7”

  2. 的“体系结构”。

+0

我需要支持它从IOS6 +? – Mani

+0

@Mani您可以设置Deployment target 6.0并使用IOS SDK 7.0开发 – Dracuuula

+0

那么,您的意思是第一点?我无法得到它? – Mani

19

Xcode中可以构建应用程序与32位和64位二进制文​​件包含 因此它可以跨越运行iOS 7.如果您希望继续 支持所有的iOS 6的设备,那么你将需要仅用于构建32位。接下来 月我们将作出修改,将允许您创建一个支持在iOS 6的32位单 应用二进制文件,以及32位和64位 在iOS 7

转换您的应用程序到64位二进制

在高级别,这里是创建同时指定 的32位和64位的运行时环境的应用程序的步骤:

1.安装的Xcode 5.0。 1。

2.打开您的项目。 Xcode提示你使你的项目现代化。对项目进行现代化增加了新的警告和错误,编译您的应用程序时,这些错误是 对于64位。

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

4.Change的架构构建设置在项目中的“标准架构(包括64位)。”

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

6.测试实际的64位硬件的应用程序。 iOS Simulator在开发过程中也可能会有所帮助,但只有当您的应用程序在 设备上运行时,才会看到一些更改,例如功能 调用约定。

7.使用Instruments来调试你的应用程序的内存性能。

8.Submit一个应用程序,包括批准两种架构。

本章的其余部分描述了一个移植可可触摸应用的64位运行时环境时经常发生 问题。使用 这些部分来指导您自己的努力来调查您的代码。

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

+0

我只是想补充一点,因为这是覆盖iOS6需求的答案 - 只要使用NSInteger和NSUInteger,您通常不需要对y代码进行更改以支持32位和64位int或uint ...是一种简化,但对大多数应用程序来说通常都是如此。 –

+0

@iDev这是真的吗?我们可以用xocde 5.0.1来构建这个版本吗?因为我使用5.0? – Mani

+0

声音很好... – codercat

5

iOS应用程序依赖于低级别的应用程序二进制接口,并通过了Objective-C语言和系统框架建立的编码约定上。从iOS 7开始,一些iOS设备使用64位处理器并提供32位和64位运行时环境。对于大多数应用程序,64位运行时环境与32位运行时环境有以下两种显着差异:

在64位运行时中,Cocoa Touch框架使用的许多数据类型(以及Objective-C语言本身)的规模已经增加或者有更严格的内存对齐规则。请参阅“Changes to Data Types”。 64位运行时需要在进行函数调用时使用正确的函数原型。请参见“Changes to Function Calling”。

application binary interface (ABI)

其他更改64位运行时

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

在一个较高水平,使你的代码64位清洁,你必须做到以下几点:

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

有点混乱。您能否提供1和2的示例代码? – Mani

+0

与你自己有什么混淆。 – codercat

+0

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

0

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

至于更新 - 切换到32位/ 64位arch后,分析您的项目并修复可能出现的新警告。然后在真正的64位设备(iPhone 5s/iPad Air/iPad迷你视网膜)上测试您的应用程序。如果您的应用使用iCloud,请在32位和64位设备之间测试同步。有用的信息在Apple's guide(总结来自@iDev答案)。

编辑

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

+0

你错了。当部署目标比ios 5.1晚时,我们能够为体系结构选择“标准架构,包括64位(armv7,armv7s,armv8)”吗?用Xcode 5.0.2检查.. – Mani

相关问题