我们可以看到苹果公告here.。根据这个文档,我们可以提交相同的二进制文件,支持32位和64位。我发现一个堆栈溢出回答here。但根据这个答案,我们should
设置了deployment target as IO7+
。但是苹果医生说,您可以通过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提供代码。在同样的情况下也遵循这里或为此做一些其他技术。
答案 0 :(得分:19)
Xcode可以构建包含32位和64位二进制文件的应用程序 所以它适用于运行iOS 7的所有设备。如果你想继续 为了支持iOS 6,你需要只为32位构建。下一个 一个月我们将进行更改,以便您创建单个 在iOS 6上支持32位的app二进制文件,以及32位和64位 在iOS 7上。
将您的应用转换为64位二进制文件
在较高级别,以下是创建同时针对两者的应用的步骤 32位和64位运行时环境:
1.安装Xcode 5.0.1。
2.打开你的项目。 Xcode会提示您使项目现代化。项目现代化增加了新的警告和错误 在为64位编译应用程序时很重要。
3.更新您的项目设置以支持iOS 5.1.1或更高版本。如果它早于iOS版本,则无法构建64位项目 iOS 5.1。
4.将项目中的体系结构构建设置更改为“标准体系结构(包括64位)”。
5.更新您的应用以支持64位运行时环境。新的编译器警告和错误将指导您完成此过程。 但是,编译器不会为您完成所有工作;使用 本文档中的信息可帮助指导您进行调查 你自己的代码。
6.在实际的64位硬件上测试您的应用。 iOS模拟器在开发过程中也很有用,但有些变化,比如功能 调用约定只有在您的应用程序运行时才可见 设备
7.使用Instruments调整应用程序的内存性能。
8.提交包含两种架构以供批准的应用程序。
本章的其余部分描述了经常出现的问题 将Cocoa Touch应用程序移植到64位运行时环境时。使用 这些部分将指导您自己调查代码的工作。
答案 1 :(得分: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位清洁,您必须执行以下操作:
答案 2 :(得分:2)
在较高级别,以下是创建针对32位和64位运行时环境的应用程序的步骤:
安装Xcode 5.0.2(我只使用了这个,可能更高更好)
打开您的项目。 Xcode会提示您使项目现代化。现代化项目会在编译64位应用程序时添加新的警告和错误。
更新项目设置以支持iOS 5.1.1或更高版本。如果它的目标是早于iOS 5.1的iOS版本,则无法构建64位项目。
将项目中的体系结构构建设置更改为“标准体系结构(包括64位)”。
更新您的应用以支持64位运行时环境。新的编译器警告和错误将指导您完成此过程。但是,编译器不会为您完成所有工作;使用本文档中的信息来指导您调查自己的代码。
在实际的64位硬件上测试您的应用。 iOS模拟器在开发过程中也很有用,但只有当您的应用程序在设备上运行时,某些更改(例如函数调用约定)才可见。
使用Instruments调整应用的内存性能。 提交包含两种架构的应用程序以供批准。
本章的其余部分描述了将Cocoa Touch应用程序移植到64位运行时环境时经常出现的问题。使用这些部分来指导您自己调查代码的工作。
按照Apple {/ p>的guide for supporting the 32 and 64 bit架构
答案 3 :(得分:0)
编译的程序xcode 5包含两个二进制代码:32位和64位。在32位系统中将调用32位代码。在64位系统中将调用64位代码。 同时,考虑到同一个程序只有32位代码,64位系统包含两个框架:一个32位,一个64位。当运行32位程序的64位系统将调用底层支持的32位框架,运行64位程序将调用64位框架作为底层支持。更多详细信息,您可以看到Apple的官方文档“Cocoa Touch的64位转换指南”。
使用xcode 5可以很容易地将程序编译成64个。基本步骤如下。
将支持设备设置为“ios7”
“构建设置”中的“架构”已更改为“标准架构(包括64位)”。
答案 4 :(得分:0)
至于问题的第一部分 - 基础SDK应该是“最新iOS SDK”,即iOS 7.0。最低部署目标应该是iOS 6.0,否则您将无法为体系结构选择“标准体系结构,包括64位(armv7,armv7s,armv8)”。选择这些设置后,您的应用程序将构建为32位和64位。
至于更新 - 切换到32 / 64bit拱门后,分析您的项目并修复可能出现的新警告。然后在真正的64位设备(iPhone 5s / iPad Air / iPad mini retina)上测试您的应用程序。如果您的应用使用iCloud,请测试32位和64位设备之间的同步。有用的信息在Apple's guide中(摘要来自@iDev答案)。
修改强>
实际上是,最小值为5.1.1,但您应该手动设置它或将部署目标设置为低于6.0,并选择体系结构为incl。 64位Xcode会要求您将其设置为5.1.1。无论如何,如果你想使用64位拱门,我不确定你为什么要特别支持5.1.1。
答案 5 :(得分:0)