Marcos insertados en Xamarin.iOS

En este documento se describe cómo los desarrolladores de aplicaciones pueden insertar marcos de usuario en sus aplicaciones.

Con iOS 8.0, Apple ha hecho posible crear un marco insertado para compartir código entre las extensiones de aplicación y la aplicación principal de Xcode.

Xamarin.iOS 9.0 agrega compatibilidad para consumir estos marcos incrustados (creados con Xcode) en aplicaciones xamarin.iOS. No será posible crear marcos incrustados a partir de ningún tipo de proyectos de Xamarin.iOS, solo consumir marcos nativos existentes ().

Hay dos maneras de consumir marcos en Xamarin.iOS:

  • Pase el marco a la herramienta mtouch; para ello, agregue lo siguiente a los argumentos mtouch adicionales en las opciones de compilación de iOS del proyecto:

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

    Debe establecerse para cada configuración del proyecto.

  • Agregar referencias nativas desde el menú contextual

Haga clic con el botón derecho en Project y vaya a Agregar referencias nativas.

Seleccione Agregar referencias nativas en Visual Studio para Mac

Esto funcionará para todas las configuraciones.

En versiones futuras de Visual Studio para Mac y herramientas de Xamarin para Visual Studio será posible consumir marcos desde el IDE (sin editar manualmente los archivos de proyecto).

Puede encontrar algunos proyectos de ejemplo en GitHub

Limitaciones

  • Los marcos incrustados solo se admiten en proyectos unificados.
  • Los marcos incrustados solo se admiten en proyectos con un destino de implementación de al menos iOS 8.0.
  • Si una extensión requiere un marco incrustado, la aplicación contenedora también debe tener una referencia al marco; de lo contrario, el marco no se incluirá en el paquete de aplicaciones.

El entorno de ejecución Mono

Internamente, Xamarin.iOS aprovecha esta característica para vincular con entorno de ejecución Mono como marco de trabajo, en lugar de vincular el entorno de ejecución Mono estáticamente a cada extensión y a la aplicación de contenedor.

Esto se hace automáticamente si la aplicación contenedora es una aplicación unificada, contiene extensiones y la implementación de destino es iOS 8.0 o posterior.

Las aplicaciones sin extensiones se seguirán vinculando con el entorno de ejecución Mono estáticamente, ya que hay una penalización de tamaño por usar un marco si solo hay una aplicación que hace referencia a él.

El desarrollador de la aplicación puede invalidar este comportamiento agregando lo siguiente como argumento mtouch adicional en las opciones de compilación de iOS del proyecto:

  • --mono:static: vínculos con el entorno de ejecución Mono estáticamente.
  • --mono:framework: vínculos con el entorno de ejecución Mono como marco de trabajo.

Un escenario para vincular con el entorno de ejecución Mono como marco incluso para aplicaciones sin extensiones es reducir el tamaño del archivo ejecutable para superar las restricciones de tamaño que Apple aplica en el ejecutable. Como referencia, el entorno de ejecución Mono agrega aproximadamente 1,7 MB por arquitectura (a partir de Xamarin.iOS 8.12, pero varía entre versiones e incluso entre aplicaciones). El marco Mono agrega aproximadamente 2,3 MB por arquitectura, lo que significa que para una aplicación de arquitectura única sin ninguna extensión, al hacer que el vínculo de la aplicación con el entorno de ejecución Mono como marco se reduzca el archivo ejecutable en ~1,7 MB, pero se agrega un marco de ~2,3 MB, lo que da lugar a una extensión de aplicación más grande de ~0,6 MB.