绑定 iOS Swift 库

重要

我们当前正在调查 Xamarin 平台上的自定义绑定使用情况。 请参与此调查,告诉我们将来应该进行哪些开发工作。

iOS 平台及其本地语言和工具正在不断发展,并且已经有许多使用最新产品/服务开发的第三方库。 最大化代码和组件的重用性是跨平台开发的主要目标之一。 随着 Xamarin 开发人员在开发人员队伍中的受欢迎程度不断提高,重用 Swift 生成的组件的能力已变得越来越重要。 你可能已熟悉绑定常规 Objective-C 库的过程。 现在可以使用其他文档介绍绑定 Swift 框架的过程,以便 Xamarin 应用程序可以采用相同的方式使用它们。 本文档旨在介绍为 Xamarin 创建 Swift 绑定的高级方法。

高级方法

借助 Xamarin,可以绑定任何第三方本机库,使其可供 Xamarin 应用程序使用。 由于 Swift 是新语言,因此,为使用该语言生成的库创建绑定需要一些其他步骤和工具。 此方法涉及以下四个步骤:

  1. 生成本机库
  2. 准备 Xamarin 元数据,使 Xamarin 工具能够生成 C# 类
  3. 使用本机库和元数据生成 Xamarin 绑定库
  4. 在 Xamarin 应用程序中使用 Xamarin 绑定库

以下各节详细介绍了这些步骤。

生成本机库

第一步是准备好本机 Swift 框架并创建 Objective-C 标头。 此文件是自动生成的标头,该标头公开所需的 Swift 类、方法和字段,使它们通过 Xamarin 绑定库可供 Objective-C 并最终可供 C# 访问。 此文件位于以下路径下的框架中:<FrameworkName>.framework/Headers/<FrameworkName>-Swift.h。 如果公开的接口具有所有必需的成员,可跳到下一步。 否则,需要执行进一步的步骤来公开这些成员。 此方法将取决于你是否有权访问 Swift 框架源代码:

  • 如果你有权访问代码,则可使用 @objc 特性修饰所需的 Swift 成员,并应用一些其他规则,让 Xcode 生成工具知道这些成员应向 Objective-C 环境和标头公开。
  • 如果你没有源代码访问权限,则需要创建代理 Swift 框架,该框架包装原始 Swift 框架,并使用 @objc 特性定义应用程序所需的公共接口。

准备 Xamarin 元数据

第二步是准备 API 定义接口,绑定项目使用这些接口生成 C# 类。 这些定义可以通过 Objective Sharpie 工具和上述自动生成的 <FrameworkName>-Swift.h 头文件手动创建或自动创建。 生成元数据后,应手动对其进行验证和确认。

生成 Xamarin.iOS 绑定库

第三步是创建一个特殊的项目 - Xamarin.iOS 绑定库。 它引用上一步骤中准备的框架和元数据,以及相应框架所依赖的其他任何依赖项。 它还处理引用的本机框架与使用的 Xamarin.iOS 应用程序的链接。

使用 Xamarin 绑定库

第四步(也是最后一步)是在 Xamarin.iOS 应用程序中引用绑定库。 在面向 iOS 12.2 及以上版本的 Xamarin.iOS 应用程序中,启用本机库已足够。 对于面向较低版本的应用程序,需要执行一些附加步骤:

  • 添加 Swift dylib 依赖项,以支持运行时。 从 iOS 12.2 和 Swift 5.1 开始,该语言成为 ABI(应用程序二进制接口)稳定且兼容的语言。 正因如此,任何面向较低 iOS 版本的应用程序都需要包含框架使用的 Swift dylibs 依赖项。 使用 SwiftRuntimeSupport NuGet 包自动将所需的 dylib 依赖项包含在生成的应用程序包中。
  • 使用已签名的 dylibs 添加 SwiftSupport 文件夹,该文件夹在上传过程中由 AppStore 验证。 应使用 Xcode 工具对包进行签名并将其分发到 AppStore 连接,否则它将被自动拒绝。

演练

上述方法概括了为 Xamarin 创建 Swift 绑定所需的高级步骤。 在实践中准备这些绑定时,涉及许多较低级别的步骤,并需要考虑更多详细信息,包括适应本机工具和语言的更改。 目的是帮助你更深入地了解此概念和此过程中涉及的高级步骤。 有关详细的分步指南,请参阅 Xamarin Swift 绑定演练文档。