81. ¿Qué diferencias hay entre PhoneGap, Ionic, React Native y Flutter?

Transcripción

Dentro de las tecnologías híbridas tenemos muchas opciones. Cada una tiene características diferentes y al elegir una debemos saber las razones, ya que siempre habrá una opción mejor en función del tipo de proyecto, de la persona que lo va a realizar y de la situación en general.

En el episodio de hoy vamos a ver punto a punto cada una de las opciones que tenemos para desarrollar aplicaciones híbridas y las diferencias entre ellas, así que espero que pueda ser de ayuda si alguien está buscando decantarse por una o por otra, o si simplemente está buscando información.

En concreto, vamos a ver Phonegap, Ionic, React Native y Flutter. Seguramente me estoy dejando algunas tecnologías porque como digo hay muchas más como Xamarin o Native Script. Por lo tanto, las que voy a analizar no son las únicas que existen, que quede claro que hay más.

Lenguaje y nivel técnico

En primer lugar, vamos a empezar con las tecnologías nativas que siempre es bueno ver cómo funcionan en las aplicaciones móviles por defecto para entender después, cómo funcionan las tecnologías híbridas.

Las aplicaciones nativas de Android se desarrollan con Java y Kotlin, mientras que en iOS con ObjectiveC y Swift. Básicamente, las tecnologías nativas son las opciones que ofrecen las respectivas empresas de los sistemas operativos para desarrollar aplicaciones.

Estas empresas generan unos SDKs (Software Development Kit) que son una serie de herramientas de programación para desarrollar aplicaciones para sus sistemas. Lo que hacen es desarrollar código nativo que el dispositivo entiende perfectamente. La interfaz gráfica, por su parte, se compone de los componentes (valga la redundancia) que esta empresa nos pone a nuestra disposición. Por ejemplo, un botón, un texto, una barra de selección, etc. Todos estos componentes nos los dan las empresas a través de los SDKs.

Si queremos desarrollar aplicaciones nativas, es la opción que tenemos: desarrollar con el lenguaje de cada sistema y utilizar el SDK de cada sistema operativo.

Ahora, es cuando empieza lo interesante: las tecnologías híbridas. Los que pasa con éstas, es que obviamente (como se puede intuir) el desarrollo es bastante complejo porque tenemos que desarrollar dos veces las mismas funcionalidades.

Así que, al probar las aplicaciones móviles hubo quienes empezaron a pensar en formas de simplificar esto. ¿Cómo? ¿A través de un solo proyecto, crear aplicaciones totalmente válidas para cualquier sistema operativo?

Quizás las primeras tecnologías híbridas que surgieron, estaban basadas en la web como Ionic y Phonegap. La idea principal aquí, era utilizar las tecnologías web que funcionaban en cualquier sistema operativo (móvil o web) para desarrollar un solo proyecto una sola vez y que funcionase para todos.

El lenguaje que utilizaron fue HTML y JavaScript, lenguajes de la web. Para entender cómo funcionan estas tecnologías web híbridas, hay que imaginarse una aplicación que no tiene nada pero que simplemente tiene un navegador encima. Lo que se hace es desarrollar esta aplicación, sobre este navegador (el cual está encima de la aplicación nativa).

Lo que permite esto es desarrollar con tecnologías web una aplicación que parece nativa, que se puede descargar en las tiendas de aplicaciones, pero que funciona a través de tecnologías web. Así es cómo funcionan Ionic y Phonegap, usando HTML y JavaScript.

Más adelante surgió React Native, un framework desarrollado por Facebook. Funciona y se programa a través de JavaScript, solo que funciona a través de una tecnología web para trabajar, pero utiliza los elementos visuales de los SDKs respectivos.

Para entenderlo mejor: por un lado, vamos a programar en Java Script y lo que React Native hará será traducir todos estos elementos visuales a lo que correspondería en cada plataforma. Imaginemos que definimos un texto y un botón en React Nativa; lo que posteriormente hará será ir a Android y colocar un botón y texto que proviene del SDK de Android.

