Referencias nativas en proyectos de iOS, Mac y enlaces
Las referencias nativas permiten insertar un marco nativo en un proyecto de Xamarin.iOS o Xamarin.Mac o un proyecto de enlace.
Desde iOS 8.0, es posible crear un marco insertado para compartir código entre las extensiones de aplicación y la aplicación principal en Xcode. Al usar la característica de Referencia nativa, será posible consumir estos marcos incrustados (creados con Xcode) en Xamarin.iOS.
Importante
No será posible crear marcos insertados a partir de ningún tipo de proyectos de Xamarin.iOS o Xamarin.Mac, las referencias nativas solo permiten el consumo de marcos nativos existentes (Objective-C).
Terminología
En iOS 8 (y versiones posteriores),los Frameworks insertados se pueden incrustar de forma estática y dinámica. Para distribuirlos correctamente, debe convertirlos en Frameworks "fat" que incluyan todas sus Slices para cada arquitectura de dispositivo que quiera admitir con su aplicación.
Estático frente a Frameworks dinámicos
Los Frameworks estáticos se vinculan en tiempo de compilación donde los Frameworks dinámicos están vinculados en tiempo de ejecución y se pueden modificar sin volver a vincular. Si ha usado cualquier marco de terceros anterior a iOS 8, estaba usando un Frameworks estático que se ha compilado en la aplicación. Consulte la documentación de Programación de bibliotecas dinámicas de Apple para obtener más detalles.
Incrustado frente a. Marcos de sistema
Los Frameworks insertadas se incluyen en la agrupación de aplicaciones y solo son accesibles para su aplicación específica a través de su espacio aislado. Los Frameworks del sistema se almacenan en el nivel de sistema operativo y están disponibles para todas las aplicaciones del dispositivo. Actualmente, solo Apple tiene la capacidad de crear marcos de nivel de sistema operativo.
Fino frente a. Frameworks pesados
Thin Frameworks contiene solo el código compilado para una arquitectura de sistema específica en la que Fat Frameworks contiene código para varias arquitecturas. Cada código base específico de una arquitectura compilado en un Framework se denomina Slice. Por ejemplo, si tuviéramos un Frameworks compilado para las dos arquitecturas del simulador de iOS (i386 y X86_64), contendrá dos segmentos.
Si ha intentado distribuir este Frameworks de ejemplo con la aplicación, se ejecutaría correctamente en el simulador, pero se producirá un error en el dispositivo, ya que Framework no contiene ningún segmento específico del código para un dispositivo iOS. Para asegurarse de que un Frameworks funcionará en todas las instancias, también tendría que incluir segmentos específicos del dispositivo, como arm64, armv7 y armv7s.
Trabajar con Frameworks insertados
Hay dos pasos que deben completarse para trabajar con Frameworks incrustados en una aplicación de Xamarin.iOS o Xamarin.Mac: creación de un Frameworks Fat e inserción del Frameworks.
Creación de un Frameworks Fat
Como se ha indicado anteriormente, para poder consumir un Framework insertado en su aplicación, debe ser un Fat Framework que incluya todas las arquitecturas de sistema Slices para los dispositivos en los que se ejecutará su aplicación.
Cuando el Framework y la aplicación de consumo están en el mismo proyecto Xcode, esto no es un problema ya que Xcode construirá tanto el Framework como la aplicación usando la misma configuración de compilación. Dado que las aplicaciones de Xamarin no pueden crear Frameworks incrustados, esta técnica no se puede usar.
Para resolver este problema, se puede usar la herramienta de línea de comandos lipo
para fusionar dos o más Frameworks en un Fat Framework que contenga todos los Slices necesarios. Para obtener más información sobre cómo trabajar con el comando lipo
, consulte nuestra documentación sobre la Vinculación de bibliotecas nativas.
Inserción de Framework
El paso siguiente es necesario para insertar un marco en un proyecto de Xamarin.iOS o Xamarin.Mac mediante referencias nativas:
Cree una nueva o abra un proyecto existente de Xamarin.iOS, Xamarin.Mac o Binding.
En el Explorador de soluciones, haga clic con el botón derecho en el nombre del proyecto y seleccione Agregar>Agregar referencia nativa:
En el cuadro de diálogo Abrir, seleccione el nombre de Native Framework que desea insertar y haga clic en el botón Abrir:
El marco se agregará al árbol del proyecto:
Cuando se compila el proyecto, Native Framework se incrustará en el lote de la aplicación.
Extensiones de aplicaciones y Frameworks insertados
Internamente, Xamarin.iOS puede aprovechar esta característica para vincularse con el entorno de ejecución de Mono como marco (cuando el destino de implementación es >= iOS 8.0), lo que reduce significativamente el tamaño de la aplicación para las aplicaciones con extensiones (ya que el entorno de ejecución mono solo se incluirá una vez para toda la agrupación de aplicaciones, en lugar de una vez para la aplicación contenedora y una vez para cada extensión).
Las extensiones se vincularán con el entorno de ejecución de Mono como marco de trabajo, ya que todas las extensiones requieren iOS 8.0.
Aplicaciones que no tienen extensiones y aplicaciones destinadas a iOS
Resumen
En este artículo se ha tomado un vistazo detallado a la inserción de un Framework nativo en una aplicación de Xamarin.iOS o Xamarin.Mac.