32/64 位平台注意事项

虽然 iOS 和 macOS 过去都同时支持 32 位和 64 位应用,但 Apple 已逐渐弃用 32 位支持。

从 iOS 11 开始,32 位应用将不再启动,所有提交到 App Store 的应用都必须支持 64 位

从 2018 年 1 月开始,提交到 Mac App Store 的新应用必须支持 64 位,现有应用必须在 2018 年 6 月前更新。

Xamarin 的 Classic API(XamMac.dllmonotouch.dll)仅支持 32 位应用程序。 但是,默认情况下,新的 Xamarin.iOS 和 Xamarin.Mac 应用程序使用 Unified APIXamarin.iOSXamarin.Mac),因此可以根据需要同时面向 32 位和 64 位。

iOS

启用 Xamarin.iOS 应用的 64 位版本

警告

包含此部分是出于历史原因,可帮助将较旧的 Xamarin.iOS 项目移动到 Unified API 并支持 64 位。 默认情况下,所有新的 Xamarin.iOS 项目都将使用 Unified API 并面向 64 位。

对于已转换为 Unified API 的 Xamarin.iOS 移动应用程序,开发人员必须手动将生成设置更新为面向 64 位:

  1. 在“Solution Pad”中,双击应用的项目以打开“项目选项”窗口。

  2. 选择“iOS 生成”

  3. 对于 iPhone 模拟器,请在“支持的体系结构”下拉列表中选择“x86_64”或“i386 + x86_64”

    Setting Supported architectures to x86_64 or i386 + x86_64

  4. 对于物理设备,请选择可用的 ARM64 组合之一:

    Setting Supported architectures to one of the ARM64 combinations

  5. 单击“确定”。

  6. 执行全新生成。

只有 iPhone 5(或更新机型)配备的 A6 处理器才支持 ARMv7s。 ARMv7 代码比 ARMv6 更快且更小,仅适用于 iPhone 3GS 及更新机型,面向 iPad 或最低 iOS 5.0 版本时 Apple 才需要使用 ARMv7。 ARMv6 适用于所有设备,但 Xcode 4.5 及更高版本附带的编译器不再支持 ARMv6。

要在 iPhone 6 或其他 64 位设备上支持 iOS 8 需要使用 ARM64,Apple 在 iTunes App Store 中提交新的应用程序或更新现有应用程序时,也将需要使用 ARM64。

若要全面了解各种 iOS 设备的功能,请查看 Apple 的设备兼容性文档。

64 位和二进制大小增加

在 Apple 从 32 位转换为 64 位期间,iOS 应用需要能同时在 32 位和 64 位硬件上运行。 因此,Xamarin 的 Unified API 开发人员能够同时面向这两者。

同时面向 32 位和 64 位体系结构会显著增加应用程序的大小。 但是,这样做将允许较新的设备运行优化的代码,同时仍支持较旧的设备。

重要

如果将 iOS 应用程序提交到 iTunes App Store 时收到以下消息,“警告 ITMS-9000:缺少 64 位支持。从 2015 年 2 月 1 日起,上传到 App Store 的新 iOS 应用必须包含 64 位支持,并使用 Xcode 6 或更高版本中包含的 iOS 8 SDK 构建。若要在项目中启用 64 位,建议使用‘标准体系结构’的默认 Xcode 生成设置来生成包含 32 位和 64 位代码的单个二进制文件。”需要将支持的体系结构切换到可用的 ARM64 组合之一(如上所示),重新编译并重新提交。

Mac

重要

从 2018 年 1 月开始,提交到 Mac App Store 的所有新 Mac 应用都必须支持 64 位。 从 2018 年 6 月开始,现有 Mac App Store 应用及其更新必须支持 64 位。 请参阅 Apple 的公告介绍如何将 Xamarin.Mac 应用更新为 64 位的指南

大多数新式 Mac 计算机都支持 32 位和 64 位应用程序。 MacOS 10.6 (Snow Leopard) 是在 32 位系统上运行的最后一个操作系统。 自 2010 年发布以来,大多数 Mac 都支持这两个系统。

与 iOS 不同,最新版本的 macOS 中引入的许多新框架仅在 64 位模式(CloudKit、EventKit、GameController、LocalAuthentication、MediaLibrary、MultipeerConnectivity、NotificationCenter、GLKit, SpriteKit、Social 和 MapKit 等)中受支持。

Unified API 允许开发人员选择要生成的应用程序类型:32 位或 64 位。

32 位应用程序将能同时在 32 位和 64 位 Mac 计算机上运行,地址空间限制为 32 位,并且要求所有库均为 32 位。

如果具有在 64 位模式下不运行的 32 位依赖项、如果希望具有较小的下载,或者如果移动到 64 位时没有性能优势,则通常使用此模式。

此模式是限制性的,因为你将无法使用 macOS Mavericks 和 macOS Yosemite 中提供的许多框架。

64 位应用程序将仅在 64 位 Mac 设备上运行。

对于 Mac,这是首选的操作模式,因为目前使用中的大多数 Mac 都支持 64 位模式,并且你有权访问 Apple 提供的完整框架集。

启用 Xamarin.Mac 应用的 64 位版本

有关使用 Xamarin.Mac 生成 64 位应用的信息,请参阅将 Xamarin.Mac Unified 应用程序更新为 64 位指南。