Programando el iPhone
El 9 de enero del 2007, Steve Jobs mostró al mundo su visión de lo que debía ser un teléfono inteligente, el iPhone. Desde entonces se convirtió en una referencia tanto para los usuarios de teléfonos inteligentes como para los fabricantes rivales. Con millones de iPhones en todo el mundo, no es de extrañar que el AppStore se convirtiera en un éxito en el mismo momento de su lanzamiento y con él surgieran historias de desarrolladores de software volviéndose ricos prácticamente de la noche a la mañana.
Las características más resaltantes del iPhone, pantalla táctil con capacidad multitoque, acelerómetros, WiFi, reproducción de videos y música, GPS (en modelos más recientes), cámara, lo hacen un dispositivo móvil muy versátil. Si a todo esto le añadimos Cocoa Touch, es fácil entender por qué hay tantos desarrolladores aprendiendo programación iPhone.
Un destino, muchos caminos
Cuando se habla de hacer programas para iPhone uno piensa inmediatamente en Objective-C y Cocoa Touch. Para muchas aplicaciones éste es el único camino. Para otros tipos de aplicaciones existen alternativas. Veamos.
Aplicaciones Web
En el primer WWDC después del anuncio del iPhone, los desarrolladores de software esperaban ansiosamente que los ingenieros de Apple presentaran herramientas e información de librerías. Y se encontraron con una sorpresa mayúscula: los ingenieros solamente mostraron cómo desarrollar aplicaciones Web. Y por casi un año ésta era la única manera.
¿Por qué perder el tiempo en aplicaciones Web?
Primero, no es perder el tiempo. Es una vía muy legítima de desarrollar aplicaciones. ¿Quién le dice a Google, Yahoo, Facebook, etc, etc, que están malgastando su tiempo? Las aplicaciones de correo Web hoy en día se asemejan mucho a sus equivalentes en computadoras de escritorio y no sólo en apariencia sino también en funcionalidad.
Segundo, gracias a la popularidad de la Web muchas personas están capacitadas para hacer algo en HTML/CSS/JavaScript. Si uno tiene una duda o problema, nunca faltan personas dispuestas a aportar su experiencia.
Tercero, como consecuencia de lo anterior hay muchas buenas herramientas que ayudan a desarrollar programas Web. Dashcode es la herramienta de Apple. NimbleKit es otro ejemplo.
Cuarto, es posible hacer juegos interactivos usando HTML, CSS y JavaScript. Y para probarlo, revise el extenso catálogo que mantiene Apple.
Quinto, no es necesaria la aprobación de Apple para publicarlos. El proceso por el cual debe pasar toda aplicación antes de poder aparecer en la tienda de aplicaciones de Apple puede durar varias semanas. Muchos desarrolladores de software están muy descontentos con este proceso y algunos hasta anunciaron públicamente que abandonaban la plataforma como protesta.
La pregunta: si es una aplicación Web, ¿solamente se podrá usar cuando hay conexión a Internet?
No. Gracias a HTML 5 es posible guardar información de manera que pueda ser reusado posteriormente fuera de línea (sin conexión a Internet). Hay un artículo que explica lo que hay que hacer para aplicaciones Web sin conexión a Internet.
¿Limitaciones? Más que todo acceso limitado al hardware y no hay OpenGL ES para gráficos tridimensionales (esto cambiará cuando se popularice WebGL). También está que programas en JavaScript se ejecutan más lentamente que si fueran escritos en Objective-C y compilados. Finalmente, hay aspectos del interfaz del iPhone que no son fácilmente duplicables en HTML/CSS/JavaScript (existen librerías que intentan corregir esta deficiencia, entre ellas unas desarrolladas por Apple).
Si estas limitaciones no afectan su aplicación, considere seriamente el uso de tecnologías Web para su desarrollo.
Unity
Si su aplicación es un videojuego y HTML/CSS/JavaScript no es suficiente, Unity puede ayudarlo.
Unity es un sistema integrado para desarrollo de videojuegos. Es un producto comercial de Unity Technologies. Y Unity 2.6.1 para Mac OS X es gratis. Descárguelo y pruébelo.
Unity tiene soporte para gráficos tridimensionales que aprovecha OpenGL o DirectX.
¿DirectX? ¿No es una tecnología que solamente corre en Windows? Sí. Y aquí Unity muestra otra ventaja: es capaz de producir ejecutables para Mac OS X, Windows, Nintendo Wii y iPhone, existiendo requerimientos adicionales para las dos últimas plataformas. También es posible producir algo que corra en navegadores Web gracias a un plug-in.
Unity también ayuda en la parte de sonido, video, redes (para juegos multi-usuarios), paisajes (árboles, arbustos, rocas, grama), simulación de partículas (para lluvia, polvo, chispas, etc), sombras, simulación de fenómenos físicos, etc, etc.
Como se ve, es un sistema muy completo para el desarrollo de videojuegos. ¿Cuáles son las limitaciones?
Una es que cada ejecutable tiene que incluir todas las librerías de funciones que conforman Unity o, al menos, todas las que use el programa. Esto aumenta el tamaño del archivo. En Mac OS X, Wii o Windows no es problema, pero sí lo es para el iPhone, tanto porque tiene una capacidad de almacenamiento menor como porque el usuario tiene que descargarlo por Internet. Además, si el usuario tiene varios programas desarrollados en Unity, estas librerías se repiten tantas veces como programas hayan, con el consiguiente malgasto de espacio de almacenamiento.
Otra es la licencia de uso. Si bien Unity 2.6.1 es gratis, no lo es el módulo para generar archivos para iPhone. Además, si la compañía que use esta herramienta genera más de US$100.000 en el último año fiscal, debe usar la Unity Pro. Por supuesto, Unity Technologies tiene que ganar dinero por este producto, así que es comprensible.
Otra limitación depende de si tiene experiencia con los lenguajes de programación que usa, C# y JavaScript. C# viene del mundo Microsoft y JavaScript de la Web. Si se siente a gusto con alguno de estos lenguajes, bien. En caso contrario tendrá que aprender a usarlos o tolerarlos.
Hay que resaltar que si bien todo el soporte que dá favorece el desarrollo de videojuegos, no está limitado a éstos. Simulaciones, por ejemplo, pueden aprovechar este soporte.
Adobe Flash
"¿Flash? ¡Pero Apple no ha aceptado ningún Flash Player en iPhone?"
Sí, Apple implantó una regla que prohibe interpretadores en iPhone y el código Flash es interpretado. Claramente, ésta no es una posibilidad.
... A menos que Adobe lance una versión de Flash que sea compilado. Y ya tiene una versión beta que lo hace. Y hasta hay varios juegos en el AppStore que fueron programadas en Flash.
Se especula que Adobe usa tecnología LLVM para esto. Ya sabremos cuando salga la próxima versión de Flash.
Las ventajas de Flash:
- Debido a sus raíces, Flash es muy competente para realizar animaciones con sonido.
- ActionScript es el lenguaje usado para añadir interactividad a las animaciones Flash. Dada la popularidad de Flash, es fácil encontrar información, libros y ayuda en Internet.
Si su aplicación necesita muchas animaciones, Flash es su mejor opción.
Desventajas:
- Para aprovechar las capacidades especiales del iPhone, Adobe tiene que proporcionar librerías o extensiones para tener acceso a ellas. Si Apple añade capacidades adicionales (como lo hace cada año), tendremos que esperar a que Adobe agregue el soporte necesario.
- Cada archivo ejecutable deberá incluir todas las librerías que implementan Flash. Esto quiere decir que serán grandes.
Objective-C/Cocoa Touch
Desventajas:
- La sintaxis de Objective-C molesta a muchos programadores. Es curioso el violento rechazo que provocan unos simples corchetes y el uso de los dos puntos (:).
- La curva de aprendizaje de Cocoa Touch es muy empinada. Manejo de memoria, delegados, fuente de datos, bindings, codificación clave-valor, etc, etc. ¿Asustado?
- Cocoa Touch solamente se usa en programas para Macintosh y iPhone. Y no son fácilmente modificables para otros sistemas operativos.
Para ilustrar el primer punto, veamos una línea de un programa real.
Lo que hace esto es asignar a imagePath el camino del archivo dot.png que está en el directorio binary. Los nombres que comienzar por NS son clases. Lo que está entre corchetes son invocaciones a métodos. Así, tenemos que llamamos al método mainBundle de la clase NSBundle, el cual produce un objeto.
Lo interesante es qué hacemos con este objeto: invocamos el método pathForResource:ofType:inDirectory: con @"dot", @"png" y @"binary" como argumentos. @"dot" es sencillamente un string o cadena de caracteres. Note que el nombre del método es muy explícito pues especifica lo que es cada argumento.
¿De dónde vino esta sintaxis tan rara? De Smalltalk, uno de los primeros lenguajes de programación orientado a objetos.
En cuanto al segundo punto, la popularidad del iPhone ha resultado en muchos libros de introducción a la programación con Cocoa Touch. En Internet han aparecido un buen número de blogs, forums, tutoriales y páginas de preguntas y respuestas. Pero aún así es necesario un esfuerzo considerable para aprender Cocoa Touch.
El último punto tiene como atenuante que el iPhone ha llegado a ser tan popular que bien vale la pena el esfuerzo de adaptar programas de otros sistemas operativos. Éste es un efecto secundario que resultará en miles de programadores con conocimientos para desarrollar aplicaciones no solamente para el iPhone sino también para Mac.
Conclusión
Existe más de una forma de desarrollar aplicaciones para iPhone. Dependiendo de su aplicación, cada forma muestra ventajas y desventajas.
Publicado el 10 de enero del 2010.