Una introducción al desarrollo móvil
Para entender el panorama del desarrollo móvil, primero debemos saber quiénes son los actuales líderes de la industria y quiénes son los nuevos contendientes para 2013/14
En el cuarto trimestre de 2012, los sistemas operativos móviles más utilizados fueron Android (con el 68,4% de la cuota de mercado) y iOS (con el 19,4% de la cuota de mercado). Ambos acapararon juntos el 92% de los envíos mundiales de smartphones. Estos resultados convierten a Java (Android) y Objective-C (iOS) en dos de los lenguajes de programación más utilizados para el desarrollo de móviles, pero eso es sólo cuando hablamos de aplicaciones creadas con el SDK de Android o el SDK de iOS.
Los otros sistemas operativos móviles que ya están en el mercado son Windows Phone y Blackberry 10, pero su cuota de mercado es aún muy pequeña. En los próximos meses podemos esperar los siguientes lanzamientos:
- Firefox OS de Mozilla
- Ubuntu Mobile de Ubuntu
- Tizen de Linux Foundation, Samsung, Intel, Tizen Community
Puedes leer más sobre los sistemas operativos móviles aquí y aquí
Los pros y los contras de la codificación nativa
Las ventajas de crear aplicaciones nativas están relacionadas con la máxima flexibilidad y rendimiento. Todos los programadores saben que el uso de los lenguajes de programación de más bajo nivel ofrece la posibilidad de ajustar las aplicaciones, personalizarlas y optimizar el código al máximo nivel. Esto es posible porque se trabaja casi directamente con el hardware; no hay capas innecesarias de complejidad entre el código y el dispositivo.
Las aplicaciones que dependen en gran medida de los gráficos 3D y necesitan procesar muchos datos o hacer un uso intensivo de la CPU son las mejores candidatas para el enfoque de código nativo.
Pero la flexibilidad y el rendimiento tienen un precio y es la complejidad y la duplicación de bases de código. Si quieres que tu aplicación nativa sea compatible con Android e iOS, tienes que tener dos bases de código diferentes, lo que significa que tienes que trabajar doble. Java y Objective-C son dos lenguajes de programación muy diferentes, requieren entornos de programación completamente distintos y el mantenimiento del código (refactorización) puede llegar a ser costoso para personas u organizaciones que no tengan un equipo de desarrolladores trabajando a tiempo completo en aplicaciones móviles.
¿Cuáles son las alternativas?
Por suerte o no, hay varias empresas con productos que prometen resolver el problema de tener dos o más bases de código diferentes para la misma aplicación. Estos productos permiten a los desarrolladores utilizar APIs comunes para construir las apps y luego "exportarlas" a código nativo Java (Android), Objective-C (iOS) o incluso a otras plataformas como Kindle Fire, Blackberry, Windows Phone, etc:
- Appcelerator y su Titanium SDK y Cloud services gratuitos basados en JavaScript. Anuncian su éxito con más de 50.000 apps desplegadas en el mercado, 419.000 desarrolladores y clientes como eBay, Merck, Mitsubishi Electric, NBC y PayPal. [Escaparate de aplicaciones. Después de haber probado la plataforma durante varios meses, puedo decir que el producto ciertamente funciona y la curva de aprendizaje es bastante suave, lo que hace que el proceso de desarrollo sea bastante divertido. Aunque no todo es tan maravilloso como dicen.
- Marmalade es uno de los mejores frameworks de desarrollo de juegos que existen. Tanto si decides codificar de forma nativa (C++) como si adoptas un enfoque híbrido (HTML5-nativo), con Marmalade puedes desplegarlo en iOS, Android, BlackBerry, Windows y Mac, así como en determinadas plataformas de Smart TV y (próximamente) de decodificadores. Clientes: Electronic Arts, Nokia, Apple, Konami, Google, Square Enix, nVidia, Samsung, etc. Escaparate de aplicaciones.
- Adobe PhoneGap es un marco de trabajo gratuito y de código abierto que permite crear aplicaciones móviles utilizando APIs web estandarizadas como HTML5, CSS y JavaScript. Cuenta con 400.000 desarrolladores y colaboradores de IBM, RIM y Microsoft. App showcase.
- Corona SDK es un conocido framework para desarrolladores de juegos para móviles. A partir de una única base de código, se puede implementar en iOS, Android, Kindle Fire y NOOK. App showcase.
- Xamarin es otra empresa/producto para desarrollar aplicaciones para iOS, Android y Mac utilizando C#. Tienen 230.245 desarrolladores y clientes como 3M, Microsoft, VMWare, Accenture, Cisco, AT&T, AOL, Monster y HP. App showcase.
- Shiva3D y Unity3D son opciones más centradas en juegos 3D multiplataforma de alto nivel. Shiva showcase. Unity showcase.
- MoSync SDK es una opción menos conocida que facilita la creación y compilación de aplicaciones para hasta nueve plataformas diferentes a la vez, utilizando C/C++ o HTML5/JavaScript, o una combinación de ambos. App showcase.
- Biznessapps y gamesalad son soluciones rápidas y sencillas para pequeñas empresas y juegos sencillos con pocos requisitos de programación y diseño personalizados. Estas soluciones son no recomendables para la gran mayoría de los proyectos debido a las limitaciones de los editores utilizados para construir las aplicaciones y su falta de flexibilidad.
- Para ver una tabla comparativa ampliada de los frameworks para móviles, visita este enlace, esta página wiki o esta otra.
¿Cuáles son los retos de las aplicaciones nativas y no nativas?
Programar aplicaciones móviles es más difícil que crear aplicaciones de escritorio o web. La plataforma es muy nueva y está cada vez más fragmentada, lo que no ayuda a los desarrolladores.
Por ejemplo, Android tiene cientos de dispositivos diferentes en el mercado. Algunos tienen una pantalla de 3,4'', otros de 7'' o 10''. Algunos funcionan con Android 2.1 y otros con Android 4.3. Algunos tienen 3G, GPS y una pantalla de 300 ppp (puntos por pulgada/densidad de píxeles), HD Ready o Full HD. Las combinaciones posibles son intimidantes y lo cierto es que cada usuario espera que su aplicación funcione a la perfección en su dispositivo.
Algunos aspectos importantes a tener en cuenta son:
- Decidir qué herramienta/marco/enfoque utilizar es una decisión crítica que debe ser cuidadosamente pensada antes de comenzar cualquier trabajo de desarrollo
- Rendimiento en dispositivos antiguos... el listón tiene que ponerse en algún momento.
- Responder rápidamente y con éxito a las quejas/bugs/solicitudes de características en el Android Market y la App Store. Recordar lo de tener bases de código duplicadas...
- Encontrar el enfoque de marketing adecuado y el valor de una aplicación (esquema freemium o basado en anuncios). Algunas estrategias de marketing requieren mucha personalización en el código. Asegúrate de planificar todo.