Enlazar bibliotecas SWIFT de iOSBind iOS Swift libraries

La plataforma iOS, junto con sus lenguajes y herramientas nativos, está evolucionando constantemente y hay muchas bibliotecas de terceros desarrolladas con las últimas ofertas.The iOS platform, along with its native languages and tooling, is constantly evolving and there are plenty of third-party libraries that have been developed using the latest offerings. Maximizar la reutilización de código y componentes es uno de los principales objetivos del desarrollo multiplataforma.Maximizing code and component reuse is one of the key goals of cross-platform development. La capacidad de reutilizar los componentes creados con SWIFT ha vuelto siendo cada vez más importante para los desarrolladores de Xamarin, ya que su popularidad entre los desarrolladores sigue creciendo.The ability to reuse components built with Swift has become increasingly important to Xamarin developers as their popularity amongst developers continues to grow. Es posible que ya esté familiarizado con el proceso de enlace de bibliotecas de Objective-C normales.You may already be familiar with the process of binding regular Objective-C libraries. Hay documentación adicional ahora disponible que describe el proceso de enlace de un marco de trabajo de SWIFT, de modo que una aplicación de Xamarin pueda utilizarla de la misma manera.Additional documentation is now available describing the process of Binding a Swift Framework, so they are consumable by a Xamarin application in the same manner. El propósito de este documento es describir un enfoque de alto nivel para crear un enlace SWIFT para Xamarin.The purpose of this document is to describe a high-level approach to create a Swift Binding for Xamarin.

Enfoque de alto nivelHigh-level approach

Con Xamarin, puede enlazar cualquier biblioteca nativa de terceros para que pueda ser consumida por una aplicación de Xamarin.With Xamarin, you can bind any third-party native library to be consumable by a Xamarin application. SWIFT es el nuevo lenguaje y la creación de enlaces para las bibliotecas compiladas con este lenguaje requiere algunos pasos y herramientas adicionales.Swift is the new language and creating binding for libraries built with this language requires some additional steps and tooling. Este enfoque implica los cuatro pasos siguientes:This approach involves the following four steps:

  1. Compilar la biblioteca nativaBuilding the native library
  2. Preparación de los metadatos de Xamarin, que permite a las C# herramientas de Xamarin generar clasesPreparing the Xamarin metadata, which enables Xamarin tooling to generate C# classes
  3. Compilar una biblioteca de enlace de Xamarin con la biblioteca nativa y los metadatosBuilding a Xamarin binding library using the native library and the metadata
  4. Consumir la biblioteca de enlace de Xamarin en una aplicación de XamarinConsuming the Xamarin binding library in a Xamarin application

En las secciones siguientes se describen estos pasos con detalles adicionales.The following sections outline these steps with additional details.

Crear la biblioteca nativaBuild the native library

El primer paso es tener un marco de trabajo de SWIFT nativo preparado con el encabezado Objective-C creado.The first step is to have a native Swift Framework ready with Objective-C header created. Este archivo es un encabezado generado automáticamente que expone las clases, los métodos y los campos de SWIFT deseados, lo que les permite tener acceso a ambos C# objetivos-C y, en última instancia, a través de una biblioteca de enlace de Xamarin.This file is an autogenerated header that exposes desired Swift classes, methods, and fields making them accessible to both Objective-C and ultimately C# via a Xamarin binding library. Este archivo se encuentra en el marco de trabajo en la siguiente ruta de acceso: <frameworkname >. Framework/headers/<frameworkname >-SWIFT. h.This file is located within the framework under the following path: <FrameworkName>.framework/Headers/<FrameworkName>-Swift.h. Si la interfaz expuesta tiene todos los miembros necesarios, puede ir directamente al paso siguiente.If the exposed interface has all the required members, you can skip to the next step. De lo contrario, se necesitan pasos adicionales para exponer esos miembros.Otherwise, further steps are required to expose those members. El enfoque dependerá de si tiene acceso al código fuente de la plataforma SWIFT:The approach will depend on whether you have access to the Swift framework source code:

  • Si tiene acceso al código, puede decorar los miembros de SWIFT necesarios con el atributo @objc y aplicar algunas reglas adicionales para permitir que las herramientas de compilación de Xcode sepan que estos miembros deben exponerse al mundo de Objective-C y al encabezado.If you have access to the code, you can decorate the required Swift member(s) with the @objc attribute and apply a few additional rules to let the Xcode build tools know that these members should be exposed to the Objective-C world and the header.
  • Si no tiene acceso al código fuente, debe crear un marco de trabajo de proxy SWIFT, que incluye el marco de trabajo de SWIFT original y define la interfaz pública que requiere la aplicación mediante el atributo @objc.If you don't have the source code access, you need to create a proxy Swift framework, which wraps the original Swift framework and defines the public interface required by your application using the @objc attribute.

