jueves, 21 de mayo de 2015

PhoneGap vs Appcelerator Titanium vs Xamarin

 El siguiente análisis se realizó con el objetivo de tener una referencia sobre las herramientas de desarrollo Mobile utilizadas por los equipos de desarrollo en la actualidad a fin de poder evaluar las virtudes y desventajas de los diferentes enfoques.

 “Podremos desarrollar aplicaciones para las diferentes plataformas  window phone, IOS , Android logrando reducir costos de construcción y  tiempos de desarrollo , pero será difícil alcanzar  el rendimiento , tamaño de las aplicaciones , la vinculación con el sistema operativo que logra el desarrollo nativo para las diferentes plataformas.”
La necesidad puntual del proyecto que se quiera llevar acabado indicara que costos estamos dispuestos a asumir.

En la actualidad hay varias herramientas para desarrollo multiplataforma cada una de ellas como una cuestión de venta indican entre líneas pequeñas “Generadores de código nativo” cuando desde el punto de vista técnico algunas no se acercan nada a lo esperado de una aplicación nativa.
En esta ocasión vamos a analizar en modo resumen la más importantes o difundidas entre comunidades de desarrollo de dispositivos móviles con sus diferentes enfoques de construcción multiplataforma existentes:
  • ·         PhoneGap
  • ·         Appcelerator  Titanium
  • ·         Xamarin

  

Phonegap



La construcción se realiza con la utilización de hitos tecnológicos como HTML, CSS, JAVASCRIPT y al momento de empaquetar para alguna plataforma utilizamos el contenedor phonegap que encapsula todo el proyecto web  en un binario para la plataforma en cuestión.

Los programadores para simular la interfaz de las diferentes plataformas utiliza CSS y para lograr una dinámica de funcionamiento se utilizan muchas librerías jquerymobile , kendo , sencha , entre otros.
Un tema importante es el hecho de que nos proporciona una librería para cada plataforma que es la encargada de interaccionar con los correspondientes SDK. 

Lo preocupante es que los desarrollos de estas librerías se realizan por separado  por lo que es probable que en alguna plataforma se pueda contar con funcionalidades que en otra no están disponibles.

Uno de los aspectos que reduce el rendimiento de las aplicaciones desarrolladas con esta herramienta es el hecho de que cada aplicación al ser utilizada referencia al engine del navegador de nuestro dispositivo para lograr ser operativa cada vez que la llamamos en nuestro teléfono, algo que claramente afecta el rendimiento de las aplicaciones.

Por otro lado en numerosos foros hablan de los problemas que manifiesta la herramienta a la hora de acceder al hardware de los dispositivos dado que para algunos dispositivos funciona de manera aceptable y para otro en muchos casos se recurre a desarrollos nativos externos para lograr alcanzar la necesidad.

Ventajas
·         Los tiempos desarrollo son más cortos en algunos casos,  en muchos casos ya tenemos una versión operativa web del producto por lo que en este caso se trabaja en adatar el frontend lo que reduce tiempos de construcción.
·         Los costos del desarrollo son más bajos comparado con el valor hora de programadores nativo mobile, la curva de aprendizaje de phoneghap para un desarrollador web es corta por utilizar los mismos hitos de desarrollo, motivo por el que quizás no tengamos que salir a contratar especialistas sino reutilizamos la mano de obra existente.
·         La curva de aprendizaje es corta.
·         Es gratis
·         Hay mucha documentación
·         El conseguir profesionales idóneos es más fácil.
Desventaja
·         Se debe trabajar con otros framework para lograr interfaces similares a la de las plataformas para la cual estamos desarrollando y por supuesto en algunos casos creamos un frontend para cada plataforma con el objetivo de lograr interfaces en armonía con la plataforma para la cual estamos desarrollando.  En pocas palabras la interfaz de las aplicaciones Android no es igual a las de iphone.
·         No tiene rendimiento nativo al pasar siempre por el engine del navegador,  al ser dependiente del navegador de nuestro equipo produce claramente una dependencia en cada ejecución con un software intermediario, en algunos casos se nota y en otro solo al iniciar.
·         Problemas a la hora de interaccionar con el hardware del teléfono.
·         En casos particulares no será posible obtener en algunos casos una misma funcionalidad para diferentes plataformas, ya lo mencionamos con anterioridad existen librerías de acceso a los sdk que evolucionan en paralelo.

Nota Final: Presenta grandes problemas a la hora de desarrollar para IOS por lo dificultoso que se vuelve lograr simular UI e funcionalidad en una aplicación web.  Recordemos que hablamos de una aplicación web encapsulada en un binario que le permite existir en un dispositivo de una plataforma determinada por lo que no podemos pedir que alcance un rendimiento nativo.  Otro problema detectado por equipos de desarrollo es el tamaño de los empaquetados que en un muchos casos difiere en mucho del generado con una herramienta nativa, lo que produce muchas veces problemas a la hora de subir a algún store por las limitaciones impuestas por cada plataforma.



