Published 16 years ago
(updated 13 years ago)
Cumpliendo casi un año en nuestro País, el teléfono producido por la empresa de la manzana ha empezado a tomar fuerza a través de sus aplicaciones, tanto en el aspecto casual en el cual podemos encontrar aplicaciones para consultar la cartelera del cine, video juegos e incluso revistas digitales, hasta el entorno empresarial con lectores de noticias, manejo de finanzas, entre muchos otros. Esto ha generado una oferta de trabajo nueva para el mercado mexicano: ingenieros de software con perfil para desarrollar tanto para Mac OS X como para iPhone OS.Aprender a desarrollar para iPhone puede tener muchas oportunidades, la más tentadora por supuesto es vender nuestras aplicaciones en la App Store aunque también la necesidad de software a la medida empresarial comienza a crecer. Cualquiera que sea tu motivación, esto puede traerte una gran retribución.
¿Qué necesito?
Una computadora Apple con procesador Intel.
El iPhone SDK que es la plataforma de desarrollo para iPhone OS. Esta es gratuita y se puede descargar desde el sitio de Apple Developer Connection (developer.apple.com).
Aunque la plataforma de desarrollo nos proporciona un simulador de iPhone bastante confiable, es recomendable tener ya sea un iPod Touch o un iPhone. Estar inscrito en el iPhone Developer Program
Standard el cual nos permitirá instalar la aplicación en nuestros dispositivos, como también permite el acceso a la App Store como medio de distribución.
Conociendo la plataforma
Es importante conocer primeramente cuales son las características de la plataforma, desde el lenguaje de programación hasta los frameworks que se utilizan en el desarrollo de iPhone.
Objective-C
Objective C es el lenguaje de programación utilizado para programar aplicaciones para iPhone. Es un lenguaje orientado a objetos creado en los años ochenta por la empresa Stepstone y posteriormente licenciado por NeXT Computer. Estos últimos extendieron el lenguaje de varias maneras, por ejemplo creando los NeXTStep frameworks que preceden a Cocoa. Podemos entender a Objective-C como una extensión del ANSI C, lo cual nos permitirá utilizar todos los beneficios de C. Gracias a esto podemos implementar clases en un paradigma orientado a objetos o también hacerlo de manera estructurada.
Aunque podemos definir que C# o Java tienen sus orígenes en C o C++, la sintaxis de Objective-C puede causarnos confusión en un principio, como ejemplo podemos analizar las siguientes líneas de código:
Sintaxis Objective-C
(NSEvent *)nextEventMatchingMask:
(unsigned int)mask untilDate:(NSDate *)
expirationDate inMode:(NSString *)mode
dequeue:(BOOL)dequeue
Representación en C#
nextMatchingEvent(int mask, NSDate expiration, String mode, boolean flag);
A pesar de que son expresiones que en el fondo pueden interpretarse como la misma, las sintaxis son totalmente distintas. Por lo tanto nuestra primera recomendación es estudiar bien el lenguaje, esto debido a que puede agregarnos un grado mayor de complejidad durante el proceso de aprendizaje.
Una referencia útil es el tutorial “Object-Oriented Programming with Objective-C” disponible en developer.apple.com/iphone donde se explican a detalle las particularidades del lenguaje.
Arquitectura
Para entender a grandes rasgos el funcionamiento del dispositivo, y más importante, cómo es que nuestra aplicación convive con el mismo, debemos conocer como funciona la plataforma y qué partes la componen. Similar al Mach Kernel encontrado en Mac OS X, se encuentra el componente más importante: el Kernel de iPhone OS. Encima de éste se encuentran diversas capas las cuales nos proporcionan los servicios que darán vida a nuestra aplicación.

