Xamarin.iOS 中的嵌入式框架

本文档介绍应用程序开发人员如何在自己的应用中嵌入用户框架。

自 iOS 8.0 起,Apple 实现了在 Xcode 中创建一个嵌入式框架,用于在应用扩展和主应用之间共享代码。

Xamarin.iOS 9.0 增加了对在 Xamarin.iOS 应用中使用这些嵌入式框架(使用 Xcode 所创建)的支持。 今后无法从任何类型的 Xamarin.iOS 项目创建嵌入式框架,只能使用现有的本机 (Objective-C) 框架创建。

可以通过两种方法在 Xamarin.iOS 中使用框架:

  • 通过将以下代码添加到项目的“iOS 生成”选项中的其他 mtouch 参数,将框架传递给 mtouch 工具:

    --framework:/Path/To/My.Framework
    

    必须为每个项目配置进行此设置。

  • 使用上下文菜单中的“添加本机引用”

右键单击项目并浏览到“添加本机引用”

Select Add native references in Visual Studio for Mac

这适用于所有配置。

在 Visual Studio for Mac 和 Xamarin Tools for Visual Studio 的未来版本中,可以从 IDE 中使用框架(无需手动编辑项目文件)。

github 上提供了一些示例项目

限制

  • 嵌入式框架仅在统一项目中受支持。
  • 嵌入式框架仅在部署目标至少为 iOS 8.0 的项目中受支持。
  • 如果某个扩展需要嵌入式框架,容器应用还必须有对框架的引用,否则该框架将不会包含在应用程序包中。

Mono 运行时

在内部,Xamarin.iOS 利用此功能作为框架与 Mono 运行时链接,而不是将 Mono 运行时静态链接到每个扩展和容器应用。

如果容器应用是包含扩展且目标部署为 iOS 8.0 或更高版本的统一应用,此操作会自动完成。

没有扩展的应用仍会通过静态方式链接到 Mono 运行时,因为如果只有一个应用引用某个框架,使用该框架就会受到大小限制。

应用开发人员可以通过在项目的 iOS 生成选项中添加以下内容作为附加 mtouch 参数来重写此行为:

  • --mono:static:与 Mono 运行时静态链接。
  • --mono:framework:作为框架与 Mono 运行时链接。

即使对于没有扩展的应用,也有一个场景可以作为框架与 Mono 运行时链接,即减小可执行文件的大小,以克服 Apple 对可执行文件强制实施的任何大小限制。 作为参考,Mono 运行时为每个体系结构增加了大约 1.7MB 的大小(从 Xamarin.iOS 8.12 起,不过各个版本甚至应用之间也有所不同)。 Mono 框架为每个体系结构增加了大约 2.3MB,这意味着对于没有任何扩展的单体系结构应用,使应用作为框架与 Mono 运行时链接会将可执行文件压缩大约 1.7MB,但增加一个大约 2.3MB 的框架后,应用总体上增加了大约 0.6MB。