在 Xamarin.iOS 中针对不同的设备进行编译
可以从项目的“iOS 生成”属性页上配置可执行文件的生成属性,可通过右键单击项目名称并浏览至 Visual Studio for Mac 中的“选项”>“iOS 生成”查找,或在 Visual Studio 的“属性”中查找:
除了 UI 上可用的配置选项外,你还可以向 Xamarin.iOS 生成工具 (mtouch) 传递自己的命令行选项集。
SDK 选项
Visual Studio for Mac 允许你配置两个与 SDK 相关的重要属性:用于生成软件的 iOS SDK 版本和部署目标(或所需的最低 iOS 版本)。
iOS SDK 版本选项允许你使用不同版本的 Apple 发布的 SDK,这会将 Xamarin.iOS 定向到在生成过程中应该引用的编译器、链接器和库。 右键单击该项目,然后选择“选项”和选项窗口中的“iOS 生成”:
部署目标设置用于选择在其上运行应用程序的操作系统所需的最低版本。 这在项目的 Info.plist 文件中设置。 应该选取具有运行应用程序所需的所有 API 的最低版本。
一般情况下,Xamarin.iOS API 会公开最新版本的 SDK 中的所有可用方法,如有必要,我们会提供允许你检测功能在运行时是否可用的方便属性(例如,UIDevice.UserInterfaceIdiom
和 UIDevice.IsMultitaskingSupported
始终在 Xamarin.iOS 上运行,我们会完成幕后的所有工作)。
链接
查看链接器上的专用页,了解有关链接器帮助你缩小可执行文件的大小的方法,并了解如何有效地使用这种方法。
代码生成引擎
从 Xamarin.iOS 4.0 开始,有两个到 Xamarin.iOS 的代码生成后端。 正则 Mono 代码生成引擎和基于 LLVM 优化编译器的引擎。 每个引擎都各有利弊。
通常情况下,在开发过程中,你可能会使用 Mono 代码生成引擎,因为它允许你快速循环访问。 对于发布生成和 AppStore 部署,请切换为 LLVM 代码生成引擎。
LLVM 优化后端引擎会生成比 Mono 引擎更快、更严格的代码,但花费的编译时间较长。
你可以在 Visual Studio for Mac 或 Visual Studio 的 iOS 生成选项中启用它们。
体系结构支持
ARMv6(Xamarin.iOS 已中断通过 v8.10 对 ARMv6 的支持)
- iPhone(原始),3G
- iPod 1 代、2 代
ARMv7
- iPhone 3GS、4、4S
- iPad 1、2、3、Mini
- iPod 3 代、4 代、5 代
ARMv7s
- iPhone 5
- iPhone 5c
- iPad 4
如果仅面向 ARMv7s 处理器,生成的代码会快一些,但它不会再在 ARMv7 或 ARMv6 系统上运行,除非在程序包中编译一个包含多个可执行文件的胖二进制。
ARM64(Xamarin.iOS 开始支持 v8.6 中的 ARM64)
- iPhone 5s
- iPhone SE
- iPhone 6、6 Plus
- iPhone 6s、6s Plus
- iPhone 7、7 Plus
- iPhone 8、8 Plus
- iPhone X
- iPad Air
- iPad Air 2
- iPad Mini 2、3、4
- iPad Pro(全部)
注意,提交到 App Store 的任意生成必须包含 64 位支持,这是 Apple 设置的要求。 此外,iOS 11 仅支持 64 位应用程序。
ARM Thumb-2 支持
Thumb 是 ARM 处理器使用的更紧凑的指令集。 通过启用 Thumb 支持,可以缩小可执行文件的大小,但执行时间会变慢。 ARMv7 和 ARMv7s 支持 Thumb。
条件框架使用情况
如果项目想要利用较新的 iOS 版本中的部分功能,你可能需要有条件地依赖于某些新框架。 最好的例子是想在运行 iOS 4.0 或更高版本时使用 iAd 但仍支持 3.x 设备。 若要完成此操作,需要让 Xamarin.iOS 知道你需要针对 iAd 框架“弱”链接。 弱绑定确保仅在第一次需要框架中的类时,根据需要加载框架。
若要执行此操作,应执行以下步骤:
- 打开“项目选项”并导航到“iOS 生成”窗格。
- 将
'-gcc_flags "-weak_framework iAd"'
添加到你想弱链接到的每个配置上的其他选项:
除此以外,你需要防止使用在可能不存在旧版本 iOS 的位置运行旧版本 iOS 的类型。 有几种方法来实现此目的,其中一种是分析 UIDevice.CurrentDevice.SystemVersion
。