Mi primera aplicación para iPhone. (Experiencias con Apple)

Algo que tenía pendiente, y que sabía que tarde o temprano tendría que aprender es a programar para iOS, desde que tengo el iPhone no dejo de sorprenderme de las cosas que se pueden hacer con este aparatito. Aprovechando la excusa de hacer un cliente móvil para BiblioEteca me puse manos a la obra y pude comprobar los pros y contras de programar para iOS.

Pero antes de continuar escribiendo nada sobre el particular, me gustaría que pudieseis ver el video que preparé (gracias al iMovie) sobre la aplicación gratuita que ya está en la appstore de apple:

El resultado no es perfecto, pero si que es lo suficientemente llamativo para ser considerada una aplicación adecuada para el móvil. todavía no he terminado su desarrollo y tengo más ideas interesantes para implementar en la aplicación, pero ya me ha permitido programar en la plataforma iOS y subir a la appstore una aplicación y una actualización de la misma. Este post es un resumen de mis experiencias con apple.

Después de varios años programando en Java, con incursiones en C y C++ (que, a mi entender, es el lenguaje más completo que hay), hacer cositas en PHP, Javascript y frameworks varios, creí que aprender un lenguaje más no iba a ser demasiado complicado y es que Apple utiliza objective-c como base de todos sus desarrollos. Tal como reza la definición de este lenguaje, se trata de un superconjunto de c, pero orientado a objetos… Creí que iba a ser algo parecido a C++… Pero no, no se parece en casi nada. Es más, en lo que a sintaxis se refiere, solo tienen en común la base del C, pero el resto no tiene nada que ver la sintaxis de orientación a objetos de C++ y la de objective-c.

Gracias a DiosJobs, la programación en iOS se basa en el uso del entorno de desarrollo Xcode y las herramientas adicionales Interface Builder, todo ello se puede descargar gratuitamente y sin requisito alguno, excepto que debe correr en un ordenador con OS-X. Por suerte yo ya me había comprado mi macbook hace tiempo, aunque tuve que actualizarlo a Snow Leopard para poder instalar la última versión de Xcode… Parece un detalle sin importancia, pero el hecho de que todos los desarrolladores para iPhone deban tener uno o varios Mac para desarrollo ha debido aportar unas cuantas ventas a Jobs. El caso es que la utilización de Xcode, aunque un poco diferente de las herramientas de Java a las que estaba acostumbrado, es bastante cómoda y la herramienta es robusta 100%.

Superado el tema de los entornos, lo siguiente era saber dónde encontrar documentación para aprender, me decidí a comprar un par de libros en amazon (iphone application development y The iphone developer’s cookbook)y otro (Desarrollo de aplicaciones para iphone) que encontré en Español, que resultó ser la traducción del primero que compré en Amazon, además, eliminando el color de la edición inglesa y costando más que los otros dos libros (cosas de las editoriales patrias). Sobre estos libros, tengo que decir que el primero comprado en Amazon me fue más que suficiente para iniciarme en el desarrollo para iPhone (y está bastante actualizado) y el segundo me sirve más de referencia que de guía. Hay muchísimos libros en inglés sobre el tema y, otra cosa que descubrí, es que hay una comunidad de programadores ahí fuera, no tan amplia como para Java o para productos open-source, pero si muy activa y colaboradora, por lo que buscar en internet siempre tiene su premio.

Lo siguiente que “choca” es la forma en la que poder probar en tu iphone… Simplemente, no puedes, es decir, no puedes si no has pagado previamente a apple por el registro en el programa de desarrolladores. Son unos 90$ y te dan para un año… Con ese pago ya te proporcionan perfiles de despliegue para que puedas probar en tu teléfono (o en unos cuantos dispositivos de desarrollo) tu aplicación. Si no, solo podrás probarlo con el simulador en el ordenador y, desde luego, no es lo mismo. A pesar de que el simulador de iPhone es casi perfecto, siempre es necesario ver tu aplicación funcionando en el teléfono real para poder detectar problemas. Así que, dicho y hecho, ya estamos suscritos y nos hemos instalado todos los certificados y demás (ahi hay que seguir la documentación al pie de la letra o podemos terminar sin saber cómo ejecutar nada en el teléfono). Eso si, una vez instalado puedes hasta depurar la ejecución en el mismo dispositivo.

Después de todos estos requisitos y, de muchas horas programando en un lenguaje extraño, descubrimos que objective-c tiene los mismos problemas de memoria que c y c++, es decir, que debes liberar la mayoría de lo que reservas (y yo que me había acostumbrado al GC de Java…) y que dejar las lagunas de memoria pueden hacer petar a la aplicación, sobre todo en un dispositivo con memoria limitada como es un teléfono móvil. Así que lo siguiente es “optimizar” la aplicación para que no perdamos memoria y nos aseguremos que lo que no liberamos a mano ordenamos que se libere más pronto que tarde… Sería una ardua tarea si no fuese porque, una vez más, apple nos ofrece la herramienta correcta: Instruments. La potencia de este profiler es infinita, os dejo una imagen de la pantalla para que os hagáis una idea, pero, desde luego, es de lo mejor que he usado para detectar problemas en programación, y todo super integrado con Xcode, permitiendo incluso ejecutar el profiler con el programa ejecutando en el teléfono (hacer click para ver más grande):

Una vez depurado y con todo en su sitio viene la parte que, a mi modo de ver, es más fastidiosa en la experiencia de programar para iphone, el subir la aplicación a la tienda… Primero hay que comprender bien el proceso, saber para qué sirve cada certificado y tener mucho cuidado en las cosas que ponemos en el itunesconnect (hay algunas cosas que no podremos deshacer)… Si todo ha ido bien, tendremos que poner imágenes para itunes, imágenes de volcados de pantalla y calificar la aplicación según su contenido (la mia pone que es para mayores de 12 años) y quedará pendiente de enviar el binario… Eso se hace desde el Xcode sin problemas si hemos instalado los perfiles de despliegue adecuados. Y entonces tenemos que esperar.

La primera vez que envié la aplicación tardaron cosa de una semana en asignarme a un revisor y casi 4 días en dar el ok a la aplicación (y eso que era sencillita). Por suerte, y como descargo, decir que la actualización tardó solo unas pocas horas en ser actualizada cuando terminé la siguiente versión.

En suma, y como resumen, la experiencia de programar para plataformas apple es, cuando menos, agradable, se nota que hay entornos de desarrollo maduros, sistemas de depuración y profiling adecuados, simuladores que funcionan siempre y bien y un flujo de trabajo bastante bien definido. Los puntos oscuros son el desconocimiento del lenguaje (subsanable) y lo desagradable de tener que estar firmando y dependiendo de certificados que caducan cada cierto tiempo para desarrollar (amén del dinero que hay que pagar).

Por si queréis descargaros la aplicación:

Seguiremos investigando…