Mi primera aplicación en iOS y lo que ello ha implicado (Parte I)

Como hobby durante el verano he decido meterme a desarrollador de aplicaciones móviles, específicamente para iOS. Me parece una plataforma estupenda, no sólo como usuario, sino por lo que he visto de sus APIs y lo que muchos han hecho. Así que quería subirme al carro.

Después de consultar para arriba y para abajo los temas de impuestos acá en España, y dado mi status de residente, he decidido (por ahora) tenerlo como lo que ya dije, un simple hobby, sin cobrar por mis aplicaciones; no se alegren mucho que en cuanto pueda ya colaré alguna que otra paga ;).

Lo primero fue registrarme al programa de desarrollo. Los dos primeros pasos ya los tenía hechos: tenía mi cuenta Apple ID (con la que compro en la App Store y me registro en los demás servicios de Apple), y estaba dado de alta como desarrollador (en su versión light, gratuita). El tercer paso fue comprar el programa de desarrollo para iOS, 79€ (que, lo crean o no, es casi casi el cambio desde el dólar, al menos en estos días), das tus datos, en mi caso usé la misma tarjeta de crédito que la que tengo asociada a la App Store, pago y a esperar a que me den de alta.

El proceso fue rápido, salvando un pequeño problema: las tildes en la dirección de mi piso se trastocaron en el proceso y llegaron como caracteres erróneos, y el proceso automático de validación de mi tarjeta se frenó en seco. Esos datos resulta que no se pueden modificar directamente sino que hay que solicitar un cambio. Después de escribir al servicio de atención al cliente, esperé. A los dos días recibo una llamada directa desde California, donde un chico me comenta que se procederá a hacer el cambio. La llamada era para explicar personalmente lo que había pasado, pedir disculpas por las molestias, y decirme que me mandarían un email con las instrucciones, incluida una autorización de modificación de datos. Simplemente debía responder sobre el email y autorizarles a cambiar los datos. Después de 10min de haber hablado con él me llega el correo, el cual contesto inmediatamente. 10min después ya tenía acceso al programa de desarrollo. Aunque tuve este problema durante el registro, el servicio de atención al cliente de Apple hizo honor a su fama una vez más, y el detalle de la llamada la verdad que me emocionó.

Bueno, una vez en casa descargo todo: entorno de desarrollo (4.2 beta 2), sistema operativo (iOS 5 beta 2), iTunes correspondiente (10.5 beta 2). Claro, yo estoy de fiebrúo que quería probarlo todo. Ya he tomado nota de que, si me dedico más en serio a esto, comprar un dispositivo adicional, un iPod Touch, para tener las versiones beta, e incluso dejarlo en el portátil, desde el que no sincronizo nada, porque, como buenas betas, tienen sus fallos, bugs, no necesariamente están todavía optimizadas. Gracias a Dios no sufrí ninguna pérdida de datos, pero fue arriesgado. En fin, lo instalé todo y comencé a desarrollar.

La primera aplicación la elegí por sencillez, dado que necesito una rampa de aprendizaje y no tengo presiones de proyectos (que por otra parte no vendrían mal). La aplicación en cuestión es una adaptación de la cámara del iPhone, para poder tomar fotos y ver exactamente cómo quedarán cuando se usen como fondo de pantalla. La cámara toma con una relación de aspecto de 4:3, mientras que la pantalla es 3:2, por lo que la foto que uno toma no siempre se ve bien como fondo: bordes negros, la cara de alguien es tapada por la interfaz del reloj, etc. Lo que hice fue simular dicha interfaz en la cámara (usando un overlay). Aunque no está disponible en la App Store todavía, pueden ver algunos screenshots en la página de la aplicación.

Creo, opinión personal, que la parte más complicada de comenzar a programar en iOS es el tema del MVC (Model View Controller), que es bastante confuso al principio. No ahondaré acá en ello en estos momentos, así que remito a la bibliografía para más información. Una vez superada esta barrera, el resto es lo típico de cualquier API nueva: el nombre de las funciones, buscar cómo se comunica esto con aquello. El lenguaje de programación no ha sido problema: Objective-C no es un conocido C++ o un Java, es bastante diferente en cuanto a algunas sintaxis (métodos, declaración de clases, destructores, gestión de memoria), pero es un buen hijo de C y se aprende rápido; de hecho, una cosa que me ha gustado mucho es lo autodocumentado que queda el código gracias a métodos como

