El desarrollo de plataformas móviles tiene un gran problema hoy en día. Cuando nos fijamos en el mercado actual, es fácil ver que hay tres actores principales. Apple con y OS, Google con Adnroid y Microsoft con Windows.
IOS utiliza objective C o Swift, Android utiliza Java y Windows utiliza C# y XAML.
Entre estas tres plataformas, casi no hay reutilización de código posible. Esto una pena, ya que en la mayoría de los casos, las empresas quieren cubrir dos o tres plataformas, por lo menos, así que tienen que escribir básicamente la misma funcionalidad varias veces por cada plataforma.
Por lo general se empezará con el desarrollo de Android, cuando esté lista se comenzará con el desarrollo de IOs, luego con la tercera plataforma Windows. ¿Con esto que sucede? Que no terminamos duplicando nuestro código y no hemos reutilizado casi nada. Y sin embargo, una gran cantidad de la aplicación es idéntica entre unas y otras. (acceso de servicios, las clases del modelo, el acceso a los archivos… y así sucesivamente).
Pero bueno, ¡podemos decir que nuestras aplicaciones son nativas! Las apps tienen todas las características de la plataforma, así como elementos de interfaz de usuario. En términos de rendimiento, son los mejores porque estamos escribiendo el código en la lengua nativa en cada app.
La empresa tiene 3 equipos para el desarrollo de cada plataforma o bien un equipo que es la ostia y ha desbloqueado todos los logros del desarrollo móvil, su ego está por las nubes y ya ha pueden agregar nuevas las habilidades en LinkedIn.
Pero todo este logro.. tiene la gran desventaja de ser caro. ¿Cuanto código has reutilizado? CERO
Y ahora.. cual es el coste de implementar un simple cambio?? Pues el coste lo multiplicas por tres!! Siempre y cuando no se deje alguna plataforma de lado como sucede con Windows.
En temas de mantenimiento de reparación de un bug, sucede lo mismo. Tienes que arreglarlo en las tres.
Esto para las empresas no es que sea muy agradable.
Que opciones hay?
Pues tenemos HTML+CSS+JS como Iónic o Cordova. En el que básicamente costruyes un sitio web movil encapsulado en un paquete de aplicación que le permite utilizar algunas características nativas del SO. Con esto ganamos claramente en que escribimos el código una vez y lo compartimos para las tres. Pero esto tiene desventajas. El rendimiento no es perfecto. No olvidemos que es un sitio web por lo que el código no es nativo y no es perfecto.Otra desventaja clara es que no siempre se tienen acceso a todas las características nativas lo cual puede que no se adapte a la solución que necesitas.Pero vamos esta opción ahorrará mucho tiempo y dinero. Siempre y cuando se adapte al desarrollo que queremos realizar.
Xamarin es una compañía establecida en mayo de 2011 de la plataforma de por los ingenieros que crearon Mono, una implementación libre desarrollo .NET para dispositivos Android, iOS y GNU/Linux.
Xamarin trata de combinar lo mejor de ambos mundos. Usando xamarin vamos a tener apps nativas (con acceso a todas las características nativas y controles de interfaz). Y podremos reutilizar el código entre las 2 plataformas. Y además! Un solo lenguaje! C# por lo que si en tu empresa tienes un equipo de desarrollo en .NET lo que ya tienen adelantado.
C# para todo
Covertura del código 100% en IOS, Android yWindows
No todo es un camino de rosas: Hay que dejar claro que hace realmente Xamarin.- No se comparte la UI (excepto en forms): Es decir, tenemos los XML para Androd, los storyboards para IOs y XAML para WindowsPhone. Por lo que la interfaz de usuario tendremos que igualmente construir una por cada plataforma (lógico, de lo contrario no podríamos acceder a todos los elementos de la interfaz nativa).
-Curva de aprendizaje puede ser un poco costosa. Estamos desarrollando para 3 plataformas por lo que es bastante esencial conocer las 3 y sus características. Como se navega en Android, el ciclo de ejecución de una actividad, y lo mismo para IOs y Windows.
-Precio: Ei espera… esto ahora es gratis! Desde la compra de Microsoft por Xamarin ahora es completamente gratis utilizarlo. Tienes licencia totalmente gratuita incluida con Visual Studio Community. Lo único que te costará dinero será tener tu Mac y pagar la licencia de desarrollo de 99$ anuales. Para Windows es gratuita y para Android son 15$ de por vida
PCL:
código embebido
Refactorización
fácilmente referenciado
Demo con un proyecto usando PCL y tirando Windows y Android
Shared Project:
código compartido
más felixibilidad
clausulas precompiladas
Misma demo pero usando PCL y tirando Windows y Android
Estructura básica de como sería usar un PCL referencando a los diferentes proyectos e implementando las interfaces de dependencias para acceder a código específico de cada pltaforma, como puede ser acceso al lector de huella, sensores.. Etc..
Demo PCL:
- XantarDevPCL
1- Crear AppBlank PCL
2- Agregar App Universal Windows y agregarle referencia del PCL
3- Crear class Vermut
4- Crear class ServiceVermut
5- Crear metodo en servicio
6- llamar desde pltaformas
Demo Shared:
- DemoHappiness (xamarin cognitive):
1- Crear App Blank Shared
2- Agregar referencias de la shared en cada proyecto
3- Agregar referencia al project Oxford
4- compilar
5- Modificar main en android
6- modificar ui
Demo Xamarin Forms:
- Happinsess compartida