Desarrollo para móviles: busca tu inercia tecnológica (o sea, aprovecha lo que sabes), por Javier Pascual

08/08/2011 por Redacción

Javier pascual sorianoAunque ya nos parezca algo "de toda la vida", la AppStore de Apple, y la revolución tecnológica y de modelo de negocio que sin duda ha generado, llevan junto a nosotros apenas 3 años. En todo ese tiempo, muchos hemos sido los que hemos intentado hincarle el diente, con dudoso éxito, a alguna de las tecnologías de desarrollo para dispositivos móviles de última generación, especialmente a los de la marca de la manzana: iPod Touch (sí, aún existe!!), iPhone y iPad. A todos nos suenan palabras como XCode, iOS, Cocoa, Objective-C, Java, Eclipse, Android, Flash, .NET, C/C++. Distintos lenguajes, distintos entornos de desarrollo, distintos paradigmas y distintas curvas de aprendizaje… en definitiva, un escenario tecnológico muy heterogéneo en el que intentar apostar por un caballo ganador se convierte en una misión imposible, no solo porque posiblemente ninguno de ellos termine por alzarse como el referente en el desarrollo para dispositivos móviles, sino porque tenemos que reconocer que es bueno para todos que exista esta diversidad y, por supuesto, la competencia que esta genera.

Pero al final, siendo prácticos, a los desarrolladores lo que nos interesa en nuestro trabajo (o lo que nos debería interesar) es conseguir un nivel de eficiencia óptimo: máximo impacto al menor coste y con la mejor calidad. Bueno, bonito y barato oiga. Y, desde luego, con un surtido tan variado de tecnologías de desarrollo uno no sabe por dónde tirar o, si decide avanzar a pecho descubierto y apostar por todas a la vez, resultará que, o tiene mucho "dinero para gastar", o tiene una mente privilegiada y mucho tiempo libre (es decir, que ni familia, ni amigos, ni hobbies de humanos normales…) o, muy posiblemente, su proyecto personal o empresarial se verá abocado al fracaso o, peor aún, a la indiferencia en Internet. Bueno, a veces también puede salirte bien, pero de verdad que no será fácil (tampoco lo era hace 3 años).

Y es aquí cuando uno se para a reflexionar y piensa: entonces, ¿cómo puedo yo conseguir mi loable y humilde objetivo sin morir en el intento?, o sea, ¿cómo puedo desarrollar la próxima "Killer App" multi-plataforma que me retire de trabajar de por vida y me genere fama, riquezas infinitas y un completo catálogo de merchandising relacionado? Pues lo siento, pero yo no tengo la respuesta, quizá en el Blog de al lado… Mientras tanto, te propongo que amortices la inercia tecnológica de los últimos años. ¿Que hagas qué? Pues, simplemente, que le saques partido a tu conocimiento sobre desarrollo Web (o el de otros) y que todo aquello que conoces, que controlas y que además te gusta (HTML, Javascript, CSS, XML, JSON…) vuelva a convertirse en tu mejor arma para desarrollar aplicaciones pero, esta vez, no solo para la Web.

Sí, esto es posible con relativo poco esfuerzo y grandes logros en unos días (incluso horas!!) aunque, como todo, tiene truco. De nuevo encontrarás varias opciones y pasarás poco tiempo durmiendo y mucho buscando, leyendo, aprendiendo, probando, instalando… hasta que por fin puedas ver algo de luz al final del túnel. Y por eso estamos aquí, para ayudarte a identificar la tecnología Web que mejor se adapta a tus conocimientos y a tus necesidades y, si es posible, para que consigas materializar esa idea que lleva meses rondándote la cabeza y que, por falta de tiempo o experiencia, no eres capaz de llevar a buen puerto.

