Descargué el iPhone SDK y todo lo que obtuve fue esta mala camiseta

28
Julio
2008

Desde su anuncio en Febrero de este año, el iPhone SDK ha estado disponible para desarrolladores registrados de Apple (lo que es gratis) a través de sitio de desarrollo del iPhone, y desde hace ya unos cuantos días está disponible la versión final del SDK, que permite desarrollar tanto para los iPhone y los iPod Touch anteriores al 11 de Julio como para el nuevo iPhone 3G.

Si bien es cierto que con únicamente el SDK no podremos instalar aplicaciones en nuestros iPhone “físicos”, eso no significa que no podamos evaluar las capacidades del aparatito antes de pedir ser admitidos y pagar por pertenecer al selecto iPhone Developer Program.

Y como creo que el NDA del iPhone debe estar caducada ya, y por falta de contra-confirmación de Apple voy a hacer un pequeño tutorial, para demostrar que no es tan complicado como lo pintan.

El tutorial a continuación es una adaptación del segundo capítulo de Cocoa Programming for Mac OS X de Aaron Hillegass, un libro que todo desarrollador de Cocoa y Mac OS X debería leer, y que, gracias a las similitudes entre el desarrollo para el iPhone y para Mac OS X, todo desarrollador del iPhone debería tener cerca hasta que salgan libros con información específica.

Por supuesto sobra decir que para desarrollar este tutorial necesitaremos de un ordenador Apple con procesador Intel, Mac OS X Leopard y Xcode 3.1 con el SDK del iPhone instalados. También son necesarios conocimientos de Objective-C, o al menos de C y de algún lenguaje orientado a objetos (y capacidad para abstraer desde ese lenguaje a otros lenguajes orientados a objetos). Podéis utilizar la introducción a Objective-C que hice hace algunos años: Parte 1, 2, 3 y 4.

El proyecto que desarrollaremos será un generador de números aleatorios muy sencillo y con únicamente dos botones: uno que siembre (seed) el generador de números aleatorios y otro que genere nuevos números. El número generado será presentado en pantalla.

Empezaremos abriendo Xcode y crearemos un nuevo proyecto (FileNew Project…). De la lista de la izquierda elegiremos donde pone Application en la sección de iPhone OS y de entre los iconos de la derecha, el último, Window-Based Application. Cuando le demos al botón Choose… Xcode nos pedirá un nombre para el proyecto. Nosotros elegiremos RandomGenerator.

Diálogo de New Project…

El nuevo proyecto aparecerá en una ventana de proyecto de Xcode, con un esquema de los diferentes elementos del proyecto a la izquierda y una lista de archivos a la derecha. En la parte superior existen varios botones, entre ellos Build and Go que compilará la aplicación y la lanzará en el simulador del iPhone.

Ventana de proyecto

En estos momentos no aparecerá nada más que una pantalla blanca en el simulador del iPhone, pero nuestra aplicación estará funcionando (en realidad hemos hecho ya una aplicación para el iPhone: una “linterna”, ya hay varias en el AppStore, y alguna incluso se vende por $1).

Antes de empezar voy a hacer una lista de los archivos que aparecen en la ventana de proyecto, y explicar un poco porqué está ahí:

Foundation.framework
Los archivos acabados en .framework son las bibliotecas de código de Mac OS X. Foundation, por ejemplo, proporciona una serie de clases básicas al lenguaje Objective-C.
Info.plist
Las property lists (.plist) son archivos de Mac OS X que almacenan diferente información. Esta específicamente almacena el nombre del producto, su versión, el icono que se utilizará, etcétera.
main.m
El archivo principal de la aplicación (la extensión .m indica que es un archivo de implementación de Objective-C). Casi nunca modificaremos este archivo, que lo único que hace es invocar a la ventana principal de nuestra aplicación.
MainWindow.xib
Los archivos .xib sob la evolución de los antiguos archivos .nib, y son utilizados por la aplicación Interface Builder para definir como se ve la interfaz de usuario.
RandomGenerator.app
Este es el producto de nuestro proyecto, es decir, la aplicación ya compilada.
RandomGenerator.pch
Cabeceras pre-compiladas del proyecto. Mejor no tocarlo.
RandomGeneratorAppDelegator.h y .m
El código que ha generado Xcode establece que la ventana principal delegue toda su funcionalidad a una instancia de esta clase. Nos serviría para inicializar la aplicación o actuar durante su finalización. Por ahora no haremos nada con ella.
UIKit.framework
El equivalente a Cocoa.framework cuando desarrollamos para el iPhone. Proporciona toda la funcionalidad de los controles que vemos en la pantalla del iPhone.

Para empezar a definir nuestra aplicación utilizaremos Interface Builder, otra de las herramientas de desarrollo para Mac OS X. Para abrirlo haremos doble click sobre el archivo MainWindow.xib. Cuando Interface Builder se abra veremos 4 ventanas: la ventana de documento, el inspector, la ventana de la biblioteca de controles y finalmente la ventana de nuestra aplicación.

Interface Builder

Para construir la interfaz que queremos empezaremos arrastrando un botón (Rounder Rect Button, UIButton) desde la biblioteca hasta la pantalla de nuestra aplicación. Cuando lo arrastremos veremos que aparecen una guías azules cerca de los márgenes y en el borde superior. Tratad de ajustar el botón a la esquina superior izquierda. Haciendo doble click en el botón podremos modificar su texto. Introduciremos “Sembrar” generador aleatorio como texto del botón. Utilizando los “tiradores” para redimensionar el botón ajustaremos el ancho para ocupar todo el ancho de la aplicación (respetando los márgenes) y lo transladaremos, si es necesario, hasta el borde superior (de nuevo respetando el margen).