Preparación de los metadatos de XamarinPrepare the Xamarin metadata

El segundo paso es preparar las interfaces de definición de API, que se usan en un proyecto de C# enlace para generar clases.The second step is to prepare API definition interfaces, which are used by a binding project to generate C# classes. Estas definiciones pueden crearse de forma manual o automática mediante la herramienta Objective Sharpie y el archivo de encabezado de >-SWIFT. h de la< .These definitions could be created manually or automatically by the Objective Sharpie tool and the aforementioned autogenerated <FrameworkName>-Swift.h header file. Una vez que se generan los metadatos, debe comprobarse y validarse manualmente.Once the metadata is generated, it should be verified and validated manually.

Compilación de la biblioteca de enlace de Xamarin. iOSBuild the Xamarin.iOS binding library

El tercer paso consiste en crear un proyecto especial: biblioteca de enlace Xamarin. iOS.The third step is to create a special project - Xamarin.iOS binding library. Hace referencia a los marcos de trabajo y los metadatos preparados en el paso anterior junto con cualquier dependencia adicional en la que dependa el marco de trabajo correspondiente.It references the frameworks and the metadata prepared at the previous step along with any additional dependencies the respective framework is reliant upon. También controla la vinculación de los marcos nativos a los que se hace referencia con la aplicación de Xamarin. iOS de consumo.It also handles the linking of the referenced native frameworks with the consuming Xamarin.iOS application.

Usar la biblioteca de enlace de XamarinConsume the Xamarin binding library

El cuarto y el último paso es hacer referencia a la biblioteca de enlaces en una aplicación de Xamarin. iOS.The fourth and final step is to reference the binding library in a Xamarin.iOS application. Es suficiente para habilitar el uso de la biblioteca nativa dentro de las aplicaciones de Xamarin. iOS que tienen como destino iOS 12,2 y versiones posteriores.It is sufficient to enable the use of the native library within Xamarin.iOS applications targeting iOS 12.2 and above. En el caso de las aplicaciones que tienen como destino una versión anterior, se requieren algunos pasos adicionales:For those applications targeting a lower version, some additional steps are required:

  • Agregue las dependencias de SWIFT dylib para la compatibilidad en tiempo de ejecución.Add Swift dylib dependencies for runtime support. A partir de iOS 12,2 y SWIFT 5,1, el idioma se convirtió en ABI (interfaz binaria de aplicación) estable y compatible.Starting from iOS 12.2 and Swift 5.1, the language became ABI (application binary interface) stable and compatible. Este es el motivo por el que cualquier aplicación que tenga como destino una versión inferior de iOS debe incluir las dependencias de SWIFT dylibs utilizadas por el marco.That's why any application targeting a lower iOS version needs to include Swift dylibs dependencies used by the framework. Use el paquete NuGet SwiftRuntimeSupport para incluir automáticamente las dependencias de dylib necesarias en el paquete de aplicación resultante.Use the SwiftRuntimeSupport NuGet package to automatically include required dylib dependencies into the resulting application package.
  • Agregue la carpeta SwiftSupport con dylibs firmado, que se valida mediante el AppStore durante el proceso de carga.Add SwiftSupport folder with signed dylibs, which is validated by the AppStore during uploading process. El paquete debe estar firmado y distribuido a AppStore Connect con las herramientas de Xcode; de lo contrario, se rechazará automáticamente.The package should to be signed and distributed to the AppStore connect using Xcode tools, otherwise it will be automatically rejected.

TutorialWalkthrough

En el enfoque anterior se describen los pasos de alto nivel necesarios para crear un enlace SWIFT para Xamarin.The approach above outlines the high-level steps required to create a Swift Binding for Xamarin. Hay muchos pasos de nivel inferior implicados y otros detalles que se deben tener en cuenta al preparar estos enlaces en la práctica, incluida la adaptación a los cambios en las herramientas y los lenguajes nativos.There are many lower-level steps involved and further details to consider when preparing these bindings in practice including adapting to changes in the native tools and languages. La intención es ayudarle a obtener una comprensión más profunda de este concepto y de los pasos de alto nivel implicados en este proceso.The intent is to help you to gain a deeper understanding of this concept and the high-level steps involved in this process. Para obtener una guía paso a paso detallada, consulte la documentación del tutorial de enlace de Xamarin SWIFT .For a detailed step-by-step guide, refer to the Xamarin Swift Binding Walkthrough documentation.