Core OS. Rodeando al Kernel, los drivers y las interfaces del sistema operativo, ésta capa nos ofrece la oportunidad de acceder a las características de bajo nivel como pueden ser las más importantes: hilos, uso de la red, acceso al sistema de archivos, I/O y asignación de memoria . Algo importante a tener en cuenta es que ésta capa y sus interfaces están construidas en C, por lo que usarlas nos puede agregar complejidad extra.
Core Services. Ofrece los principales servicios que todas las aplicaciones utilizan de manera directa o indirecta. Esta capa es muy importante debido a que en ella encontramos los servicios de Acceso a Datos con SQLite, Seguridad, conexiones
HTTP-FTP y soporte XML. Los frameworks mas importantes que la componen son los siguientes:
Core Foundation. Brinda soporte para colecciones de datos, cadenas, bundles, manipulación
de URL y streams, soporte multi hilos y conexiones por puerto y socket.
CFNetwork. Construido en C, nos provee de manera simplificada el uso de conexiones HTTP-FTP, además de la resolución de Host DNS.
Core Location. Una de las principales características de iPhone es la capacidad de saber en qué longitud y latitud del mundo nos encontramos. A través de este framework podemos averiguar esta información.
Media
Si tienes en mente un video juego o una aplicación
con contenidos, ésta es la capa que más te interesa. Permite crear aplicaciones visualmente atractivas con pintado en 2D o 3D, animaciones, audio y video. Todo esto a través de los siguientes frameworks:
Core Graphics. Contiene las interfaces de dibujo de Quartz 2D. Este motor de dibujo en vectores que también podemos encontrar en Mac OS X provee soporte para degradados, colores y transformaciones de coordenadas. Sin embargo, una de sus características más atractivas es la creación y visualización de documentos PDF.
Quartz Core. También conocido como Core Animation. Como su nombre lo dice, expone las interfaces necesarias para el manejo de animaciones dentro de la aplicación.
Open GL ES. Framework con interfaces en C. Provee todo lo necesario para trabajar objetos en 2D y 3D con alto desempeño ya que tiene una fuerte integración con el hardware del dispositivo. Seguramente tu mejor opción al construir un video juego o gráficas vistosas para el análisis de datos.
Core Audio. Entre sus funciones principales se encuentran el grabado, mezcla y reproducción de archivos de audio. En él también se exponen las interfaces de vibración del dispositivo.
Media Player. Presenta el soporte para visualización de videos a pantalla completa. Entre los formatos soportados están mov y mp4.
Cocoa Touch
Es la principal capa para la construcción de aplicaciones, ya que provee la infraestructura
necesaria para manejar desde la interacción del usuario y las vistas, hasta la internacionalización de nuestra aplicación. Principalmente se compone de dos frameworks:
UIKit Framework. Principalmente utilizado para el manejo de la aplicación, ventanas y eventos del usuario. También a través de él se interactúa con el acelerómetro y la cámara. Este framework es el más utilizado por todas las aplicaciones de iPhone. Foundation Framework. Encapsulando la funcionalidad expuesta por el Core Framework del cual hablábamos anteriormente, nos brinda de una manera más sencilla de manejar arreglos, cadenas, fechas, e internacionalización entre otras.
Las Herramientas
El iPhone SDK nos provee de distintas aplicaciones para llevar a cabo nuestra construcción. Cada una tiene su funcionalidad específica y por lo tanto una curva de aprendizaje propia. Al migrar de otros IDEs como Visual Studio donde toda la funcionalidad está integrada bajo una misma interfaz de usuario, podemos sentirnos incómodos por utilizar varias herramientas a la vez, pero posteriormente con el trabajo continuo apreciaremos esta segmentación.
Xcode
Amigable y poderoso, este IDE nos permite administrar nuestro proyecto y los archivos que lo componen, compilarlos para ejecución y depurarlos ya sea en el simulador o en un dispositivo.
Xcode cuenta con un editor de texto con “code completion” el cual ofrece una funcionalidad similar al Intelisense de Visual Studio. Por otro lado, la capacidad de “code folding” nos permite ocultar lineas de código, por ejemplo métodos terminados o que no serán trabajados en ese momento. Esto además de las características usuales como son “sintax coloring” y la visualización de errores o alertas dentro de nuestro código. Sin embargo también nos ofrece la oportunidad de trabajar con nuestro editor de texto preferido al integrarse de una manera bastante funcional. Cuanto trabajamos en equipo también es importante contar con un control de versiones. Entre los soportados por Xcode se encuentran
Subversion y CVS. Pero si eres fanático de Git encontraras varios Scripts y recetas creadas por la comunidad para poder trabajar con este repositorio de código fuente. Para aprender a utilizar Xcode a profundidad, te recomiendo visitar su sitio dentro del Apple Developer Connection (developer.apple.com/tools/xcode). Ahí encontrarás desde cómo realizar la depuración hasta la automatización de tareas de desarrollo.
Interface Builder (IB)
Interface Builder nos permite diseñar la interfaz gráfica de nuestra aplicación partiendo de componentes precompilados (controles), manejar sus configuraciones particulares y la manera en que interactúan con nuestro código. Es de suma importancia documentarnos correctamente acerca de un control a ser utilizado, debido a que algunos de ellos pueden requerir una implementación especial,
como por ejemplo responder llamadas de algún delegado.
Al referirnos a Interfaz Gráfica, por ejemplo en Visual Studio con los Windows Forms podemos encontrar que son archivos de código donde se declaran todos los controles que la componen, así como otras propiedades de la misma. Sin embargo al hacer la misma referencia cuando desarrollamos en iPhone encontramos un grupo de archivos de extensión “xib”, los cuales son archivos de recursos en formato XML generados por una herramienta de diseño de interfaces, Interface Builder.
Un buen lugar para empezar es la Guia de Usuario de Interface Builder, disponible también en el sitio web de Apple Developer Connection. En ella se explican a detalle las tareas más comunes cuando construimos interfaces y las conectamos a nuestro código.

