• slidebg1

App híbrida vs App nativa


Abaratar costes con una aplicación híbrida, ¿a qué precio?

Muchos se plantean qué es mejor: ¿una app híbrida, aprovechando el código que hago una sola vez, o hacer dos apps y duplicar código: una app iOS y una app Android? Otros tienen ya un equipo de desarrollo web, o .Net / C#, y dicen ¿qué es mejor, crear un equipo nuevo, contratar un equipo especializado en el desarrollo de apps, o aprovechar mi equipo y hacer una app (híbrida) utilizando los lenguajes y herramientas a las que ya están acostumbrados?

Para dar una respuesta razonada a la pregunta app híbrida o nativa, necesitamos saber los pros y los contras de cada solución. (nota: si estás interesado únicamente en el desarrollo web, introduciendo la web en un cascarón e incrustándola en una app, te recomiendo un post en el que ya tratamos el tema en http://www.develapps.com/es/noticias/web-responsive-vs-app-nativa-segunda-ronda).

La primera variable a despejar es: ¿quiero una app que pueda y vaya a crear y mantener yo? Si tienes una empresa y desarrollas en un lenguaje (por ejemplo .Net) hay frameworks que permiten programar en el lenguaje. En el caso de .Net, está Xamarin (https://www.xamarin.com/platform) que compró en 2016 Microsoft y publicó como código libre tras su compra.

Sigamos con el ejemplo de Xamarin. ¿Me sirve para crear una sola app para iOS y Android? En teoría, Xamarin permite crear una app y publicarla en iOS, Android e incluso en Windows Phone.

Ya que tenemos el código fuente de Xamarin, podemos ver la actividad que tienen ambos proyectos de código libre:

 

Contribuciones al código iOS desde que se Xamarin iOS se hizo público.

 

Contribuciones al código Android desde que Xamarin Android se hizo público.

A simple vista, vemos que la plataforma de iOS tiene muchas más contribuciones (el eje Y de iOS está alrededor de 100, mientras que el de Android está alrededor de 20 contribuciones).

 

Esto muestra un par de problemas:

- ¿Puede quedarse la plataforma de Android desfasada? ¿Es posible que las apps Android tengan un resultado inferior?

- ¿Serán mis apps “iguales”? Para que mi código sea el mismo para iOS y Android, alguien debe gestionar todas las contribuciones y tener una línea maestra. ¿Qué ocurre si una función evoluciona y hace que la app que implemento deja de funcionar?

 

Con respecto al primer problema, en efecto Xamarin Android ofrece un número menor de componentes nativos Android que los que ofrece Xamarin iOS para la plataforma respectiva. 

Además de los dos problemas que he dicho, tenemos un riesgo grave: si Apple o Android introducen una actualización y mi app desarrollada con el framework deja de funcionar a causa de las librerías, tengo UNA SOLA OPCIÓN: ESPERAR.

Siguiendo con Xamarin, hay más riesgos que conllevamos: recuerdo que un amigo que desarrollaba con Xamarin tuvo un problema serio. Su app no compilaba correctamente y se subía mal a la tienda. Sin embargo, al pasar por la validación de la app en Xamarin (que en principio simplemente “suplantaba” la validación de Apple), siempre le decía que la app estaba correctamente compilada. Esto le hizo perder semanas hasta la publicación, ya que el error no saltaba hasta el momento de la revisión, que entonces tardaba entre dos semanas y un mes.

Si quieres desarrollar tu app, te recomiendo que lo hagas con desarrollo nativo. Si es una app que tienes “por tenerla” y no te importa que esté un par de meses fuera de juego (en el peor de los casos, claro), soluciones híbridas fiables pueden ayudarte.

¿Y cuánto tendré que desarrollar? ¿Me servirá el 100% del código?

A ver… el 100%... claramente no. La realidad es que podrás reutilizar modelos de datos… y el resto depende del framework. Cuando utilizábamos Appcelerator Titanium en una empresa de desarrollo, recuerdo que una gran cantidad de funciones no iban para Android, y otras no iban para iOS. Había que “parchear” el sistema con código que sobreescribía el de Appcelerator… en fin: una locura.

Como dato de ejemplo para acabar, me gustaría citar la dificultad que implica reutilizar código que sirva para cargar imágenes. En Develapps, con los años, hemos tenido que desarrollar código para cargar imágenes en Android, que tiene en cuenta si la foto viene de Google Photos (en ese caso, si la imagen está online, hay que cargarla como local a pesar de NO estar en local), de la SD si es Samsung, de la memoria interna, de la memoria interna en una serie de dispositivos que rotan la imagen y corregir la rotación… Hacer toda esta gestión, que varía según el dispositivo (incluso dentro de una misma marca), es complejo mediante código nativo. Pero realizar esta “simple” acción desde código de librería es… prácticamente imposible.

 

Esto ha sido un ejemplo, el de Xamarin, pero recuerdo que tenemos muchas otras plataformas de desarrollo de apps híbridas como:

- Appcelerator Titanium www.appcelerator.com

- Phonegap (Cordova) phonegap.com

- Telerik App Builder http://www.telerik.com/platform/appbuilder

- Sencha Touch www.sencha.com

- React Native https://facebook.github.io/react-native/

… y un largo etcétera.

Cada plataforma tiene sus pros y sus contras (y evolucionan mucho) así que, en caso de que te interese una plataforma interesante, dilo en los comentarios o escríbenos y publicaremos información sobre otras plataformas de código híbrido.

Por supuesto, puedes contar con la calidad de desarrollos de Develapps en soluciones nativas. Si la app que necesitas es importante para ti, también lo es para nosotros. Contáctanos y te llamaremos para ver cómo ayudarte.

 

 

Públicado el 28/03/2017

Comparte este post: