繁体   English   中英

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

[英]How Single App Binary Supports 64-bit and 32-bit Apps

我们可以在这里看到苹果公告 根据这个文档,我们可以提交相同的二进制文件,支持32位和64位。 我发现这里有一个堆栈溢出答案。 但根据这个答案,我们shoulddeployment target as IO7+设置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提供代码。 在同样的情况下也遵循这里或为此做一些其他技术。

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

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

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

1.安装Xcode 5.0.1。

2.打开你的项目。 Xcode会提示您使项目现代化。 现代化项目会在编译64位应用程序时添加新的警告和错误。

3.更新项目设置以支持iOS 5.1.1或更高版本。 如果它针对早于iOS 5.1的iOS版本,则无法构建64位项目。

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

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

6.在实际的64位硬件上测试您的应用程序。 iOS模拟器在开发过程中也很有用,但只有当您的应用程序在设备上运行时,某些更改(例如函数调用约定)才可见。

7.使用Instruments调整应用程序的内存性能。

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语言和系统框架建立的低级应用程序二进制接口和编码约定。 从iOS 7开始,一些iOS设备使用64位处理器,并提供32位和64位运行时环境。 对于大多数应用程序,64位运行时环境与32位运行时环境的区别在于两个重要方面:

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

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

64位运行时的其他更改

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

在较高的层次上,为了使您的代码保持64位清洁,您必须执行以下操作:

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

在较高的层次上,以下是创建针对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 支持32位和64位架构

编译的程序xcode 5包含两个二进制代码:32位和64位。在32位系统中将调用32位代码。在64位系统中将调用64位代码。 同时,考虑到同一个程序只有32位代码,64位系统包含两个框架:一个32位,一个64位。当运行32位程序的64位系统将调用底层支持的32位框架,运行64位程序将调用64位框架作为底层支持。更多详细信息,您可以看到Apple的官方文档“Cocoa Touch的64位转换指南”。

使用xcode 5可以很容易地将程序编译成64个。基本步骤如下。

  1. 将支持设备设置为'ios7'

  2. “构建设置”中的“体系结构”更改为“标准体系结构(包括64位)”。

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

至于更新 - 切换到32 / 64bit拱后,分析您的项目并修复可能出现的新警告。 然后在真正的64位设备(iPhone 5s / iPad Air / iPad mini retina)上测试您的应用程序。 如果您的应用使用iCloud,请测试32位和64位设备之间的同步。 有用的信息在Apple的指南中 (摘自@iDev答案)。

编辑

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM