Xamarin es una plataforma basada en .NET y C# que permite desarrollar aplicaciones nativas para dispositivos móviles. La empresa fue fundada en 2011 por Nat Friedman y Miguel de Icaza. Ambos se conocieron trabajando en Microsoft y posteriormente lideraron el proyecto Mono, una implementación multiplataforma y libre del .NET Framework.

¿Por qué app nativas?

Cuando nos proponemos de desarrollar una aplicación para dispositivos móviles podemos elegir entre 3 tipos de aplicaciones. Los requisitos de la app y los recursos de los que disponemos influirán en nuestra elección:

  1. Aplicaciones web: opción más sencilla basada en el desarrollo de aplicaciones que se ejecutan en el navegador de los dispositivos. Las tecnologías HTML, Javacript y CSS permiten desarrollar aplicaciones con “Responsive Web Design”, lo que nos asegura que nuestra aplicación se adapte a cualquier dispositivo.
    Las desventajas de esta opción es que las aplicaciones web ofrecen peor experiencia de usuario que las aplicaciones nativas, no pueden aprovechar las características y funcionalidades propias de cada dispositivo y requieren una conexión de datos para ser accesibles al usuario.

  2. Aplicaciones híbridas: este tipo de aplicaciones tienen la ventaja de ser multiplataforma. Con un solo desarrollo podemos hacer que nuestra aplicación funcione en diferentes plataformas de dispositivos móviles. Otro punto a favor es que podemos aprovechar nuestros conocimientos de HTML, Javascript y CSS para desarrollar este tipo de aplicaciones. Las desventajas de esta opción son un peor rendimiento que las aplicaciones nativas ya que estas utilizan lenguajes y motores intermedios en tiempo de ejecución. Otra desventaja es que el acceso a las características y funcionalidades propias de cada dispositivo es limitado.

  3. Aplicaciones nativas: las aplicaciones nativas están optimizadas para la plataforma móvil para la que se desarrolla, pudiendo aprovechar las características y funcionalidades propias de cada dispositivo para ofrecer una mejor experiencia de usuario y un mejor rendimiento que el resto de opciones. La desventaja de esta opción es el coste de desarrollo, ya que tenemos que desarrollar una aplicación diferente para cada plataforma. Esto supone mayor tiempo de desarrollo y tener conocimiento de los diversos lenguajes y entornos de desarrollo específicos para cada plataforma.

Modelo Xamarin

El modelo de Xamarin se basa en el desarrollo de aplicaciones nativas para cada plataforma móvil. Esto nos permite desarrollar aplicaciones con interfaz de usuario nativas, con rendimiento nativo y tener acceso a toda la potencia y funcionalidad del dispositivo móvil.
Para mitigar el coste de desarrollo de una aplicación nativa, Xamarin nos ofrece un único lenguaje y entorno de desarrollo para desarrollar aplicaciones para las diferentes plataformas. Así nos ahorramos trabajar con diferentes entornos, herramientas y lenguajes específicos para cada plataforma.

alt text

Ventajas del desarrollo con Xamarin

Xamarin nos ofrece un conjunto de herramientas para construir, testear y monitorizar nuestras aplicaciones móviles.

alt text

Para construir nuestras aplicaciones podemos utilizar el IDE propio de Xamarin (Xamarin Studio) o Visual Studio en el caso de que seamos desarrolladores de aplicaciones .NET. Con el plugin de Xamarin para Visual Studio seremos capaces de construir aplicaciones para iOS, Android y Windows Phone desde un solo entorno, y disponer a la vez de todas las herramientas con las que cuenta Visual Studio: librerías y componentes, Team Foundation Server, herramientas de cobertura de código, de prueba y de análisis de rendimiento.
Además, tanto si usamos Xamarin Studio o Visual Studio podemos aprovecharnos de la plataforma .NET, pudiendo utilizar cualquier código .NET que sea portable. Esta opción además nos permitirá reutilizar código entre las diferentes versiones de nuestra aplicación nativa para cada una de las plataformas.
Además podemos aprovecharnos de toda la potencia de C# 5.0 para escribir nuestro código: soporte de LINQ, delegados y eventos, expresiones lambda, tareas asíncronas, etc.

alt text

