Xamarin.iOS构建选项

Xamarin IDE为iOS和Android提供了非常有用的构建选项。在这里,我们讨论可用于iOS的构建选项。 可以使用各种配置和平台进行配置。 在这里,我仅考虑将其用于两种配置和平台,但是您可以根据自己的选择进行配置。 我在这里考虑的配置是Debug and Release,而Platform是模拟器和Device。

注意:有些构建选项对于调试配置是不可选择的。

什么是构建选项,它的用途是什么?

构建选项是在构建应用程序时可以使用的预定义规则或配置,换句话说,我们可以称其为构建应用程序时可以应用的一组规则。 它用于减少构建时间,应用程序大小,提高应用程序性能等。

如何打开Xamarin.iOS应用程序的构建选项?

您可以通过双击iOS项目来打开构建选项,或者右键单击它,在Mac的Visual Studio中选择“选项”,在Windows的Visual Studio中选择“属性”,然后从左侧面板中选择iOS生成选项。 您可以更改每个可用配置和平台的构建选项。 有关如何更改和添加构建配置和平台的更多详细信息,请检查:https://blog.xamarin.com/demystifying-build-configurations/

有关配置和平台选项,请参见附图(Visual Studio for Mac的屏幕截图)。

了解构建选项

如上图所示,有许多可用的构建选项,每个都有不同的用法和优点,其中一些可能在某些配置和平台上不可用。

SDK选项:这使您可以选择系统上安装的iOS SDK版本,以用于构建应用。

链接器行为:在构建应用程序时,Visual Studio for Mac或Visual Studio会调用一个名为mtouch的工具,该工具包括托管代码的链接器。 链接器可以删除未使用的代码,以减少应用程序的整体大小。 链接器使用静态分析来确定您的应用程序易于遵循的不同代码路径。 这是一个繁重的过程,因此在编译时会花费一些时间,因为它必须遍历每个程序集的每个细节,以确保不会删除任何可发现的东西。 可以通过从可用选项中选择选项来定制链接器行为。 Xamarin提供的主要三个选项如下所述。

不链接:选择此选项意味着链接步骤将被跳过,并且不会删除任何代码。 这样可以加快构建过程,但会产生较大的IPA。 在构建应用程序时使用它是有意义的,因为作为开发人员,您关心的是减少构建应用程序的时间

仅限于Link Framework SDK:此选项将使您当前的应用程序程序集保持不变,并通过删除应用程序未使用的所有内容来减小Xamarin.iOS(Xamarin.iOS SDK)附带的程序集的大小。 当您将平台定位到iOS设备时,此选项最适合。 此选项与“全部链接”选项的区别在于它无法执行少量优化。

全部链接:设置此模式时,链接程序可以使用其优化的整个集合来尽可能减少应用程序。 它将同时对用户代码执行链接操作,从而修改用户代码,因此,当您的代码使用某种功能(链接程序的静态分析无法检测到)(对于Web服务,反射或序列化)时,它有时可能会中断。 可能需要对代码进行一些更改才能使应用程序链接所有内容。 您可以从此处找到有关链接和链接器安全代码的更多详细信息:https://developer.xamarin.com/guides/ios/advanced_topics/linker/

支持的体系结构:此选项指定可以在哪些设备上运行应用程序。 根据处理器体系结构,它具有许多选项。 下面列出了每个设备名称。

ARMv7

– iPhone 3GS,4、4s。

– iPad 1、2、3,Mini。

– iPod 3、4、5代。

ARMv7

– iphone 5。

– iPhone 5C。

– iPad 4。

ARMv64(iOS v8.6支持ARMv64)。

– iPhone 5S。

– iPhone SE。

– iPhone 6、6s,6 +,6s +,

– iPhone 7、7+。

– iPad Air,Air 2。

– iPad Mini 2、3、4。

– iPad Pro(全部)。

ARMv7 + ARMv7s。

ARMv7 + ARMv64。

ARMv7s + ARMv64。

ARMv7 + ARMv7s + ARMv64。

ARMv64是64位体系结构,从iPhone 5s引入的A7处理器开始支持。

仅支持iPhone 5且在iOS 6.0或更高版本上运行的A6处理器仅支持ARMv7s。

从iPhone 3GS开始,所有iPad和iPhone都支持ARMv7,并且适用于iOS 5.0和更高版本。 它将比ARMv6(ARMv6支持iPhone(原始),3,iPod 1、2代)编译更小,更快的代码。