Instruments
Partiendo del punto en el que nuestra aplicación
se ejecutara en un dispositivo móvil con recursos limitados, ésta deberá estar construida para optimizar recursos, sobre todo en la asignación de memoria. Aquí es donde entra Instruments. Esta herramienta nos permitirá medir a detalle el manejo dememoria, uso de disco, conexión a la red y el rendimiento del motor gráfico.
Recabando los datos ya sea del dispositivo o del simulador nos presentará una serie de líneas de tiempo donde podremos agregar los medidores que hagan sentido para evaluar todos los aspectos del comportamiento de la aplicación y a su vez nos facilitará la comparación y análisis entre ellos. Una de sus principales características será la capacidad de grabar lo ejecutado en nuestra interfaz gráfica, permitiendo reproducirlo las veces que sea necesario para analizar los distintos resultados arrojados.
Como se podrán imaginar, la guía de usuario de Instruments también se encuentra disponible en el Apple Developer Connection.
¿Donde empiezo?
A mi punto de vista uno de los mejores lugares para empezar es el iPhone Development Quick Start (tinyurl.com/dm4hrc). Éste es un tutorial muy completo y fácil de seguir donde paso a paso irás construyendo aplicaciones en base a lo que hemos leído en este artículo.
Consejos Finales
Identifica cual dispositivo es tu objetivo, ya que en base a eso deberás basar tus características.
Como un buen ejemplo, el uso de la cámara únicamente será posible en un iPhone y no en un iPod Touch.
Respeta el manejo de la memoria del dispositivo,
así evitaras que tu aplicación se cierre en la visualización de un documento importante o justo en el momento en el que tienes toda la atención del usuario.
Toma en cuenta siempre la experiencia del usuario por que ellos sí lo toman en cuenta.
Usa los recursos del dispositivo de forma conservadora. A ningún usuario le gustará que la batería del dispositivo se agote rápidamente al utilizar tu aplicación.
La documentación que acompaña al iPhone SDK es tu mejor aliada en este proceso ya que es fácil de
entender y muy completa.
Acerca del Autor
Juan José Karam es un ingeniero de software multidiciplinario enfocado en la arquitectura y desarrollo de alta tecnología para emLink. Es expositor en la comunidad CocoaHeads México (cocoaheads.org.mx) y devoto practicante de Scrum. juan.karam@thesharpcode.com
¿Qué necesito?
Una computadora Apple con procesador Intel.
El iPhone SDK que es la plataforma de desarrollo para iPhone OS. Esta es gratuita y se puede descargar desde el sitio de Apple Developer Connection (developer.apple.com).
Aunque la plataforma de desarrollo nos proporciona un simulador de iPhone bastante confiable, es recomendable tener ya sea un iPod Touch o un iPhone. Estar inscrito en el iPhone Developer Program
Standard el cual nos permitirá instalar la aplicación en nuestros dispositivos, como también permite el acceso a la App Store como medio de distribución.
Conociendo la plataforma
Es importante conocer primeramente cuales son las características de la plataforma, desde el lenguaje de programación hasta los frameworks que se utilizan en el desarrollo de iPhone.
Objective-C
Objective C es el lenguaje de programación utilizado para programar aplicaciones para iPhone. Es un lenguaje orientado a objetos creado en los años ochenta por la empresa Stepstone y posteriormente licenciado por NeXT Computer. Estos últimos extendieron el lenguaje de varias maneras, por ejemplo creando los NeXTStep frameworks que preceden a Cocoa. Podemos entender a Objective-C como una extensión del ANSI C, lo cual nos permitirá utilizar todos los beneficios de C. Gracias a esto podemos implementar clases en un paradigma orientado a objetos o también hacerlo de manera estructurada.
Aunque podemos definir que C# o Java tienen sus orígenes en C o C++, la sintaxis de Objective-C puede causarnos confusión en un principio, como ejemplo podemos analizar las siguientes líneas de código:
Sintaxis Objective-C
(NSEvent *)nextEventMatchingMask:
(unsigned int)mask untilDate:(NSDate *)
expirationDate inMode:(NSString *)mode
dequeue:(BOOL)dequeue
Representación en C#
nextMatchingEvent(int mask, NSDate expiration, String mode, boolean flag);
A pesar de que son expresiones que en el fondo pueden interpretarse como la misma, las sintaxis son totalmente distintas. Por lo tanto nuestra primera recomendación es estudiar bien el lenguaje, esto debido a que puede agregarnos un grado mayor de complejidad durante el proceso de aprendizaje.
Una referencia útil es el tutorial “Object-Oriented Programming with Objective-C” disponible en developer.apple.com/iphone donde se explican a detalle las particularidades del lenguaje.
Arquitectura
Para entender a grandes rasgos el funcionamiento del dispositivo, y más importante, cómo es que nuestra aplicación convive con el mismo, debemos conocer como funciona la plataforma y qué partes la componen. Similar al Mach Kernel encontrado en Mac OS X, se encuentra el componente más importante: el Kernel de iPhone OS. Encima de éste se encuentran diversas capas las cuales nos proporcionan los servicios que darán vida a nuestra aplicación.