Para testear nuestras aplicaciones Xamarin nos ofrece una plataforma en la nube donde podemos probar nuestras aplicaciones en cualquier dispositivo y sistema operativo. Con Xamarin Test Cloud podemos generar nuestras pruebas automáticas para testear nuestras aplicaciones en cientos de dispositivos y versiones de las diferentes plataformas. De este modo podemos asegurarnos que nuestra aplicación funciona correctamente para todos los dispositivos y sistemas operativos antes de publicarla.

alt text

Finalmente Xamarin nos ofrece una herramienta para poder monitorizar nuestras aplicaciones nativas. Xamarin Insights es una herramienta que nos permite monitorizar el uso de nuestras aplicaciones por parte de los usuarios. De este modo podemos detectar todas las incidencias que producen durante el uso de la aplicación y solucionarlas rápidamente.

alt text

Los 2 enfoques de Xamarin

Xamarin nos ofrece dos opciones para desarrollar nuestras aplicaciones nativas con C# y .NET Framework. El enfoque tradicional de Xamarin para desarrollar aplicaciones consiste en desarrollar una aplicación diferente para cada una de las plataformas: iOS, Android i Windows Phone. La segunda opción que tenemos es desarrollar nuestras aplicaciones con Xamarin.Forms, de este modo solamente desarrollamos una sola aplicación para todas las plataformas.

Enfoque tradicional

Como hemos comentado si desarrollamos aplicaciones nativas con el enfoque tradicional de Xamarin debemos construir una aplicación diferente para cada plataforma. En este caso Xamarin nos ofrece desde un entorno con C# y .NET acceso completo a todas las API’s y controles nativos de cada plataforma (iOS y Android). De este modo, con Xamarin, podemos construir las mismas aplicaciones que con los entornos de cada fabricante, XCode y ObjectiveC para Apple, y Explipse y Java para Android.
La ventaja que nos ofrece Xamarin, aparte de trabajar con un solo entorno, es la posibilidad de compartir código entre las diferentes plataformas gracias a las Portable Class Libraries (PCL) de .NET. En nuestros desarrollos podremos compartir entre las diferentes plataforma todo el código asociado a lógica de interfaz de usuario de nuestra aplicación: nuestro modelo de datos, mantenimiento de los datos a mostrar, gestión de interacción y navegación, acceso a servicios web para obtener los datos, acceso a base de datos dentro del mismo dispositivo como SqlLite, etc.
Con este enfoque podemos llegar a compartir, según los requisitos y tipo de aplicación, entre el 30% y el 60% del código de nuestra aplicación entre las diferentes plataformas.

alt text

Este enfoque es el más indicado cuando:
– Nuestra aplicación requiere una interacción con el usuario muy específica y dependiente de cada plataforma
– Nuestra aplicación requiere un alto cumplimiento de las guías de diseño de cada fabricante
– Nuestra aplicación requiere utilizar funciones específicas propias de las API’s de cada plataforma
– Cuando es más importante construir una aplicación con una interfaz de usuario específica para cada plataforma que la reutilización del máximo porcentaje de código posible

Xamarin Forms

Otra opción que tenemos para desarrollar nuestras aplicaciones nativas con Xamarin es Xamarin Forms. Este enfoque nos permite desarrollar una única aplicación que funcionará en todas las plataformas (iOS, Android y Windows Phone). Xamarin Forms, a partir de nuestra única versión, acabará generando un aplicación nativa para cada plataforma, cada una con sus controles de interfaz de usuario propios y accediendo a la API’s específicas de cada fabricante.
Para desarrollar la interfaz de usuario usaremos XAML y un conjunto de controles de interfaz de usuario propios de Xamarin.Forms. Estos controles acabaran traduciéndose a los controles específicos de cada plataforma.
Con este enfoque podemos llegar a compartir hasta más del 90% del código de nuestra aplicación.

alt text

Este enfoque es el más adecuado para:
– Aplicaciones orientadas a entrada de datos
– Prototipos y pruebas de conceptos
– Aplicaciones que requieren poca funcionalidad específica de cada plataforma
– Aplicaciones donde la importancia radica más en la reutilización de código que una interfaz de usuario específica para cada plataforma

Conclusión

Xamarin nos ofrece una plataforma basada en C# y .NET Framework para construir, testear y monitorizar nuestras aplicaciones para dispositivos móviles con las siguientes ventajas:
– Un solo entorno y lenguaje de programación para todas las plataformas
– Posibilidad de aprovechar toda la potencia de Visual Studio
– Interfaz de usuario nativa
– Rendimiento nativa
– Acceso a toda la API nativa de cada plataforma