UIImage *image = [[UIImage alloc] initWithCGImage:imageOr.CGImage scale:imageOr.scale orientation:UIImageOrientationRight];

Esta aplicación tuvo una componente artística que prácticamente era una tercera parte del proyecto: simular la pantalla de bloqueo. Ahora bien, es cierto que el preparar los recursos de una aplicación siempre conlleva un tiempo no despreciable, y se nota cuándo un desarrollador no sabe pelearse con un programa de diseño o no tiene a un diseñador en el equipo. Bueno, el caso es que dupliqué la interfaz, con cambios suficientes para adaptarla a ser una “cámara”, y cambiando pequeños detalles para no confundir al usuario. El icono de la aplicación y los fondos también me llevaron su tiempo, pero, repito, eso es necesario: una aplicación debe verse bien, no sólo funcionar bien (y no entraré en una pelea de lo que pasa con muchos proyectos open source… pero lo dejo caer :p).

Probar la aplicación en el móvil no fue mayor problema: hay que bajarse los certificados con los que se firmarán las aplicaciones y registrar el dispositivo como “de desarrollo”. Una vez hecho esto, el propio Xcode sube la aplicación, ejecutando a la par el depurador. Sugiero que, si no se está buscando un fallo específico, sino probando la aplicación para ver cómo va la cosa, se suba, al menos, con el depurador desactivado, ya que ralentiza bastante la carga de las vistas (iniciar aplicación con el debugger: 10seg, sin el debugger: casi instantáneo).

Una vez terminada la aplicación (un par de semanas, trabajando 4 tardes a la semana y un par de madrugones), hay que subirla. Acá sufrí un poco más, porque el proceso está documentado bien para la versión 3.2 de Xcode, pero con la 4.2 algunas cosas han cambiado de lugar y no han actualizado todo. Los pasos, más o menos, a seguir, son: registrarse en el iTunes Connect, registrar la aplicación (luego una nota sobre el Bundle ID y el nombre de la aplicación), subir los iconos, screenshots, descripción, etc. Una vez hecho esto, la aplicación pasa a estar en estado “Waiting for upload”. En este momento, vamos a Xcode, la compilamos en modo “distribution” (que creamos nosotros como una copia del modo “release” pero firmando con el certificado de distribución en vez del de desarrollo), y la “archivamos”. En el Organizer del Xcode validamos que hemos firmado bien la aplicación y que su fichero de información es correcto (es un proceso automático), y la subimos para revisión. Más no puedo contar porque ahí estoy ahora… esperando.

Respecto al Bundle ID, es importante saber que debe ser algo como: 23487BJ343.com.nosotros.aplicacion, donde 23487BJ343 es nuestro App ID que se nos ha asignado en el Provisioning Portal (donde obtenemos los certificados). Este Bundle ID debe ser idéntico tanto en el Info.plist de la aplicación, como en la página de iTunes Connect; es, en pocas palabras, el que identifica a nuestra aplicación y el que permite que cuando subamos una actualización los usuarios sean informados de ello. Del nombre de la aplicación, una vez asignado, si se borra la aplicación, no se puede volver a usar. Así que escoger bien.

Por último, lo del “distribution” y el “archivar”, estos valores se controlan desde los “esquemas”. Sugiero crear dos básicamente: el de desarrollo (depuración), que es el que se creará cuando creemos el proyecto, y uno en modo “release” con el “archivar” en modo “distribution”. De esta forma, se tiene un esquema con el cual probar al final del ciclo de desarrollo y probar la aplicación en su forma final. Nota: el certificado con el que se firma en modo “distribution” no sirve para ejecutar la aplicación en nuestro terminal de desarrollo, así que asignar este certificado sólo al “archivar”, no al “ejecutar”.

Bueno, un post algo largo y con muchas palabras, pero que creo que resume lo que ha sido mi experiencia en este primer desarrollo, hasta ahora bastante satisfactoria. En una siguiente entrega hablaré más de aspectos técnicos y, si ya me han aprobado la aplicación, daré la noticia también. ¡Hasta luego!