Hablaremos de aplicaciones 100% Web, ejecutadas sobre un navegador, al estilo de las que la misma Apple nos intentó convencer en su día que eran el futuro del desarrollo para dispositivos móviles (y que la comunidad mundial de desarrolladores se encargó de demostrar lo contrario presionando a la propia Apple para que publicase su SDK). Aquí encontramos las propias guías y herramientas de Apple o librerías tan completas y potentes como jQuery Mobile o Sencha Touch. Debo decir, para ser justos, que al final Apple no solo se dio cuenta de su error y terminó "liberando" su SDK (podríamos pasarnos horas hablando de lo buena y oportuna que fue esta decisión) sino que finalmente ha dado luz verde a que se puedan desarrollar aplicaciones para iOS sin tener que pasar por el aro de XCode, Cocoa y Objective-C, posiblemente más por miedo a la competencia que por entender que lo importante es la creatividad de los desarrolladores y no las herramientas con las que construyen sus aplicaciones. Hablaremos también de aplicaciones nativas multi-plataforma, de sus características, ventajas e inconvenientes, como las generadas con Adobe Flex Builder o con algunas de las últimas tendencias en desarrollo móvil con tecnologías Web (principalmente Javascript) que están suponiendo una auténtica revolución por su sencillez y potencia (aún siendo aún piezas de software relativamente inmaduras). Nos referimos a PhoneGap y Appcelerator Titanium.

Pues lo dicho, comencemos con el repaso a cada una de las tres vertientes que proponemos como opciones para desarrollar aplicaciones móviles mediante tecnologías creadas y utilizadas "tradicionalmente" para la Web.

Desarrollo 100% Web

Web development timeline

Es la opción más sencilla, la más natural si vienes del mundo Web. Se trata ni más ni menos que de desarrollar con HTML (mejor si ya avanzas hasta el HTML5), CSS y Javascript aplicaciones Web adaptadas para ser consultadas desde el navegador Web de un dispositivo móvil (ya sea un teléfono o una tableta). Lógicamente, puedes usar tecnologías del lado del servidor como PHP, Java, Ruby, ASP, etc.

Las mayores ventajas de este tipo de aplicaciones son que puedes reutilizar gran parte de tu código de Front y, si has desarrollado correctamente, la práctica totalidad de tu código de Back. Para esto último, es muy importante cómo planifiques la arquitectura de tu aplicación, separando correctamente la capa de acceso a datos, la capa de presentación y la lógica de la aplicación (patrón Modelo-Vista-Controlador o MVC, acertaste). Además, distribuir tu aplicación es tan sencillo como comunicar su URL al resto del mundo (que aunque no es trivial, siempre es más sencillo que además obligar a que se descarguen varios megabytes en su teléfono). Esto, lógicamente, también es muy ventajoso para las diferentes actualizaciones que seguro harás sobre tu aplicación; siempre serás tú quien controle cuándo dispondrán de la última versión TODOS y cada uno de tus usuarios. Además, con un esfuerzo relativamente bajo, tu aplicación será compatible entre multitud de plataformas móviles.

