Vistas de página en total

martes, 13 de diciembre de 2016

Opciones para el desarrollo de aplicaciones para móviles

Este post me gustaría que fuera bastante dinámico, es decir, que se fuera actualizando con el tiempo, ya que estas tecnologías que voy a tratar se actualizan con bastante frecuencia y además yo no poseo la verdad absoluta sobre estos temas, ni mucho menos.

Consideraré las dos plataformas más extendidas actualmente: iOS y Android.

Desde mi punto de vista existen cinco formas de desarrollar aplicaciones para móviles:


  • Native-Native
  • Cross compiled
  • Web based
  • Canvas
  • Runtime javascript

Cada una tiene uno o más productos/frameworks alternativos, y cada una tiene sus ventajas y por supuesto sus inconvenientes. Veamos brevemente cada una de ellas.

Native-Native

El desarrollo se realiza de forma nativa en el propio lenguaje (o lenguajes) nativos de la plataforma.
En iOS se utiliza Objective-C o bien Swift como lenguajes de programación. En Android se utiliza Java como lenguaje de programación.
Ventajas:
  • Acceso total al API de cada plataforma, sin limitaciones
  • Mucha documentación, cursos, libros, videos, etc
  • Herramientas de desarrollo muy avanzadas (XCode para iOS, Android Studio para Android)
  • Máximo rendimiento de las aplicaciones
  • Interfaz de usuario propio de cada plataforma
Inconvenientes:
  • No hay una base de código única, necesitamos una base de código para cada plataforma. Hay que mantener dos versiones de la misma aplicación
  • Es bastante complejo el aprendizaje
  • Depuración lenta en emulador o simulador, ya que necesita compilación

Cross compiled

Se desarrolla en un único lenguaje de programación que es "traducido" a la plataforma nativa.
El ejemplo más popular es Xamarin (ahora de Microsoft), que utiliza el lenguaje C#.
Ventajas:
  • Un único lenguaje de programación para todas las plataformas
Inconvenientes:
  • En cada plataforma tenemos que hacer desarrollos específicos (aunque son con el mismo lenguaje de programación y con algunas parte de código común)
  • El rendimiento no es muy bueno, comparado con el desarrollo nativo
  • Depuración lenta en emulador o simulador, ya que necesita compilación

Web based

Se desarrolla la aplicación utilizando tecnologías propias de la web: HTML, Javascript y CSS.
La aplicación se ejecuta en una web view, es decir, la propia aplicación incluye un navegador en el cual se ejecuta la aplicación.
Los exponentes más conocidos de este tipo de solución son: PhoneGap, Apache Cordova.
Ventajas:
  • Se aprovechan los conocimientos de desarrollo web
  • Se pueden utilizar frameworks js o css: angular, bootstrap
  • Se utiliza el DOM
  • Interfaz de usuario web conocido por el usuario
  • Base de código única para todas las plataformas
  • Depuración ágil, ya que no necesita compilación
Inconvenientes:
  • Bajo rendimiento
  • No hay acceso a todas las funcionalidades de cada plataforma
  • Es muy difícil realizar interacciones complejas (componentes avanzados o bien interacciones como swipe etc)

Canvas

Esta solución es la utilizada por Corona SDK, aunque también la utilizan Unity y Unreal (dos plataformas para desarrollo de juegos 3D y 2D). Consiste en dibujar directamente sobre un canvas vacío todos los objetos y widgets de la aplicación, no utilizando los widgets de la plataforma. Se utiliza OpenGL. Así por ejemplo, no se utiliza el botón propio de la plataforma, sino que se dibuja el botón en el canvas.
Ventajas:
  • Muy adecuado para el desarrollo de juegos (aunque también muy válida para desarrollo de aplicaciones)
  • Base código única para todas las plataformas
  • Mismo lenguaje de programación para todas las plataformas
Inconvenientes:
  • La interfaz de usuario no tiene el aspecto propio de cada plataforma (el aspecto es el mismo en todas las plataformas)
  • Depuración rápida en simulador

Runtime Javascript

Ésta es probablemente la tecnología más novedosa y no debe confundirse con Web based, porque a pesar de que se utiliza javascript como lenguaje de programación, no tiene nada que ver con la web.
En este caso, la aplicación incluye un motor javascript incorporado (V8 en Android y Javascript Core en iOS). El motor ejecuta el código javascript directamente y hace llamadas a la plataforma nativa cuando es necesario. No utiliza el DOM, ya que no incluye una web view.
Los frameworks más conocidos son: React Native, Appcelerator Titanium y NativeScript.
Ventajas:
  • Base de código única para todas las plataformas
  • Lenguaje de programación único, muy conocido
  • Aspecto de la interfaz de usuario propio de cada plataforma (se utilizan los widgets nativos de cada plataforma)
  • Desarrollo muy ágil debido a que se recarga el javascript (no es necesario recompilar)
Inconvenientes:
  • Rendimiento aproximadamente un 10% peor que el desarrollo nativo
  • No hay entornos de desarrollo muy avanzados para estas soluciones