El pasado 17 de Octubre desde SVQXDG, grupo de desarrolladores Xamarin de Sevilla, se organizaba un evento donde vimos tanto las librerías de Bindings como Embedinnator-4000.
El material
Pude participar en el evento con una sesión hablando de Embeddinator-4000, una herramienta que permite generar librerías nativas tanto para iOS como para Android desde una librería .NET
Tienes la presentaciónutilizada disponible en SlideShare.
Vimos aspectos como:
Un introducción a la herramienta.
Instalación.
Uso básico.
Ejemplos con iOS.
Ejemplo con Android.
Puedes descargar todos los ejemplos utilizados desde GitHub:
Gracias a todos los asistentes, nos vemos en la próxima!
Los desarrolladores de Xamarin conocen las librerías de Bindings y la herramienta Sharpie. Hablamos de una herramienta de línea de comandos que permite automatizar la creación de una librería .NET que exponga las capacidades de la librería nativa. Sin embargo, existen una enorme cantidad de grandes librerías .NET utilizadas en Xamarin, ¿cómo podemos permitir utilizar librerías .NET desde una aplicación iOS o Android nativa?. En ocasiones arrancamos Apps Xamarin que tienen una base nativa o incluso hacemos una segunda App en Xamarin cuando ya existe una primera con código nativo. ¿No sería fantástico poder reutilizar?.
¿Qué es Embeddinator-4000?
Embeddinator-4000 es una herramienta de línea de comandos que permite convertir librerías .NET a librerías que pueden ser consumidas por otros lenguajes.
La herramienta toma una librería .NET y genera los enlaces necesarios para exponer la librería .NET como una librería nativa. El gran objetivo es permitir utilizar librerías .NET en otras plataformas con código y herramientas nativas. Sigue en desarrollo y por lo tanto, se siguen añadiendo más y más funcionalidad, actualmente permite convertir de .NET a C, C++, Objective-C (plataformas Apple) y Java (Android principalmente).
La librería .NET
Si la herramienta convierte una librería .NET a una librería nativa, necesitamos una librería .NET a utilizar, ¿no?. Vamos a utilizar una sencilla librería .NET que permite consumir la API Rest Netflix Roulette (permite obtener una película recomendada aleatoria de Netflix en base a una serie de filtros como la puntuación por ejemplo).
La librería desarrollada con código C# hace peticiones HTTP a la API utilizando HttpWebRequesty deserializamos Json con DataContractJsonSerializer.
Utilizando Embeddinator
Llega el momento de utilizar la herramienta. Pero antes de ello, repasemos los requisitos.
Visual Studio 2017 con SDK de Windows 10 (en Windows).
Vamos a convertir nuestra librería .NET a un .framework, librería nativa para utilizar en un proyecto nativo iOS en XCode. Comenzamos con la instalación de la herramienta. Existen dos opciones:
Utilizar un paquete ya preparado listo para la instalación.
Al concluir la herramienta, en la carpeta de salida (en nuestro ejemplo, se ha creado una carpeta llamada output) veremos lo siguiente:
Tenemos varios ficheros interesantes, a destacar:
.framework: Librería nativa preparada para utilizar en desarrollo nativo.
binddings: Código Objective-C con nuestra librería.
Probando el resultado
Creamos un nuevo proyecto iOS desde XCode:
Arrastramos el .framework al proyecto:
En las propiedades del proyecto, añadimos el framework recién copiado como Embedded Binaries:
Creamos una interfaz de usuario sencilla pero suficiente para poder probar que todo funciona como esperamos:
Una caja de texto donde el usuario puede introducir el nombre de una película, un botón para hacer la búsqueda y algunso textos donde mostrarle información como la descripción, la puntuación, etc.
Al pulsar el botón debemos hacer la búsqueda. En el controlador:
Trabajamos con la librería .NET pero utilizando en este caso código Objective-C.
El resultado:
Limitaciones
Mencionamos previamente que estamos ante una herramienta en desarrollo y cuenta con por supuesto algunas limitaciones:
No podemos utilizar dos librerías generadas con la herramienta en la misma aplicación.
Debido a la falta de metadatos en .NET para la gestión de nulidad, se generan NS_ASSUME_NONNULL_BEGIN.
Igualmente carece en estos momentos de soporte a tipos genéricos.
El soporte a Apple Watch está en desarrollo.
Etc.
Conclusiones
El pasado //BUILD fue un momento repleto de grandes anuncios. Entre ellos, uno de mis favoritos (y la herramienta estaba ya disponible en GitHub previamente) fue el anuncio y demostración de esta herramienta, Embeddinator-4000. Viene a cubrir una necesidad real que me he encontrado en más de una ocasión. Poder reutilizar código .NET en plataformas nativas al igual que ya se podía utilizar código nativo en Xamarin rompe una barrera en determinados momentos. Con mejoras en esta herramienta, Xamarin Live Player, Xamarin.Forms llegando a más plataformas (Linux incluido) o Forms Embedding el futuro a corto plazo se ve muy emocionante. Y a ti, ¿que te parece?.