Core OS. Rodeando al Kernel, los drivers y las interfaces del sistema operativo, ésta capa nos ofrece la oportunidad de acceder a las características de bajo nivel como pueden ser las más importantes: hilos, uso de la red, acceso al sistema de archivos, I/O y asignación de memoria . Algo importante a tener en cuenta es que ésta capa y sus interfaces están construidas en C, por lo que usarlas nos puede agregar complejidad extra.
Core Services. Ofrece los principales servicios que todas las aplicaciones utilizan de manera directa o indirecta. Esta capa es muy importante debido a que en ella encontramos los servicios de Acceso a Datos con SQLite, Seguridad, conexiones
HTTP-FTP y soporte XML. Los frameworks mas importantes que la componen son los siguientes:
Core Foundation. Brinda soporte para colecciones de datos, cadenas, bundles, manipulación
de URL y streams, soporte multi hilos y conexiones por puerto y socket.
CFNetwork. Construido en C, nos provee de manera simplificada el uso de conexiones HTTP-FTP, además de la resolución de Host DNS.
Core Location. Una de las principales características de iPhone es la capacidad de saber en qué longitud y latitud del mundo nos encontramos. A través de este framework podemos averiguar esta información.
Media
Si tienes en mente un video juego o una aplicación
con contenidos, ésta es la capa que más te interesa. Permite crear aplicaciones visualmente atractivas con pintado en 2D o 3D, animaciones, audio y video. Todo esto a través de los siguientes frameworks:
Core Graphics. Contiene las interfaces de dibujo de Quartz 2D. Este motor de dibujo en vectores que también podemos encontrar en Mac OS X provee soporte para degradados, colores y transformaciones de coordenadas. Sin embargo, una de sus características más atractivas es la creación y visualización de documentos PDF.
Quartz Core. También conocido como Core Animation. Como su nombre lo dice, expone las interfaces necesarias para el manejo de animaciones dentro de la aplicación.
Open GL ES. Framework con interfaces en C. Provee todo lo necesario para trabajar objetos en 2D y 3D con alto desempeño ya que tiene una fuerte integración con el hardware del dispositivo. Seguramente tu mejor opción al construir un video juego o gráficas vistosas para el análisis de datos.
Core Audio. Entre sus funciones principales se encuentran el grabado, mezcla y reproducción de archivos de audio. En él también se exponen las interfaces de vibración del dispositivo.
Media Player. Presenta el soporte para visualización de videos a pantalla completa. Entre los formatos soportados están mov y mp4.
Cocoa Touch
Es la principal capa para la construcción de aplicaciones, ya que provee la infraestructura
necesaria para manejar desde la interacción del usuario y las vistas, hasta la internacionalización de nuestra aplicación. Principalmente se compone de dos frameworks:
UIKit Framework. Principalmente utilizado para el manejo de la aplicación, ventanas y eventos del usuario. También a través de él se interactúa con el acelerómetro y la cámara. Este framework es el más utilizado por todas las aplicaciones de iPhone. Foundation Framework. Encapsulando la funcionalidad expuesta por el Core Framework del cual hablábamos anteriormente, nos brinda de una manera más sencilla de manejar arreglos, cadenas, fechas, e internacionalización entre otras.
Las Herramientas
El iPhone SDK nos provee de distintas aplicaciones para llevar a cabo nuestra construcción. Cada una tiene su funcionalidad específica y por lo tanto una curva de aprendizaje propia. Al migrar de otros IDEs como Visual Studio donde toda la funcionalidad está integrada bajo una misma interfaz de usuario, podemos sentirnos incómodos por utilizar varias herramientas a la vez, pero posteriormente con el trabajo continuo apreciaremos esta segmentación.
Xcode
Amigable y poderoso, este IDE nos permite administrar nuestro proyecto y los archivos que lo componen, compilarlos para ejecución y depurarlos ya sea en el simulador o en un dispositivo.
Xcode cuenta con un editor de texto con “code completion” el cual ofrece una funcionalidad similar al Intelisense de Visual Studio. Por otro lado, la capacidad de “code folding” nos permite ocultar lineas de código, por ejemplo métodos terminados o que no serán trabajados en ese momento. Esto además de las características usuales como son “sintax coloring” y la visualización de errores o alertas dentro de nuestro código. Sin embargo también nos ofrece la oportunidad de trabajar con nuestro editor de texto preferido al integrarse de una manera bastante funcional. Cuanto trabajamos en equipo también es importante contar con un control de versiones. Entre los soportados por Xcode se encuentran
Subversion y CVS. Pero si eres fanático de Git encontraras varios Scripts y recetas creadas por la comunidad para poder trabajar con este repositorio de código fuente. Para aprender a utilizar Xcode a profundidad, te recomiendo visitar su sitio dentro del Apple Developer Connection (developer.apple.com/tools/xcode). Ahí encontrarás desde cómo realizar la depuración hasta la automatización de tareas de desarrollo.
Interface Builder (IB)
Interface Builder nos permite diseñar la interfaz gráfica de nuestra aplicación partiendo de componentes precompilados (controles), manejar sus configuraciones particulares y la manera en que interactúan con nuestro código. Es de suma importancia documentarnos correctamente acerca de un control a ser utilizado, debido a que algunos de ellos pueden requerir una implementación especial,
como por ejemplo responder llamadas de algún delegado.
Al referirnos a Interfaz Gráfica, por ejemplo en Visual Studio con los Windows Forms podemos encontrar que son archivos de código donde se declaran todos los controles que la componen, así como otras propiedades de la misma. Sin embargo al hacer la misma referencia cuando desarrollamos en iPhone encontramos un grupo de archivos de extensión “xib”, los cuales son archivos de recursos en formato XML generados por una herramienta de diseño de interfaces, Interface Builder.
Un buen lugar para empezar es la Guia de Usuario de Interface Builder, disponible también en el sitio web de Apple Developer Connection. En ella se explican a detalle las tareas más comunes cuando construimos interfaces y las conectamos a nuestro código.