Como desventajas, están principalmente que para el uso de la aplicación es necesario disponer de conexión a Internet. Bueno, esto no es totalmente cierto. Hoy en día, con la funcionalidad que proporciona el almacenamiento local de HTML5 (os recomiendo leer http://diveintohtml5.org/storage.html si queréis profundizar) es posible almacenar gran cantidad de información en los dispositivos, pero al final el almacenamiento no lo es todo. Otra de las desventajas, la mayor en mi opinión, es que no dispondrás del acceso al SDK que controla la mayor parte del hardware del dispositivo. Sí es posible acceder a los acelerómetros o incluso al geo-posicionamiento, pero no al amplio abanico de sensores y gadgets que se incorporan actualmente, o al menos de forma más o menos estándar, comenzando por la cámara. Además, no dispondrás de los componentes visuales nativos para crear la interfaz de usuario de tu aplicación, por lo que tendrás que recurrir a librerías de terceros para conseguir, no sin esfuerzo, un diseño y una usabilidad profesionales.

Respecto a este último punto, las interfaces gráficas de usuario, ten en cuenta que su diseño y programación consumirán gran parte del tiempo total de desarrollo de tu aplicación y sin duda, para la mayoría de tus usuarios, será lo que les anime a continuar usando e incluso recomendando tu aplicación o lo que les lleve a rechazarla de inmediato. Así de claro. Por ello, es importante que elijas correctamente un modo de conseguir resultados en el Front de calidad en tiempo y forma. Yo te propongo dos alternativas (de entre las decenas de ellas que podrás encontrar) que para mi son las más maduras y aptas para uso profesional a día de hoy: jQueryMobile y Sencha Touch.

jQueryMobile es la versión móvil del posiblemente mejor y más extendido framework javascript que existe, jQuery (ahora es cuando los partidarios de Prototype, Dojo y demás frameworks se me tiran al cuello… :-) ). jQueryMobile te proporcionará un gran número de componentes visuales listos para utilizar, como paginadores, cajas de diálogo, barras de herramientas, botones, capas, formularios con elementos de entrada de todo tipo, listados, grids… así como otro montón de funcionalidades para gestionar eventos, explotar las capacidades HTML5 de tu dispositivo, efectos y animaciones, realizar llamadas Ajax a servicios y recursos remotos en XML y JSON y muchas cosas más. Y ¿quieres saber qué es lo mejor? que tu aplicación será compatible con iOS, Android, Blackberry, Bada, Windows Phone, Palm Web OS, Symbian y Meego. Además, sobre todo si ya has usado jQuery antes, su aprendizaje es muy sencillo y la documentación y los ejemplos son fabulosos. Como punto en contra, por ser crítico, no me termina de convencer la apariencia final de las aplicaciones, que pierden parte de la interactividad y "ligereza" que tienen las aplicaciones nativas u otras librerías de terceros, con acabados visuales no muy finos, retardos y transiciones algo toscas que no acaban de proporcionar un acabado profesional. No obstante, el equipo de desarrolladores y la comunidad que tiene detrás avanza a una velocidad de vértigo y estoy convencido que en las próximas versiones veremos nuevos y grandes avances en este sentido.

Sencha Touch, de los creadores de la conocida librería javascript Ext JS, se está convirtiendo en una de las opciones con más posibilidades para el desarrollo de aplicaciones móviles con tecnologías Web. Dispone del catálogo de componentes más completo (tanto gráficos como utilidades, de comunicaciones, control de gestos…) y versátil, con un acabado visualmente muy atractivo, muy cercano a la apariencia de los componentes nativos de iOS y con una fluidez sorprendente. Incluye también, recién salido del horno, un nuevo subconjunto de clases para crear y manipular gráficas complejas, lo que sin duda hará que tus aplicaciones empresariales mejoren notablemente con poco esfuerzo. La curva de aprendizaje es algo pronunciada al principio, pero en cuanto realizas varios ejemplos y entiendes el funcionamiento empiezas a desarrollar a una velocidad más que aceptable. La documentación es excelente y los ejemplos muy variados y didácticos, incluso con aplicaciones completas de ejemplo. Como aspecto algo negativo, dentro de que ya es un buen dato, tus aplicaciones "solo" funcionarán sobre dispositivos iOS, Android y Blackberry. Además, para proyectos no comerciales es gratuita pero si quieres vender tus aplicaciones tendrás que licenciar la librería.

Aunque lo analizaremos como tercera opción, ya os adelanto que una de las mejores opciones para reutilizar vuestro código y vuestra experiencia en desarrollo Web es encapsular este tipo de aplicaciones 100% Web en aplicaciones nativas que las carguen en un componente vista de navegador (por ejemplo, en iOS, en una WebView). Y ya solo quedaría buscar la forma en que acceder al hardware del dispositivo desde javascript… pero de esto hablaremos luego.

Desarrollo con tecnología Flash

Flash builder download