A continuación copiaremos y pegaremos ese botón para crear otro del mismo tamaño, que moveremos para centrarlo en la pantalla y hacia abajo hasta que aparezca la guía en su margen superior (indicando que está a una distancia adecuada del botón superior).

Finalmente volveremos a la biblioteca y arrastraremos una etiqueta (Label, UILabel) a la pantalla. La ajustaremos lo más arriba y a la izquierda posible, debajo de los botones, y aumentaremos su tamaño para ocupar el resto de la pantalla. Además en la primera pestaña del inspector (Label Attributes) estableceremos el Alignment a centrado, y mediante el menú FontShow Fonts estableceremos el tamaño de la fuente a 144 puntos.

Ahora mismo nuestra pantalla debería parecerse a la siguiente imagen. No os olvidéis de salvar la interfaz con FileSave.

Interfaz finalizada

Ahora volveremos a Xcode, pero no cerréis Interface Builder todavía, que lo utilizaremos en un momento. Tenemos que definir el comportamiento de los botones cuando son pulsados, y para ello tenemos que escribir código, más específicamente un controlador. Por lo tanto utilizaremos el menú FileNew File…. En la lista de la izquierda elegiremos Cocoa Touch Classes bajo la sección iPhone OS, y en la parte de la derecha NSObject subclass. Tras pulsar Next podremos elegir el nombre de nuestra nueva clase: RandomGeneratorController.m.

Xcode nos abrirá un editor con el archivo de cabecera preparado para ser editado. Haremos que se parezca a lo siguiente y lo salvaremos:

#import <UIKit/UIKit.h>


@interface RandomGeneratorController : NSObject {
    IBOutlet UILabel* label;
}

- (IBAction)seed;
- (IBAction)generate;
@end

Volveremos a Interface Builder, y desde la biblioteca arrastraremos el cubo naranja más sólido (Object, UICustomObject) a la ventana de documento (no a nuestra pantalla). A continuación, en el inspector, en la pestaña Object Identity (la última), estableceremos que la clase del objeto sea RandomGeneratorController.

Interface Builder con nuestro controlador

Ahora tenemos que hacer las conexiones. Pulsaremos con el botón derecho en la pantalla del documento sobre nuestro nuevo objeto (que debería llamarse ahora Random Generator Controller). Nos aparecerá un heads-up display con dos secciones: Outlets y Received Actions. Si nos damos cuenta el outlet y las dos received actions que aparecen son los mismos que nosotros hemos definido en el código de RandomGeneratorController. Arrastraremos el círculo vacío del outlet label hasta la etiqueta en nuestra pantalla de la aplicación. Para la acciones arrastraremos igualmente desde cada uno de los círculos vacíos hasta el botón correspondiente de la interfaz, y cuando lo soltemos, de la lista de opciones presentada elegiremos Touch Up Inside (esto hará que el la acción del botón sea iniciada cuando el usuario toque sobre el botón). Salvad la interfaz y volved a Xcode.

De vuelta en Xcode hay que editar RandomGeneratorController.m, y hacer que se parezca a lo siguiente:

#import "RandomGeneratorController.h"


@implementation RandomGeneratorController

- (IBAction)generate
{
    int generated = (random() % 100) + 1;
    [label setText: [NSString stringWithFormat:@"%d", generated]];
}

- (IBAction)seed
{
    srandom(time(NULL));
    [label setText:@"Generador “sembrado”"];
}

- (void)awakeFromNib
{
    NSCalendarDate* now = [NSCalendarDate calendarDate];
    [label setText:[now description]];
}

@end

En el método generate primero creamos un número aleatorio entre 1 y 100 mediante la llamada a la biblioteca estándar de C random() (sí, desde Objective-C se puede invocar a C sencillamente). Posteriormente establecemos el texto de la etiqueta creando un nuevo NSString (la clase para cadenas de texto en Cocoa) con formato (similar al formato del método printf de C).

El método seed de nuevo invoca a facilidades de la biblioteca estándar de C para “sembrar” el generador de números aleatorios mediante srandom y time, y después establece el texto de la etiqueta a un mensaje de información.

El último método, awakeFromNib, es invocado por el runtime cuando una clase referenciada en un nib es creada. En nuestro caso obtenemos la fecha y la hora del momento actual y la presentamos en la etiqueta (description es un método de todos los objetos derivados de NSObject que describe al objeto).

Ahora podemos volver a utilizar el botón Build and Go (guardando todo nuestro trabajo antes) y ver como en el simulador del iPhone aparece nuestra aplicación completamente funcional.

Random Generator funcionando

A partir de aquí sólo queda pedir ser admitidos en el iPhone Developer Program, pagar los $99 (eso son sólo 64€), enviar nuestra aplicación a la AppStore y ¡millonarios!.

Bueno, quizá necesitemos un par más de pasos, como idear y programar una aplicación de verdad y aprender todo lo que podamos de la documentación del SDK y del iPhone Dev Center.


2 comentarios a “Descargué el iPhone SDK y todo lo que obtuve fue esta mala camiseta”

  1. Gravatar dereck dice:

    holaaaaa!! Solo comentar lo bien q se ve el blog desde el iphone : )

    Alaaa! Un iSaludo :P

  2. Gravatar Daniel dice:

    No es culpa mía, lo prometo.

Deja un comentario

Puedes enterarte de las respuestas a tus comentarios de esta entrada mediante myComments.

XHTML: Puedes utilizar las siguientes etiquetas: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Tu servidor sin límites: 20GB de espacio, 1TB de transferencia, 1 dominio gratuito. Por 1.5€ al mes utilizando el código "RUIDOBLANCO" en DreamHost. Más información.