Instruments
Partiendo del punto en el que nuestra aplicación
se ejecutara en un dispositivo móvil con recursos limitados, ésta deberá estar construida para optimizar recursos, sobre todo en la asignación de memoria. Aquí es donde entra Instruments. Esta herramienta nos permitirá medir a detalle el manejo dememoria, uso de disco, conexión a la red y el rendimiento del motor gráfico.
Recabando los datos ya sea del dispositivo o del simulador nos presentará una serie de líneas de tiempo donde podremos agregar los medidores que hagan sentido para evaluar todos los aspectos del comportamiento de la aplicación y a su vez nos facilitará la comparación y análisis entre ellos. Una de sus principales características será la capacidad de grabar lo ejecutado en nuestra interfaz gráfica, permitiendo reproducirlo las veces que sea necesario para analizar los distintos resultados arrojados.
Como se podrán imaginar, la guía de usuario de Instruments también se encuentra disponible en el Apple Developer Connection.
¿Donde empiezo?
A mi punto de vista uno de los mejores lugares para empezar es el iPhone Development Quick Start (tinyurl.com/dm4hrc). Éste es un tutorial muy completo y fácil de seguir donde paso a paso irás construyendo aplicaciones en base a lo que hemos leído en este artículo.
Consejos Finales
Identifica cual dispositivo es tu objetivo, ya que en base a eso deberás basar tus características.
Como un buen ejemplo, el uso de la cámara únicamente será posible en un iPhone y no en un iPod Touch.
Respeta el manejo de la memoria del dispositivo,
así evitaras que tu aplicación se cierre en la visualización de un documento importante o justo en el momento en el que tienes toda la atención del usuario.
Toma en cuenta siempre la experiencia del usuario por que ellos sí lo toman en cuenta.
Usa los recursos del dispositivo de forma conservadora. A ningún usuario le gustará que la batería del dispositivo se agote rápidamente al utilizar tu aplicación.
La documentación que acompaña al iPhone SDK es tu mejor aliada en este proceso ya que es fácil de
entender y muy completa.
Acerca del Autor
Juan José Karam es un ingeniero de software multidiciplinario enfocado en la arquitectura y desarrollo de alta tecnología para emLink. Es expositor en la comunidad CocoaHeads México (cocoaheads.org.mx) y devoto practicante de Scrum. juan.karam@thesharpcode.com
- Log in to post comments