Mientras que en los dispositivos Android la presencia de Flash es algo natural, a nadie se le escapa que la lucha feroz que Adobe y Apple mantienen desde los comienzos del iPhone por incluir o no esta tecnología en sus dispositivos no parece que vaya llegar a buen puerto en un breve espacio de tiempo, y ojalá me equivoque. Y, aún así, la situación ha mejorado bastante y Apple, al igual que con otras tecnologías de desarrollo, ya permite que aplicaciones construidas con Adobe Flex Builder sean compiladas para iOS pero, eso sí, no son aplicaciones nativas, por lo que lo primero que nos encontramos es con un rendimiento bastante pobre (mucho), la ausencia de ciertas funcionalidades nativas, como por ejemplo compras dentro de la aplicación, y no tendremos la posibilidad de utilizar los componentes visuales propios de cada tipo de dispositivo: botones: tableviews, toolbars, etc. Esto último a algunos os parecerá una ventaja y a otros una desventaja. Es decir, que bien pensado, si programas tu aplicación Flash/Flex de manera que la interfaz respete los principios de usabilidad propios de dispositivos móviles (scrolls, tamaño de los botones, tipos de listas, etc…) al desarrollar la aplicación versión "de escritorio" estarás a un paso de tener la misma aplicación funcionando en un tablet. Para un teléfono seguro que tendrás que darle una nueva vuelta de tuerca y crear una interfaz más adaptada, más que nada por el tamaño de la pantalla. No obstante, tampoco es magia y tendrás que hacer cambios seguro, pero desde luego minimizarás el tiempo de desarrollo.

En cuanto a funcionalidad, más allá de no poder crear componentes visuales nativos, la versión actual de Adobe Flex Builder es sorprendentemente completa en cuanto a lo que puede hacer tu código en una aplicación de escritorio y esa misma versión ejecutándose en un dispositivo móvil, es decir, que la portabilidad es casi completa. El principal problema, como adelantaba unas líneas más arriba, es el pésimo rendimiento de los ejecutables generados en iOS (pese a las grandes mejoras hechas en la última beta), hasta el punto que o desarrollas toda tu aplicación directamente con AS3, o intentar utilizar componentes de alto nivel te llevará a obligar que tus usuarios utilicen como mínimo un iPad 2 y aún así la velocidad será bastante moderada.

Pero bueno, siendo objetivos con el título del artículo, es la manera perfecta para que aquellos desarrolladores Web que han basado su trabajo de los últimos años en la tecnología Flash, puedan posicionarse con poco esfuerzo dentro del prometedor negocio de las aplicaciones móviles, aprovechando al máximo la inercia de su experiencia profesional simplemente evolucionando sus conocimientos y adaptando sus diseños y desarrollos con una visión a nivel de arquitectura más global que le permita reutilizar.

Otro punto a favor de esta tecnología es que dispondrás de un entorno de desarrollo tan potente y maduro como es Flex Builder, y que además ha mejorado especialmente en la última versión todo lo referente al empaquetado y distribución de las aplicaciones generadas, por lo que tampoco tendrás grandes quebraderos de cabeza para "echar a andar" tus desarrollos.

Desarrollo de aplicaciones de apariencia nativa con Javascript

Komodo IDE Mac OS X Intel screenshot

Antes de nada, disculpad por lo intrincado del título de este apartado, pero es la mejor forma que he encontrado de describir en pocas palabras la realidad de lo que quiero contar. Digo esto porque encontraréis que muchos por Internet llaman a esto "aplicaciones nativas", pero la realidad es que no es así, no son aplicaciones nativas. Ya sea porque son aplicaciones 100% Web que se encapsulan en componentes WebView como en iOS o bien porque usan algún tipo de bridge o intérprete para permitir que tu código javascript controle componentes nativos, la realidad es que el resultado final es el de aplicaciones con apariencia, funcionalidad y rendimiento similares a las de las aplicaciones nativas, pero en mayor o menor medida (dependiendo del producto del que hablemos), con limitaciones de algún tipo.

