El mundo de la movilidad ha crecido a pasos agigantados desde la aparición del primer dispositivo móvil. Los primeros móviles pretendían acercar la comunicación telefónica entre dos puntos alejados sin la necesidad de acudir a un puesto fijo. Este avance dio un soplo de libertad a los que queríamos mantener el contacto con nuestros conocidos haya donde estuviéramos.
Con el crecimiento de las herramientas tecnológicas y la participación de la población en ellas, era de esperar que los dispositivos móviles volviesen a cumplir y nos liberasen de la necesidad de disponer de un ordenador fijo del que depender.
¿Por qué no iba a poder realizar mis gestiones bancarias mientras espero en la consulta del médico? ¿Por qué no iba a poder acudir a la fuente de la verdad (Google) en el momento exacto en el que se presenta la discordia en la conversación de bar con mis amigos?
Este “pequeño” artilugio se ha convertido en el compañero imprescindible de cualquier persona en su día a día. Quizás se me olviden las gafas de sol al salir de casa, ¿pero el móvil? Eso nunca.
Este creciente abanico de posibilidades no solo ha afectado a los usuarios de las aplicaciones móviles, sino también a todos los equipos de desarrollo que hemos visto cómo nuestras aplicaciones deben ser capaces de ir abarcando un cajón cada vez más grande de funcionalidades.
Una de las decisiones más importantes a la que debemos enfrentarnos como usuarios al ingresar en el mundo de la tecnología móvil, es decidir qué sistema operativo va a acompañarnos en nuestro día a día. Existen dos grandes empresas que ocupan la gran parte del mercado: Android e iOS. Cada una tiene sus características, su experiencia de usuario, sus aplicaciones y una lista de diferencias a las cuales no son capaces o no quieren llegar a un consenso.
En el mundo del desarrollo, estas diferencias, junto con otras más a bajo nivel, hacen que la construcción de una aplicación, independientemente de que sean similares en ambos sistemas, requiera de una implementación propia y bien diferenciada.
Aunque comúnmente no existe más remedio que abordar estas implementaciones por separado, sirviéndonos de equipos de desarrollo especializados en cada sistema, en los últimos años han comenzado a aparecer soluciones multiplataforma que pretenden unificar al máximo ambos desarrollos, creando soluciones que vivan al margen del sistema en el que finalmente se ejecutará la aplicación. Pero ¿cómo funciona esta idea mágica?
Esta idea de disponer de un solo código para unirlos a todos no es algo que haya aparecido con lenguajes multiplataformas como Flutter o KMM. Desde hace años, las tecnologías híbridas habían conseguido una solución que, aunque con bastantes limitaciones, podían hacer correr una misma implementación en Android, iOS o incluso en una web.
La pregunta aquí viene sola ¿qué tiene que ver las webs en todo esto? Son precisamente ellas las que permiten hacer discordia entre ambos mundos.
Cuando abrimos una aplicación web desde el navegador de nuestro móvil, ya sea en Android o iOS, esta web se verá y funcionará de forma similar, quitando las características propias de cada navegador, y esto es así ya que ambos navegadores utilizan la misma implementación, heredada de cuando las aplicaciones web corrían en ordenadores personales en los que no existían esta “confrontación” entre sistemas operativos.
Siguiendo esta misma línea, las tecnologías híbridas crearon una solución para aplicaciones nativas, las cuales se convertían en un cascarón capaz de mostrar las páginas web como pantallas de aplicaciones que simulaban ser nativas.
Los frameworks híbridos se encuentran compuestos por una parte web, el conjunto de todas las pantallas/páginas de la aplicación, y una parte que será convertida a nativo y que se encargará de crear la base de la aplicación y todos aquellos plugins que permitan la interacción entre la aplicación y el hardware de nuestro dispositivo.
Aunque esta solución presenta muy buenos resultados en determinados tipos de aplicaciones, la interacción entre un lenguaje no nativo con el lenguaje nativo complica el desarrollo de aplicaciones más complejas, aplicaciones que necesiten de un uso intensivo de determinados componentes hardware del dispositivo, o aplicaciones que requieran de un uso offline.
Partiendo del precedente establecido por las tecnologías híbridas, las comunidades de desarrollo pensaron en cuál podría ser la mejor forma de seguir aprovechando esta idea de desarrollo unificado sin tener que depender de un renderizado y muestreo de pantallas que no fueran nativo.
Con este pensamiento surgieron lo que conocemos como tecnologías multiplataformas, las cuales unifican la implementación de toda o parte de la aplicación en un código común, el cual posteriormente será convertido en código nativo propio para cada sistema operativo.
De esta forma, aunque los equipos de desarrollo utilicen un lenguaje común, la aplicación final se encontrará casi perfectamente adaptada a su dispositivo.
Los frameworks como Flutter o KMM, cuya popularidad está creciendo, realizan un trabajo estoico para adaptar sus soluciones lo máximo posible a las aplicaciones desarrolladas de forma completamente nativa, intentando que el usuario final sea incapaz de distinguir una implementación de la otra.