Xamarin es un montón de cosas:

Pero la principal y en la que se centra este video es la Xamarin Platform que se es un framework, un set de compiladores y en algun sentido un traductor de código... para finalidades de este video digamos que es un conjunto de librerías bibliotecas que permiten escribir aplicaciones nativas para iOS, WatchOS, tvOS, Android, Android Wear y Mac usando como lenguaje de programación C#.

Antes de seguir, veamos qué opciones tenemos para desarrollar apps multiplataforma:

Silo

Podemos usar la opción "silo" que no es nada más que el desarrollo tradicional: usar el lenguaje nativo de cada plataforma, lo cual implica tener acceso a todas las APIs que la plataforma nos da, así como elementos específicos de la interfaz gráfica... pero también tenemos que trabajar con entornos de desarrollo distintos, lenguajes distintos y es por esto que no podemos compartir código fácilmente.

Híbrido

También podemos hacer una app híbrida, como las que se pueden hacer con frameworks que usan JavaScript y HTML5, y mientras que esta es una solución buena para compartir código (inclusive el de la interfaz), estamos limitando el desempeño, la interfaz gráfica a lo que las algunas hojas de estilo puedan hacer y ni hablar del acceso a los recursos de la plataforma sobre la que funciona nuestra app.

Xamarin

Por último, tenemos la opción de Xamarin, que nos da algo similar al desarrollo tradicional: acceso a las APIs nativas y elementos de interfaz gráfica, solo que en este caso podemos usar un solo entorno (Xamarin Studio o Visual Studio) y, como ya lo dije, un solo lenguaje: C#. Usar un solo lenguaje no sólo implica tener que dominar un solo lenguaje para determinada aplicación, sino que también facilita compartir código entre varias plataformas.

Código compartido

Algunos ejemplos del código que se puede compartir son:

  • Algoritmos. Por ejemplo, si nuestra app hace uso de algún algoritmo para calcular o determinar algo, ya no es necesario escribirlo una vez en Java, otra en Objective-C y otra en C#
  • Comunicación con servicios externos. Si la app que estamos haciendo requiere conectarse a algún servicio externo, como un servicio web, no tenemos que preocuparnos por establecer la conexión usando los lenguajes, podemos hacerlo una vez en C# y reusarlo en múltiples proyectos.
  • Estructuras de datos o los llamados Modelos. Digamos que ya no tenemos que escribir la clase "Usuario" o "Venta" múltiples veces tomando en cuenta las especificaciones de cada plataforma, nuevamente usando C# podemos reutilizarla tantas veces como queramos.

En la mayoría de las apps se puede compartir entre el 70 y 90 por ciento de código, lo cual representa bastante tiempo de desarrollo que se pueden invertir en algún otro paso de la creación de la app.

Interfaces de usuario

Y bueno, llegamos a uno de los puntos de mucha confusión (que yo también tuve). Y es que cuando uno habla de un framework para desarrollar apps multiplataforma, también piensa en que se pueden compartir las interfaces gráficas, y, sin embargo, inicialmente no es así, ya que si usamos Xamarin.Androd o Xamarin.iOS aún tenemos que diseñar las interfaces en el lenguaje de cada plataforma: Storyboards o Xibs para iOS, XML o AXML para Android.

Xamarin.Forms

Hay una opción dentro de Xamarin llamada Xamarin.Forms, el cual sí permite crear las interfaces gráficas de una sola vez para varias plataformas, pero este tema merece su propio vídeo, que pronto estaré subiendo al canal, así que suscríbete.

Pero bueno, volviendo al tema: También hay otra cosa que he mencionado mucho en este video: Acceso a APIs nativas, y con esto me refiero a que con Xamarin podemos usar TODO, sí, TODO lo que iOS, Android y Mac nos ofrecen:

Desde CoreGraphics a MapKit en iOS, NFC a Text-to-speech en Android además de todas las cosas que se pueden hacer con C# actualmente, como la comunicación con System.Net, LINQ, además de poder usar paquetes descargados de NuGet y demás.

Si quieres ver ejemplos de proyectos hechos con Xamarin para Android e iOS y sus respectivas comparaciones con el desarrollo tradicional, puedes visitar estos posts:

Hablando de desempeño: Beneficiarse de estas dos cosas no sería nada si nuestra app va a terminar siendo lenta para el usuario por tener que usar una capa intermedia entre C# y la plataforma, ¿cierto? Pero con Xamarin esto no es así, ya que con Xamarin es como si estuviéramos escribiendo la app de modo tradicional, la final se termina compilando con las especificaciones para cada plataforma, como Ahead Of Time para iOS y Just In Time para Android.

Si están interesados, en el blog tengo varios posts acerca de Xamarin, los pueden encontrar en esta dirección: http://thatcsharpguy.com/tag/Xamarin.

No olviden compartir este video, darle un like y suscribirse al canal.