Primeras impresiones Sencha Touch 2 + Phonegap (cordova)

Hace tiempo que quería comenzar a trastear con las aplicaciones para móviles, pero nunca dediqué tiempo a ello por falta de motivación. Aunque sí mantuve la curiosidad, y la motivación apareció por la puerta de las oportunidades. Me comprometí a que pasados 3 días debía tener los conocimientos mínimos como para asegurar que podía hacer una aplicación multimedia con unas cuantas pantallas. No era muy compleja y la terminé con unos resultados aceptables, que sigo mejorando. De todo esto hace un par de semanas. Sigo siendo un completo newbie, pero voy a atreverme a escribir sobre lo aprendido y lo que no. Y espero que me rectifiquéis si en algo no estoy muy acertado.

Nunca he programado nada para ningún móvil. Y aunque no me siento orgulloso de ello, no se Java. En 3 días me daría el tiempo justo para cargar una pistola y pegarme un tiro. Pero sí se de HTML5, CSS3 y JavaScript. Y conocía la existencia de PhoneGap y algún framework para crear apps en HTML5 para interfaces móviles. Así que decidí usarlos.

PhoneGap (también llamado Cordova) puede que ya lo conozcas. Permite crear una app nativa para cualquier sistema móvil a partir de HTML5. Dispone de varios plugins para tener acceso mediante Javascript a elementos nativos del móvil, como a la cámara, gps, batería, etc. Si tienes conocimientos de java para android, también serás capaz de hacer tus propios plugins.

Sencha Touch es un framework para crear aplicaciones web HTML5 para móviles.
Los proyectos no hace falta crearlos copiando ficheros de aquí para allá. Sencha proporciona un comando que genera toda la estructura de ficheros, con una mini app incluida lista para probar.
Desde la consola de comandos también puedes empaquetar las apps. Si no necesitas los plugins de PhoneGap para nada, te puedes ahorrar trabajo generando las apps directamente desde Sencha. Durante el proceso minimiza los assets y elimina ficheros innecesarios, lo que repercute en gran medida al peso final de la app.

Tanto PhoneGap como Sencha Touch tienen una documentación bastante buena. Y su comunidad es grande. También tienen herramientas que los complementan. Son dos grandes proyectos.

Hay otros frameworks también interesantes. Me gustan LungoJS y jQuery Mobile. Y hay más que ni siquiera he mirado. Ni siquiera es necesario utilizar uno.

Por lo general estoy contento de los resultados obtenidos. Creo que se pueden crear aplicaciones bastante decentes en poco tiempo utilizando estas herramientas. Crear las interfaces es bastante fácil usando Sencha Touch. Si usas Sencha Architect se convierte en un juego de niños. Incluye un buen número de componentes que se ajustan bien a cualquier dimensión de pantalla y apenas has de preocuparte por estos problemas.
Pero hay que tener en cuenta varias cosas antes de lanzarse. El rendimiento cae estrepitosamente. El tiempo de carga de una de estas aplicaciones híbridas es muchas veces superior a una completamente nativa. También es menos fluida. Si buscara rendimiento alto, jamás elegiría hacer la app hibrida con HTML (al menos por ahora).

Luego también están los típicos problemas que no te esperas. Con los que pierdes un montón de tiempo. La principal causa es mi ignorancia. Por ejemplo, tuve problemas con el componente para video y música de Sencha Touch. Aunque la app final sea nativa, no deja de ser HTML5. Android, o al menos los que probé, no soportan bien los reproductores video y audio de HTML5. No pude reproducir nada usando esos componentes. Hay caminos alternativos, pero son un fastidio. Hay veces que llegué a desear mayor control sobre el dispositivo, sin tener que te atravesar tanta capa. Creo que la creación de plugins de PhoneGap abre muchos caminos al respecto. También me parecería ideal que Sencha Touch diera unos pasos más y permitiera directamente mayor control sobre los elementos nativos del móvil, sin necesitar PhoneGap para nada.

También fue frustrante encontrarme con un bug que me impedía empaquetar nada con Sencha. Hay una parche hecho por terceros que te puedes descargar de un dropbox. Y en la documentación hay una nota escrita en rojo avisando pero… no me fio mucho de instalar cosas de cualquier link.

Me faltan muchísimas cosas por aprender que estoy seguro me harán ver con mejores ojos estas herramientas y sacarles más rendimiento. Mientras tanto creo que iré escribiendo mini posts con algún apunte suelto sobre el tema. Aunque sean tonterías puede que alguien les saque provecho.