Va a hacer exactamente lo mismo con iOS. De esta forma tenemos una SDK nativa porque está usando y traduciendo de alguna forma los componentes del SDK, y luego tendríamos lo que vendría a ser la lógica y la comunicación con el “puente” Java Script.

Por último, está Flutter que, es una de las últimas tecnologías híbridas que ha salido y es un framework de Google basado en Dart, el cual es un lenguaje también inventado por Google.

Lo que hace Flutter, es bastante diferente a lo que hacen los anteriores. Mientras que Phone Gap e Ionic utilizan un navegador web para imitar la interfaz de usuario; y React Native intenta traducir la interfaz de JavaScript a código nativo, Flutter hace lo que algunos motores de juegos (Unity, Unreal) hacen: básicamente, duplica y genera una interfaz de usuario propia.

Coge los botones de Android y de iOS para implementarlos en su propio lenguaje (Dart), con lo cual tenemos una interfaz nativa (pero no concretamente nativa del sistema operativo) y una lógica nativa.

Todo esto, hace que la aplicación se vea como una nativa, y funcione a su mismo nivel en cuanto a rapidez. Como digo, es como un engine de juegos. No hay comunicación con SDKs a nivel de interfaz de usuarios, si no que pinta su propia interfaz de usuario que es muy parecida a las de los SDKs nativos.

Acceso a las características del dispositivo

Me refiero al hardware del teléfono como el GPS o la cámara. Todas las tecnologías híbridas, de alguna u otra manera, pueden acceder al hardware del dispositivo. Las nativas, son las que más rápido pueden hacerlo ya que tienen disponibilidad desde el primer día de todas las últimas funciones y características y no necesitan ningún puente para comunicarse.

Por otro lado, con las tecnologías híbridas se tiene que esperar a que alguien adapte esas funcionalidades o que el propio programador sea quien las haga e implemente, por lo que podría llevar algo de tiempo desarrollar según que funciones.

Por otro lado, la rapidez de acceso al GPS o a la cámara, es un poco más lenta y ya depende de la tecnología híbrida, pues siempre hay un puente de comunicación con el sistema operativo (JavaScript, Dart, etc.) que comunica lo que el dispositivo sabe hacer con el framework que estemos utilizando.

Soporte y número de desarrolladores

Esto es importante por dos motivos. El primero es de cara al programador. Programar no es una tarea sencilla y siempre hay que buscar información en internet: ¿Han habido errores?, ¿Alguien ha tenido el mismo error?, ¿Qué hacer?, etc.

Con lo cual, el nivel de soporte que exista en esa tecnología es importante, ya que será más fácil o más difícil programar algo. Cuanto menos soporte e información haya, será más difícil desarrollar ciertas funcionalidades porque básicamente te “tendrás que sacar las castañas al fuego tú mismo”. Mientras que, por otro lado, si hay muchísima información, será fácil encontrar respuesta a las dudas.

También está la cuestión del número de desarrolladores que va muy ligado al soporte. Es importante a la hora de contratar a alguien que sepa programar tu aplicación. Esto es oferta y demanda: cuantos más programadores tengas, más opciones (y económicas) tendrás para acceder a mejores perfiles.

En primer lugar, tenemos las aplicaciones nativas que, en este aspecto son sin duda las mejores, no hay duda, ya que están desde el principio y son la forma principal de desarrollar aplicaciones. Asimismo, la mayoría de las aplicaciones están desarrolladas bajo una estructura nativa, con lo cual, tenemos el mejor soporte y el mayor número de desarrolladores.

Por otro lado, en el caso de Ionic y PhoneGap, podríamos decir que el número de desarrolladores es aceptable, aunque en mi opinión, están un poco en decadencia si las comparamos con las nuevas tecnologías híbridas que han ido saliendo.

Sin embargo, aún es posible encontrar algo de soporte y aun hay bastantes desarrolladores, sobre todo porque los desarrolladores pueden crear aplicaciones web con Ionic y Phonegap.

El otro, es ReactNative, que es bastante bueno en este sentido ya que lleva bastante tiempo. ReactNative, como tecnología híbrida, se ha hecho bastante popular en los últimos años. Aún hoy en día, lo es, por lo que hay muchos desarrolladores que saben programar en esta tecnología, así como mucho soporte.

