domingo, 15 de diciembre de 2019

Apps nativas o no

Siguiendo con la serie de artículos sobre el desarrollo de aplicaciones móviles, este versará sobre las apps Nativas y sus alternativas.



¿Qué es una app nativa?
Se entiende que una aplicación es nativa si fue desarrollada en alguno de los lenguajes específicos de la plataforma.
Si quiero desarrollar de forma nativa en iOS (Apple), debo programar en Objective-C o en Swift. Sin embargo si quiero aplicaciones nativas en Android (Google) debo programarlas en Java o en Kotlin.

El desarrollo nativo tiene varias ventajas:

  • Aprovechar todas las funcionalidades del dispositivo, y acceso a todos los recursos de hardware como todos los sensores y dispositivos que incorporan los móviles o tabletas. Cualquier utilidad que tenga el dispositivo podrá aprovecharse desde el momento que se implemente en los dispositivos ya que las plataformas dispondrán de las librerías para que los programadores puedan usarlas.
  • Al ejecutarse directamente sobre el dispositivo tienen mejores velocidades de ejecución.
  • Las actualizaciones del sistema operativo están disponibles desde su lanzamiento.


Pero también tiene algunos inconvenientes:

  • El principal es que si quieres tener tu app en ambas plataformas hay que mantener dos códigos fuentes diferentes, uno para cada sistema. Esto suele implicar que las apps tienen una interfaz diferente y a veces no pueden tener la misma funcionalidad ya que algún sistema puede no tenerla implementada.
  • Y otro inconveniente, para mi, sería tener que aprender varios lenguajes; que por un lado es lo que busco, aprender algún lenguaje pero por otro que sean varios igual es demasiado ambicioso.


En mi disposición actual desarrollaría sólo para una de la plataformas de forma nativa. La cuestión es para cuál.
Hacerlo sólo para iOS y dado mi desconocimiento del sistema operativo y de sus lenguajes creo que sería demasiado esfuerzo.
Además no sé si puedo. Desconozco si es necesario tener un ordenador con sistema Operativo MacOS; hasta donde yo sé si quieres programar de forma nativa en iOS hay que usar Xcode y esté sólo está para MacOS. Aunque ahora las podría probar en el ipad pro que acabo de adquirir.
Queda descartada esta opción, no quiero comprar un ordenador para ver si me gusta desarrollar apps móviles.
Hacerlo sólo Android, es la mejor alternativa que tengo. Las herramientas de desarrollo para programar apps para Android son multiplataforma, así que por ahí no hay problema, nada de comprar un ordenador nuevo ni de cambiar mi Linux. Aquí el principal problema es muy personal, no me gusta Java. Sí lo sé es una estupidez subjetiva pero es así. Así que también queda descartada está opción.

Por lo que queda descartado el desarrollo nativo.

Alternativas

Existen dos posibles alternativas para desarrollar apps para móviles de forma no nativa: las webapps y las app híbridas. Con ambas podemos desarrollar una sola app y ejecutarla tanto en Android como en iOS.

Webapps

Son Aplicaciones web que utilizan HTML5, CSS y Javascript con un diseño responsive (que se adapta al tamaño del dispositivo que la visualiza).

Ventajas

  • Se ejecutan en cualquier plataforma que tenga un navegador web.
  • Facilidad de desarrollo.
  • HTML5 , CSS y Javascript son lenguajes que ya conozco y con el que se pueden desarrollar apps muy interesantes.
  • Desarrollo de una aplicación y su pruebas y despliegues son únicos.


Inconvenientes

  • No se pueden utilizar todas las funcionalidades del dispositivo hasta que no se implementan el el estándar de HTML, por ejemplo sí podemos usar el GPS pero no el acelerómetro.
  • No aprendería lenguaje nuevo aunque sí mucho sobre diseño y posicionamiento de apps.
Esta opción es tentadora, es la que menos esfuerzo me exige.

Apps híbridas

Las aplicaciones híbridas intentan juntar la funcionalidad de las apps nativas con la sencillez de las webapps. Suelen ser frameworks que facilitan la programación de la aplicación y luego se compila para cada plataforma.

Ventajas

  • Con un único código fuente desarrollo para varias plataformas.
  • Se puede acceder a los recursos hardware que con las webapps no se podía.
  • El desarrollo de una aplicación y sus pruebas son únicas pero los despliegues son múltiples, uno por cada plataforma.


Inconvenientes

  • El principal inconveniente es que el rendimiento de estas aplicaciones está lejos del rendimiento de una app nativa. 
  • Además el desarrollo no es tan sencillo como con una webapp, el uso del framework puede tener una curva de aprendizaje pronunciada.


Difícil decisión.
Finalmente descarto las webapps porque mi objetivo es aprender algunas nuevas tecnologías.

Así que decisión tomada, me toca aprender a programar apps para móviles híbridas.


No tendría todas las posibilidades de una app nativa pero con aprender un lenguaje sería suficiente para todas las tiendas de apps. Tengo que buscar una solución que permita compilar aplicaciones multiplataforma. La cantidad de opciones para elegir Framework multiplataforma es abrumadora.

En el próximo artículo analizaré qué Framework se adapta mejor a mis necesidades.

Recuerda que estos artículos son una visión única e intransferible, no pretendo recomendar nada a nadie.
Para ponerte en contacto conmigo @mosqueteroweb en Twitter y Telegram.