Appcelerator Titanium


Esta herramienta es otra alternativa a la hora de realizar un desarrollo multiplataforma de una manera un poco más híbrida dado que el desarrollo tiene parte nativa.

Debemos  olvidar HTML , DOM, CSS y las librerías javascript desarrolladas para navegadores como jquery , molotools..etc. Uno de los puntos a favor que tiene es la capacidad de poder manipular controles nativos para las diferentes plataformas y gestionar la lógico por medio de la utilización de javascript.

El trabajo de la interfaz gráfica se realiza por medio de una librería puente entre nuestra lógica javascript y los controles nativos de las diferentes plataformas.

Nota: Es  claro que genera aplicaciones resultante con mayor performance por acercarse a un escenario hibrido (controles nativos + javascript compilado).

Como ¿?  Una vez hemos terminado la aplicación en código en Javascript, este es transformado y compilado.  Posteriormente, cuando se arranca la aplicación en el dispositivo móvil, el código se ejecuta dentro de un motor Javascript que todos los dispositivos tienen, ya sea el JavaScriptCore en iOS o Mozilla Rhino en Android/BlackBerry.
Los programadores java de seguro se sentirán mas cómodos con el entorno de trabajo dado que estaba basada en un eclipse (ide de trabajo java)  con las modificaciones necesarias para lograr la herramienta deseada.
Alguna de las cosas de las que se quejan los desarrolladores es que estas librerías puentes javascript como todo se desarrollan y mantienen por separado por lo que nuevamente podemos lograr funcionalidades para una plataforma y quizás no este disponible para otra.

Ventajas
·         Desarrollo para múltiples plataformas
·         Muchas documentaciones
·         Mejor rendimiento al ser desarrollos híbridos entre javascript y controles nativos.
·         Versión gratuita
Desventajas
·         Problemas de funcionamiento en la ide que al parecer se muere dado que utiliza muchos recursos en algunos casos.
·         Es una comunidad muy chicas de desarrolladores por lo que hay pocos ejemplos.
·         Require Mac y XCode para aplicaciones iOS


XAMARIN



La tecnologías de Xamarin nos da una muy buena alternativa para el desarrollo móvile, apoyándonos sobre la tecnología .NET (a través de mono) para mejorar la productividad de las aplicaciones que desarrollamos.



Xamarin por otro lado promueve al igual que muchas herramientas que analizamos como generador de aplicaciones nativas.
 Sera verdad ¿? Podríamos decir casi casi
Su esquema de desarrollo se base en desarrollar interfaz de usuario para cada plataforma y desarrollar  la lógica de negocio utilizando c#.
Nota: Una librería portable (PCL) es una librería cuyo código y dependencias externas pueden ser llevadas a diversas plataformas sin perder funcionalidad.
Para decirlo de una manera práctica nosotros tendremos nuestra aplicación net corriendo sobre mono runtime embebido de nuestra aplicación y para ciertas tareas tendremos comunicaciones con api nativa Android, IOS ..etc.
Entonces?  Tenemos interfaces nativas para cada plataforma y una lógica desarrollada con c# que interacciona con api nativas ios o android cuando lo necesita, pero no deja ser un ensamblado net que se comporta como un código nativo y se comunica con código nativo. 
Como lo podemos observar Xamarin corrige algunos problemas que tiene algunas herramienta como ser el hecho de que no se preocupa para estandarizar la Interfaz  dado que esto lleva a interfaces pobres y limitadas
Ventajas
·         Ide potente
·         Propone un ambiente de test  para diferentes dispositivos Tablet y teléfonos donde se puede probar el funcionamiento.
·         Genera código nativo
·         Muy buen rendimiento de las aplicaciones.
·          
Desventaja
·         Algunos desarrollados con la herramienta documentaron problemas con el tamaño del empaquetado final, como sabran todo los store fijan un tope para el espacio que puede tener una aplicación.
·         No hay mucho soporte en la red dado que es una herramienta relativa nueva.
·         Es necesario tener una mac para poder realizar la compilación para IOS
·         El ambiente de test es pago.
·         Algunos proyectos reportaron problemas en un pequeño delay al inicio de toda aplicación que es mas largo de lo común.
·         No todos los controles visuales nativos de cada plataforma se encuentran disponibles para su uso.
·         La herramienta de desarrollo todavía presenta algunos problemas.


En conclusión llegada la necesidad podremos elegir algunas de estas herramientas que se acerque al rendimiento, estética, funcionalidad  de aplicaciones nativas.


1 comentario:

  1. Excelente análisis, muy buen aporte. Definitivamente la de mejor relación de rendimiento es Titanium.

    ResponderEliminar