Finalmente, tenemos Flutter que quizás, sea el peor en este aspecto, pero por cuestión de tiempo. Hasta hace poco, estaba en fase beta así que no era “recomendable” utilizarla, aunque se hayan creado ya aplicaciones sin ningún problema pues es muy estable. Sin duda, es algo que va a mejorar con el paso del tiempo.

Un dato muy interesante, son las estrellas que los proyectos obtienen en GitHub, el cual es un indicador de la popularidad entre los desarrolladores de cierto proyecto o framework. Flutter, en muy poco tiempo, se ha plantado como uno de los proyectos más interesantes en GitHub.

Ha llamado mucho la atención. Cada vez, hay más información y desarrolladores interesados (como yo). Así que, en este tema del número de desarrolladores y soporte mejorará con el tiempo.

La rapidez

Este tema, es bastante difícil de medir porque no es únicamente la plataforma que utilizas, la que indica la velocidad que va a tener. En realidad, lo que más importa es el programador y, por ende, la forma en la que se programe.

Si miráramos simplemente la plataforma, podríamos decir que las nativas son las que mejor funcionan. Tenemos después Flutter y React Native, que están limitadas por el puente JavaScript; y finalmente tenemos Ionic y Phonegap, simplemente limitadas por tener un navegador por delante, lo que hace que el funcionamiento sea mucho más lento que la aplicación en sí.

Dicho esto, el desarrollar una aplicación de forma nativa, no garantiza que funcionará rápida y fluidamente, porque lo más importante es cómo es que el programador la desarrolla.

Sin duda alguna, podrías crear una aplicación en Ionic o Phonegap que funcionara rápidamente simplemente por la manera en la que fue programada. Pero siempre es importante tener este hándicap: si usas Ionic o Phonegap, será más difícil hacer una aplicación fluida, que si utilizaras Flutter o una tecnología nativa.

Mi opinión sobre estas tecnologías

En primer lugar, con respecto a la pregunta ¿Cuándo elegir una tecnología nativa?, lo que debes saber es que, para esto, debes tener el presupuesto y el tiempo para hacerlo. Además, hay ciertos proyectos que, por el simple hecho de explotar mucho el hardware (por ejemplo, hacer un uso muy intensivo de la cámara o el GPS), es más conveniente hacer una aplicación nativa.

Lo más importante es el presupuesto y el tiempo porque desarrollar aplicaciones nativas implica el desarrollo de dos proyectos, por lo que tienes que estar seguro que te puedes permitir esto.

Por otra parte, Ionic y Phonegap, es una buena elección si eres una persona con un background en la web y no quieres ponerte a aprender la tecnología de los móviles. Puedes aprovechar todo ese conocimiento de la web, HTML, CSS y JavaScript, y simplemente ponerte a hacer aplicaciones para los móviles.

En cuanto a ReactNative, es una gran elección si te gusta JavaScript, aprender cosas nuevas y quieres poner a prueba esos conocimientos de la web, pero mejorando la calidad de la aplicación y las posibilidades que vas a tener. Se utiliza en muchas aplicaciones conocidas y sin duda, es una opción totalmente válida.

Finalmente, Flutter. En mi opinión, si estás dispuesto a aprender un nuevo lenguaje y un nuevo y moderno framework, es a día de hoy, la mejor opción para desarrollar aplicaciones, en el sentido de que se puede hacer rápido y barato, al tiempo que creas una aplicación de calidad.

Pero eso sí, tienes que estar dispuesto a aprender muchas cosas nuevas: lenguaje (ya que es muy probable que no conozcas Dart) y el framework, el cual es muy diferente en cuanto a la forma en la que se estructuran las aplicaciones.

Si te ha resultado útil este artículo puedes hacer que también lo sea para otras personas compartiéndolo en , LinkedIn o .

Como siempre para cualquier duda o sugerencia puedes contactar conmigo y estaré encantado de poder ayudarte.

¡Suscríbete

a la newsletter!

Simple y llanamente te mantendré al día una vez al mes a través de un email con artículos o noticias de interés relacionadas con el mundo de las aplicaciones móviles. ¡Nada de spam!