ARMv6是将在所有iOS设备上运行的最兼容的体系结构,但仅由Xcode 4.4或更早版本附带的iOS编译器支持(不提供最新的Xamarin.ios版本ARMv6)。

注意:指定多种体系结构可以使应用程序以最大的代码优化为目标,以最广泛的设备为目标,但是它将使应用程序可执行文件的大小增加一倍或两倍。

HttpClient实现:此选项指定应用程序如何使用HttpClient实现。 有3个选项,如下所示。

托管:这是Xamarin先前版本附带的完全托管的HttpClient处理程序。 它具有与Microsoft .NET和较早的Xamarin版本最兼容的功能集。 下面列出了此选项的一些缺点。

–它未与Apple OS完全集成,并且仅限TLS 1.0。

–在诸如加密之类的事情上,它通常比本地API要慢得多。

–它需要更加托管的代码,从而创建了更大的可分发应用程序。

CFNetwork(iOS 6+):基于CFNetwork的处理程序基于iOS 6及更高版本中可用的本机CFNetwork框架。

此处理程序的一些优缺点如下。

优点:

–它使用本机API以获得更好的性能和更小的可执行文件大小。

–支持更新的标准,例如TLS 1.2。

缺点:

–需要iOS 6或更高版本。

–在watchOS上不可用。

–某些HttpClient功能/选项不可用。

NSUrlSession(iOS 7+):基于NSURLSession的处理程序基于iOS 7和更高版本中可用的本机NSUrlSession框架。 下面列出了一些优点和缺点。

优点:

–它使用本机API以获得更好的性能和更小的可执行文件大小。

–支持最新标准,例如TLS 1.2。

缺点:

–需要iOS 7或更高版本。

–某些HttpClient功能/选项不可用。

LLVM优化编译器:与Mono引擎相比,它可以生成更快,更紧凑的代码,但代价是编译时间长。 此选项在调试配置中不可用,因为它需要更多的时间来编译。 在创建发行版本或应用商店部署时,最好启用此选项,否则,请使用Mono代码生成引擎,因为它将使您快速迭代。 顾名思义,此选项在ARMv7和ARMv7s设备上受支持,该名称中有一个选项称为“ Thumb-2指令集(针对ARMv7和ARMv7s)”。 它是ARM处理器使用的更紧凑的指令集。 它可以减小可执行文件的大小,但会降低执行时间。

将32位浮点运算作为64位浮点执行:顾名思义,将所有32位浮点算术运算都作为64位浮点执行,这会产生更高的位精度和更严格的.net兼容性,但速度要慢得多。

启用增量构建:用于开发构建。 它告诉IDE仅重建自上次构建以来已更改的组件,而不重建整个项目。 选中此选项可加快开发过程中的重建和部署,并在发布前取消选中此选项。

使用并发垃圾收集器:并发垃圾收集主要在您的应用程序上并发执行旧版本(我们称为主要收集)的收集-它在程序运行的同时发生。 当主收集完成时,收集器仅需要在最后很短的时间内暂停Mono线程。

因此,启用此选项可以减少大型集合的暂停时间,从而提高性能和响应速度,但会稍微增加内存使用量。

启用特定于设备的版本:通过仅定位当前选择的iOS设备,可以用于缩短部署时间。 选择此选项意味着Xamarin仅针对设备下拉列表中选择的特定设备进行构建,不会针对任何设备可能的所有体系结构进行构建,而仅针对当前所选设备的体系结构进行构建,这可以加快构建时间戏剧性的 不应将其用于发行版本配置。

其他mtouch参数:您可以使用此选项来指定一些其他mtouch命令,该命令将传递给应用程序捆绑工具。 例如,如果要在链接行为中选择LinkAll选项时跳过在System.Runtime程序集上的链接,只需传递“-linkskip = System.Runtime;” 。 有关mtouch的更多详细信息,请参见此处:http://docs.go-mono.com/?link=man%3amtouch(1)

优化PNG图像:此选项使用Apple改良的PNGCrush实用程序,通过将字节数据从RGB(A)转换为BGR并预乘alpha分量来优化PNG图像,以使图像在iOS设备上的加载速度更快。 有关适用于Mac的PNGCrush的更多详细信息,请参见:http://osxdaily.com/2013/08/15/pngcrush-mac-os-x/。