PhoneGap fue el primer software que conocí que me permitía acceder desde mi código HTML5/CSS/Javascript a las principales funcionalidades del dispositivo, tanto software como hardware: contactos, calendarios, cámara, acelerómetros, GPS, sonido, brújula, bases de datos locales… Su uso es realmente sencillo, en un par de horas podrás hacer grandes cosas, y la documentación y ejemplos muy completos y prácticos. Supone un avance importante y un complemento eficaz para dotar a tus aplicaciones Web de una mayor potencia y funcionalidad, pero al final, no nos engañemos, seguirás teniendo una aplicación Web encapsulada en una aplicación nativa que no dispondrá ni mucho menos de toda las prestaciones y el potencial de una aplicación realmente nativa (por ejemplo, desarrollada con Cocoa para iOS o en Java para Android). Sobre todo, ten en cuenta que la interfaz gráfica tendrás que hacerla tú desde cero con HTML5 y CSS, o utilizando librerías como jQueryMobile o Sencha Touch, que nunca llegarán a ser componentes nativos. En mi caso, trabajar con PhoneGap se convirtió finalmente en un "quiero y no puedo" y opté por volver a XCode y Cocoa (opción que seguiré trabajando sí o sí) o partir en busca de otra alternativa… y creo que la encontré: Titanium Appcelerator.

Titanium Appcelerator es mi último y "gran" descubrimiento en esto de amortizar los conocimientos y la experiencia de muchos años en el desarrollo de aplicaciones Web aplicadas al desarrollo para móviles. Y me da rabia que haya sido así, porque de haberlo conocido antes no habría gastado un montón de tiempo en otras tecnologías, aunque también es cierto que ese aprendizaje siempre viene bien, pero siendo prácticos habría preferido que alguien me hubiese contado que existía y que funcionaba tan bien.

Dicho esto, contaros que las principales ventajas de Titanium es que en su versión Open Source pone a nuestra disposición posiblemente más funcionalidad de la que podamos necesitar para la mayoría de aplicaciones que podamos tener en mente. No obstante, previo pago de una cuota de desarrollador eso sí, ponen a nuestra disposición módulos adicionales que nos permitirán realizar compras dentro de la aplicación, transacciones de PayPal, Open GL, gráficas, notificaciones Push y un montón de opciones más. Además, la comunidad de desarrolladores que están montando alrededor del producto es muy grande y está muy respaldada por la empresa, por lo que continuamente aparecen nuevos módulos Open Source que te permitirán, por ejemplo, usar el motor de física Box2D dentro de tu aplicación. La documentación de la API es completísima y continuamente incorporan tutoriales y artículos donde profundizan en determinados aspectos de la herramienta, e incluyen una batería de ejemplos realmente espectacular que seguro te encantará probar y desmenuzar hasta el final, y es que a veces un "Hello World" vale más que mil palabras.

En Titanium, las plataformas sobre las que puedes desplegar aplicaciones son aún muy limitadas, únicamente iOS y Android con una versión beta para Blackberry, pero seguro que para la mayor parte de vosotros es suficiente. Lo mejor de todo, en mi opinión, es que las partes complicadas de utilizar Cocoa, como pueda ser la gestión de memoria, desaparecen para pasar a un estilo de programación más natural para todos nosotros, programadores Web, que nos ayudarán a concentrarnos en el objetivo de nuestra aplicación. Por cierto, como gran desventaja, más allá de la funcionalidad nativa a la que no podamos acceder o el detrimento de velocidad en algunos casos, lo que más echo en falta es una herramienta para crear las interfaces de forma visual, como Interface Builder, en lugar de maquetar todo mediante código (a veces a ojo) que siempre supone más esfuerzo y menos posibilidad de probar distintas disposiciones con facilidad; al final te ves obligado a preparar unos buenos y casi definitivos mockups al comienzo del desarrollo para luego ir casi a "tiro hecho".

0
Comentarios
  • #1 por wenmusic el 09/08/2011
    Chapeau por el artículo. Queda guardado por su utilidad.