Vous êtes sur la page 1sur 132

Desarrollo de Aplicaciones con iOS

I Taller Open Telefónica

© 2010 Manuel Freire / Cátedra UAM-Telefónica


Índice
• Introducción a iOS • Rendimiento

• Objective-C • Otras APIs

• Xcode • Open Telefónica con iOS

• Interface Builder • Documentación

• UIKit

• Ejemplo de Aplicación

© 2010 Manuel Freire / Cátedra UAM-Telefónica


Encuesta rápida

• ¿Quién tiene un Mac?

• ¿Quién ha programado alguna vez en Objective-C?

• ¿Quién ha desarrollado alguna aplicación para iOS?

• ¿Quién ha publicado alguna aplicación en el App


Store?

© 2010 Manuel Freire / Cátedra UAM-Telefónica


Introducción a iOS

© 2010 Manuel Freire / Cátedra UAM-Telefónica


iDevices

© 2010 Manuel Freire / Cátedra UAM-Telefónica


iDevices Timeline

iPhone

iPod touch

iPad

2007 2008 2009 2010

© 2010 Manuel Freire / Cátedra UAM-Telefónica


App Store

• Tienda de aplicaciones

• ¡+300.000 aplicaciones!

• Gratuitas y de pago

• 70/30 R/S

© 2010 Manuel Freire / Cátedra UAM-Telefónica


iOS SDK

• Disponible gratis en el iOS Dev Center


• Incluye Xcode, Interface Builder y iPhone
Simulator
• Sólo para Mac (Leopard y Snow Leopard)
• Versión actual: 4.1
http://developer.apple.com/devcenter/ios/
© 2010 Manuel Freire / Cátedra UAM-Telefónica
iOS Developer Program

• 79 € / año
• Ejecutar aplicaciones en el dispositivo (no
sólo simulador)
• Distribución en el App Store

http://developer.apple.com/programs/ios/
© 2010 Manuel Freire / Cátedra UAM-Telefónica
iOS

Cocoa Touch

Media

Core Services

Core OS

© 2010 Manuel Freire / Cátedra UAM-Telefónica


iOS

Cocoa Touch • BSD

• Threads
Media
• Sockets

Core Services • Security

• File System
Core OS
• Bonjour

© 2010 Manuel Freire / Cátedra UAM-Telefónica


iOS

Cocoa Touch • Address Book

• CFNetwork
Media
• Core Data

Core Services • Foundation

• Core Location
Core OS
• Store Kit

© 2010 Manuel Freire / Cátedra UAM-Telefónica


iOS

Cocoa Touch • Core Graphics (Quartz)

• Core Animation
Media
• OpenGL ES

Core Services • Core Audio

• Media Player
Core OS
• OpenAL

© 2010 Manuel Freire / Cátedra UAM-Telefónica


iOS

Cocoa Touch • UIKit

• Map Kit
Media
• Game Kit

Core Services • iAd

• Otros: Push
Notifications,
Core OS
Multitasking, etc.

© 2010 Manuel Freire / Cátedra UAM-Telefónica


iOS vs. Mac OS X

Cocoa Touch Cocoa

Media Media

Core Services Core Services

Core OS Core OS

iOS Mac OS X
© 2010 Manuel Freire / Cátedra UAM-Telefónica
Diseño

• Es distinto a diseñar una aplicación para escritorio:


• Interfaz táctil (multi-touch)
• Pantalla pequeña
• Memoria limitada
• Sólo una ventana a la vez
• Sólo una aplicación activa en cada momento

© 2010 Manuel Freire / Cátedra UAM-Telefónica


Ejemplos de diseño: Mail

© 2010 Manuel Freire / Cátedra UAM-Telefónica


Ejemplos de diseño: iPhoto

© 2010 Manuel Freire / Cátedra UAM-Telefónica


Resolución

Dispositivo Resolución
iPhone (< 4) 320x480

iPod touch (<4th gen) 320x480

iPhone 4 640x960

iPod touch (4th gen) 640x960

iPad 768x1024

© 2010 Manuel Freire / Cátedra UAM-Telefónica


Orientación

© 2010 Manuel Freire / Cátedra UAM-Telefónica


Tipos de aplicación

1. Apps nativas
2. Web apps
3. Apps híbridas

© 2010 Manuel Freire / Cátedra UAM-Telefónica


Tecnologías

Objective-C
Java

C/C++
Flash
HTML5

© 2010 Manuel Freire / Cátedra UAM-Telefónica


Objective-C

© 2010 Manuel Freire / Cátedra UAM-Telefónica


Objective-C

• Basado en ANSI C
• Orientado a objetos
• Sintaxis relativamente simple
• Combinable con C++ (Objective-C++)

© 2010 Manuel Freire / Cátedra UAM-Telefónica


Recordatorio OOP

Gato

Edad
Peso Atributos
Color

Comer
Dormir
Métodos
Clase

© 2010 Manuel Freire / Cátedra UAM-Telefónica


Recordatorio OOP

Clase Objetos

© 2010 Manuel Freire / Cátedra UAM-Telefónica


Clases
Nombre de la clase Nombre de la clase base

@interface Circle : NSObject


{
! CGPoint m_pos;
! float m_r; Variables
}

- (id)initWithPosition:(CGPoint)pos R:(float)r;
Métodos
- (float)getArea;

@end

Circle.h
© 2010 Manuel Freire / Cátedra UAM-Telefónica
Clases
@implementation Circle

- (id)initWithPosition:(CGPoint)pos R:(float)r
{
! self = [super init];
! if (self) {
! ! m_pos = pos;
! ! m_r = r;
! }
! return self;
}

- (float)getArea
{
! return 2.0 * 3.141592 * m_r;
}

@end

Circle.m
© 2010 Manuel Freire / Cátedra UAM-Telefónica
Creación de Objetos
• Dos pasos:

• Reservar memoria (alloc)

• Inicializar el objeto (init)

• alloc común para todas las clases (heredado de NSObject)

• Lo habitual es que cada clase defina su propio init

Person* p = [[Person alloc] init];

Circle* c = [[Circle alloc] initWithPosition:p R:5];

© 2010 Manuel Freire / Cátedra UAM-Telefónica


Mensajes

[c getArea];

[ball calculatePositionForTime:10.0];

[self doSomething];

© 2010 Manuel Freire / Cátedra UAM-Telefónica


Destrucción de Objetos

[object release]; Permite que se destruya el objeto (dealloc)

© 2010 Manuel Freire / Cátedra UAM-Telefónica


Properties
@interface MyClass : NSObject
{
float value;
}
Declaración
@property float value;

@end

@implementation MyClass

@synthesize value; Implementación


@end

MyClass* objeto = [[MyClass alloc] init];


Uso
objeto.value;
© 2010 Manuel Freire / Cátedra UAM-Telefónica
Strings

NSString* myString = @"My String\n";

NSString* anotherString = [NSString stringWithFormat:


@"Tu nota es %f, %@", 5.0, @"Manuel"];

NSString* utf8String = @"こんにちわ、世界";

© 2010 Manuel Freire / Cátedra UAM-Telefónica


Protocols

• Lista de métodos que puede implementar


cualquier clase
• Equivalentes a las interfaces en Java o las
clases abstractas en C++
@protocol Drawable
- (void)updateDrawingData:(float)time;
- (void)draw; Declaración
@end
@interface MyObject : NSObject < Drawable >
{
! // ...
} Adopción
// ...
@end
© 2010 Manuel Freire / Cátedra UAM-Telefónica
Xcode

© 2010 Manuel Freire / Cátedra UAM-Telefónica


Xcode

• IDE

• Mac OS X y iOS

• Debugger

• iPhone Simulator

© 2010 Manuel Freire / Cátedra UAM-Telefónica


Demo

© 2010 Manuel Freire / Cátedra UAM-Telefónica


Crear un Proyecto

© 2010 Manuel Freire / Cátedra UAM-Telefónica


Interfaz

© 2010 Manuel Freire / Cátedra UAM-Telefónica


Build & Go

© 2010 Manuel Freire / Cátedra UAM-Telefónica


Directorio del Proyecto

© 2010 Manuel Freire / Cátedra UAM-Telefónica


Info.plist

© 2010 Manuel Freire / Cátedra UAM-Telefónica


Nib files

© 2010 Manuel Freire / Cátedra UAM-Telefónica


Interface Builder

© 2010 Manuel Freire / Cátedra UAM-Telefónica


Interface Builder

• Herramienta de diseño
de interfaces de usuario

• Conexión entre
elementos de la interfaz
y las clases definidas en
el código

• Genera Nib files (.xib)

© 2010 Manuel Freire / Cátedra UAM-Telefónica


Interface Builder: Demo

© 2010 Manuel Freire / Cátedra UAM-Telefónica


Interface Builder: Interfaz

© 2010 Manuel Freire / Cátedra UAM-Telefónica


UIWindow

• Define la ventana de la
aplicación

• Contiene la vista
(UIView) principal de la
aplicación

© 2010 Manuel Freire / Cátedra UAM-Telefónica


UIView

• Las vistas son objetos


que se pueden dibujar

• Están formadas por


elementos (UILabel,
UISwitch, UIButton, etc.)
que a su vez son
también vistas

• Forman un árbol que


cuelga de la vista de la
UIWindow

© 2010 Manuel Freire / Cátedra UAM-Telefónica


Outlets

@interface MyView : UIView


{
! IBOutlet UILabel* label;
! IBOutlet UISwitch* switch;
! IBOutlet UIButton* button;
}

@end

© 2010 Manuel Freire / Cátedra UAM-Telefónica


UIKit

© 2010 Manuel Freire / Cátedra UAM-Telefónica


UIKit

• Framework fundamental de iOS


• Proporciona los elementos de la interfaz de
usuario: botones, campos de texto,
imágenes, etc.
• Lanza la aplicación (UIApplication)

© 2010 Manuel Freire / Cátedra UAM-Telefónica


Elementos de la interfaz
de usuario

• UIKit proporciona muchos elementos que


podemos (y debemos) utilizar en nuestra
aplicación
• Podemos crearlos con Interface Builder o
manualmente en el código

© 2010 Manuel Freire / Cátedra UAM-Telefónica


Elementos de la interfaz de
usuario: Status bar

© 2010 Manuel Freire / Cátedra UAM-Telefónica


Elementos de la interfaz de
usuario: Navigation bar

© 2010 Manuel Freire / Cátedra UAM-Telefónica


Elementos de la interfaz de
usuario: Toolbar

© 2010 Manuel Freire / Cátedra UAM-Telefónica


Elementos de la interfaz de
usuario: Tab bar

© 2010 Manuel Freire / Cátedra UAM-Telefónica


Elementos de la interfaz de
usuario: Alerts

© 2010 Manuel Freire / Cátedra UAM-Telefónica


Elementos de la interfaz de
usuario: Action Sheet

© 2010 Manuel Freire / Cátedra UAM-Telefónica


Elementos de la interfaz de
usuario: Table View

© 2010 Manuel Freire / Cátedra UAM-Telefónica


Elementos de la interfaz de
usuario: Text View

© 2010 Manuel Freire / Cátedra UAM-Telefónica


Elementos de la interfaz de
usuario: Web View

© 2010 Manuel Freire / Cátedra UAM-Telefónica


Elementos de la interfaz de
usuario: Activity Indicators

© 2010 Manuel Freire / Cátedra UAM-Telefónica


Elementos de la interfaz de
usuario: Date & Time Picker

© 2010 Manuel Freire / Cátedra UAM-Telefónica


Elementos de la interfaz de
usuario: Label

© 2010 Manuel Freire / Cátedra UAM-Telefónica


Elementos de la interfaz de
usuario: Button

© 2010 Manuel Freire / Cátedra UAM-Telefónica


Elementos de la interfaz de
usuario: Progress View

© 2010 Manuel Freire / Cátedra UAM-Telefónica


UIApplicationDelegate

• Punto de entrada de la aplicación


• En nuestro ejemplo, HolaMundoAppDelegate
• Métodos importantes:
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions;
- (void)applicationWillTerminate:(UIApplication *)application;
- (void)applicationWillResignActive:(UIApplication *)
application;
- (void)applicationDidReceiveMemoryWarning:(UIApplication *)
application;

© 2010 Manuel Freire / Cátedra UAM-Telefónica


UIViewController

• Los view controllers contienen la lógica


asociada a una vista de nuestra app
• También se encargan de la navegación y de
gestionar la memoria de sus objetos

© 2010 Manuel Freire / Cátedra UAM-Telefónica


UIViewController: Demo

© 2010 Manuel Freire / Cátedra UAM-Telefónica


UIViewController: Inicialización

#import <UIKit/UIKit.h>
#import "MyViewController.h"

@interface HolaMundoAppDelegate : NSObject


<UIApplicationDelegate>
{
! UIWindow *window;
! MyViewController *myViewController;
}

@property (nonatomic, retain) IBOutlet UIWindow *window;

@end

HolaMundoAppDelegate.h
© 2010 Manuel Freire / Cátedra UAM-Telefónica
UIViewController: Inicialización

// ...

- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)
launchOptions
{
! myViewController = [[MyViewController alloc]
! ! initWithNibName:@"MyViewController" bundle:nil];

! [window addSubview:myViewController.view];

[window makeKeyAndVisible];

return YES;
}

// ...

HolaMundoAppDelegate.m
© 2010 Manuel Freire / Cátedra UAM-Telefónica
UIViewController: Destrucción

// ...

- (void)dealloc
{
! [myViewController release];
[window release];
[super dealloc];
}

// ...

HolaMundoAppDelegate.m
© 2010 Manuel Freire / Cátedra UAM-Telefónica
UIViewController: Nib

© 2010 Manuel Freire / Cátedra UAM-Telefónica


UIViewController: File’s owner

© 2010 Manuel Freire / Cátedra UAM-Telefónica


UIViewController: View

© 2010 Manuel Freire / Cátedra UAM-Telefónica


UIViewController: Build & Go

© 2010 Manuel Freire / Cátedra UAM-Telefónica


Aplicación de Ejemplo

© 2010 Manuel Freire / Cátedra UAM-Telefónica


Demo

© 2010 Manuel Freire / Cátedra UAM-Telefónica


Text Field

© 2010 Manuel Freire / Cátedra UAM-Telefónica


Button

© 2010 Manuel Freire / Cátedra UAM-Telefónica


Label

© 2010 Manuel Freire / Cátedra UAM-Telefónica


Build & Go

© 2010 Manuel Freire / Cátedra UAM-Telefónica


Outlets

#import <UIKit/UIKit.h>

@interface MyViewController : UIViewController


{
! IBOutlet UITextField* input;
! IBOutlet UIButton* button;
! IBOutlet UILabel* result;
}

@end

MyViewController.h
© 2010 Manuel Freire / Cátedra UAM-Telefónica
Outlets

© 2010 Manuel Freire / Cátedra UAM-Telefónica


Acciones

#import <UIKit/UIKit.h>

@interface MyViewController : UIViewController


{
! IBOutlet UITextField* input;
! IBOutlet UIButton* button;
! IBOutlet UILabel* result;
}

- (IBAction)countLetters;

@end

MyViewController.h
© 2010 Manuel Freire / Cátedra UAM-Telefónica
Acciones

// ...

- (IBAction)countLetters
{
! int numLetters = [input.text length];
! result.text = [NSString stringWithFormat:@"%d
letras", numLetters];
! result.hidden = NO;
}

// ...

MyViewController.mm
© 2010 Manuel Freire / Cátedra UAM-Telefónica
Acciones

© 2010 Manuel Freire / Cátedra UAM-Telefónica


Build & Go

© 2010 Manuel Freire / Cátedra UAM-Telefónica


El patrón delegation

• Muy utilizado en Cocoa Touch


• Un objeto envía mensajes a otro objeto
que ha designado como su delegado
(delegate)
• El delegado implementa una lista de
métodos definidos en un protocolo

© 2010 Manuel Freire / Cátedra UAM-Telefónica


Text Field Delegate

© 2010 Manuel Freire / Cátedra UAM-Telefónica


Text Field Delegate

#import <UIKit/UIKit.h>

@interface MyViewController : UIViewController <


UITextFieldDelegate >
{
! IBOutlet UITextField* input;
! IBOutlet UIButton* button;
! IBOutlet UILabel* result;
}

- (IBAction)countLetters;

@end

MyViewController.h
© 2010 Manuel Freire / Cátedra UAM-Telefónica
Text Field Delegate

// ...

- (BOOL)textFieldShouldReturn:(UITextField*)theTextField
{
! if (theTextField == input)
! {
! ! [input resignFirstResponder];
! }
! return YES;
}

// ...

MyViewController.m
© 2010 Manuel Freire / Cátedra UAM-Telefónica
Build & Go

© 2010 Manuel Freire / Cátedra UAM-Telefónica


Rendimiento

© 2010 Manuel Freire / Cátedra UAM-Telefónica


Gestión de Memoria
Dinámica en Objective-C

• Reference counting
• Garbage collection (no disponible en iOS)

© 2010 Manuel Freire / Cátedra UAM-Telefónica


Reference counting
MyClass* objetoA = [[MyClass alloc] init];

MyClass* objetoB = [[MyClass alloc] init];

MyClass* objetoC = [objetoC retain];

MyClass MyClass
#1 #2

objetoA objetoB objetoC

© 2010 Manuel Freire / Cátedra UAM-Telefónica


Reference counting
[objetoA release]; // se elimina el objeto #1

[objetoB release]; // no se elimina el objeto #2!

[objetoC release]; // se elimina el objeto #2

MyClass MyClass
#1 #2

objetoA objetoB objetoC

© 2010 Manuel Freire / Cátedra UAM-Telefónica


Gestión de Memoria
Dinámica en Objective-C
• Regla de oro: “Eres responsable de liberar la
memoria de los objetos que has reclamado”
• Reclamas un objeto cuando:
• Lo creas con alloc
• Le envías el mensaje retain
• Lo copias con copy
• Para liberar un objeto:
• Le envías el mensaje release cuando ya no lo necesitas
• Le envías el mensaje autorelease en cualquier momento

© 2010 Manuel Freire / Cátedra UAM-Telefónica


Ejemplos: Gestión de
Memoria Dinámica
MyClass* objeto = [[MyClass alloc] init];
// ...
[objeto release];

MyClass* objeto = [otroObjeto retain];


// objeto y otroObjeto son el mismo objeto
// ...
[objeto release];

MyClass* objeto = [otroObjeto copy];


// objeto y otroObjeto son distintos
// ...
[objeto release];

MyClass* objeto = [[MyClass alloc] init];


[objeto autorelease];
// Ya no necesitamos hacer release

© 2010 Manuel Freire / Cátedra UAM-Telefónica


Instruments
• Conjunto de herramientas para medir el
rendimiento y uso de recursos de nuestras apps
• Leaks
• CPU Sampler
• Allocations
• Activity Monitor
• etc.
• Integrado con Xcode

© 2010 Manuel Freire / Cátedra UAM-Telefónica


Demo

© 2010 Manuel Freire / Cátedra UAM-Telefónica


Otras APIs

© 2010 Manuel Freire / Cátedra UAM-Telefónica


OpenGL ES
• OpenGL for Embedded
Systems

• API de gráficos 3D de
bajo nivel

• Permite especificar la
geometría y propiedades
de objetos (color,
iluminación, texturas)

• Subconjunto de OpenGL

© 2010 Manuel Freire / Cátedra UAM-Telefónica


OpenGL ES: Versiones

Versión Dispositivos Pipeline

iPhone
1.1 iPhone 3G Función fija
iPod touch (1-3 gen)

iPhone 3GS
iPhone 4
2.0 Programable (shaders)
iPod touch (4 gen)
iPad

© 2010 Manuel Freire / Cátedra UAM-Telefónica


OpenGL ES: Ejemplo

Rage iPhone Demo

© 2010 Manuel Freire / Cátedra UAM-Telefónica


Acelerómetro

• Con el acelerómetro puede obtenerse


información del movimiento del dispositivo
en los tres ejes espaciales
• Ejemplos de aplicaciones: juegos,
niveladores, cualquier app sensible a la
orientación

© 2010 Manuel Freire / Cátedra UAM-Telefónica


Acelerómetro
#define kAccelerometerFrequency 50.0

-(void)setupAccelerometer
{
UIAccelerometer* accel = [UIAccelerometer sharedAccelerometer];
accel.updateInterval = 1 / kAccelerometerFrequency;
accel.delegate = self; // Debe adoptar UIAccelerometerDelegate
}

- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:


(UIAcceleration *)acceleration
{
UIAccelerationValue x, y, z;
x = acceleration.x;
y = acceleration.y;
z = acceleration.z;
!
// ...
}

© 2010 Manuel Freire / Cátedra UAM-Telefónica


Localización
• Podemos localizar la posición del usuario (si lo
autoriza)
• Ejemplos de aplicaciones: navegación, juegos,
cualquier app con información local
• Fuentes de información:
• Wi-Fi
• Red telefónica
• GPS

© 2010 Manuel Freire / Cátedra UAM-Telefónica


Game Center

• Red social para juegos

• Amigos

• Multiplayer online

• Leaderboards

• Achievements

© 2010 Manuel Freire / Cátedra UAM-Telefónica


In App Purchase

• Compras dentro de tu aplicación


• Suscripción o pago único
• 70/30 R/S
• Integrado con los pagos en iTunes
• Store Kit framework

© 2010 Manuel Freire / Cátedra UAM-Telefónica


Multitasking

• Background audio
• VoIP
• Background location
• Push notifications
• Local notifications
• Task finishing
• Fast app switching

© 2010 Manuel Freire / Cátedra UAM-Telefónica


Distribución

© 2010 Manuel Freire / Cátedra UAM-Telefónica


Cómo ejecutar apps en
un dispositivo
• Sólo miembros del iOS Developer Program
• Pasos:
• Crear un Certificate Signing Request (CRC) y
subirlo al iPhone Provisioning Portal
• Descargar el Development Certificate (firma
digital de la aplicación)
• Descargar el Provisioning Profile (permiso de
instalación en tu dispositivo)

© 2010 Manuel Freire / Cátedra UAM-Telefónica


Distribución

• Dos tipos de distribución:


• Ad-hoc (testing)
• App Store

© 2010 Manuel Freire / Cátedra UAM-Telefónica


Distribución Ad-hoc
• Distribución “personalizada”
• Se utiliza principalmente para testeo
• Es necesario conocer el UDID del tester
• Se envía un zip con la aplicación y el Provisioning
Profile correspondiente
• El tester instala la aplicación arrastrándola a su
iTunes
• Límite: 100 dispositivos distintos

© 2010 Manuel Freire / Cátedra UAM-Telefónica


Distribución a través del
App Store
• Se utiliza un Provisioning Profile específico para el App Store
• Se sube el binario a iTunes Connect junto con los datos de la
aplicación:
• Nombre
• Precio
• Icono
• Screenshots
• Idiomas
• etc.
• Apple revisa la aplicación y si la aprueba se publica en en el App Store

© 2010 Manuel Freire / Cátedra UAM-Telefónica


App Store Review
Guidelines
“We're keeping an eye out for the kids”
“We don't need any more Fart apps”
“If [...] you're trying to get your first practice App
into the store to impress your friends, please
brace yourself for rejection”
“We will reject Apps for any content or behavior
that we believe is over the line”
http://developer.apple.com/appstore/guidelines.html
© 2010 Manuel Freire / Cátedra UAM-Telefónica
Open Telefónica con iOS

© 2010 Manuel Freire / Cátedra UAM-Telefónica


APIs de Open Telefónica
desde iOS

• Podemos lanzar peticiones a las APIs REST


de Open Telefónica desde nuestra aplicación
• Para ello debemos crear una conexión HTTP
con NSURLConnection

© 2010 Manuel Freire / Cátedra UAM-Telefónica


NSURLConnection

• Clase que define una conexión asíncrona a una URL


• Permite crear una conexión, así como gestionar los
distintos eventos que pueden suceder (errores,
gestión de caché, autenticación, etc.)
• Más información: URL Loading System Programming
Guide

© 2010 Manuel Freire / Cátedra UAM-Telefónica


NSURLConnection
(void)crearConexionURL
{
! // 1. Crear un NSURLRequest
! NSURLRequest* request;
! NSURL* url = [NSURL URLWithString:@"http://www.apple.com/"];
! request = [NSURLRequest requestWithURL:url
! cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:60.0];
!
! // 2. Crear la conexión y comenzar a descargar
! NSURLConnection* connection;
! connection = [[NSURLConnection alloc] initWithRequest:request
! ! ! ! ! ! ! delegate:self];

! if (connection)
! {
! ! // Inicializar la variable que gestionará los datos recibidos
! ! receivedData = [[NSMutableData data] retain];
! }
! else
! {
! ! // Informar al usuario que la conexión ha fallado
! }
}

© 2010 Manuel Freire / Cátedra UAM-Telefónica


NSURLConnection

- (void)connection:(NSURLConnection *)connection didReceiveResponse:


(NSURLResponse *)response
{
// Este método se llama cuando se recibe una respuesta del
// servidor. Puede llamarse más de una vez (p.ej. redirect).
!
[receivedData setLength:0];
}

© 2010 Manuel Freire / Cátedra UAM-Telefónica


NSURLConnection

- (void)connection:(NSURLConnection *)connection didReceiveData:


(NSData *)data
{
// Este método se llama cada vez que se reciben datos desde
// el servidor.

[receivedData appendData:data];
}

© 2010 Manuel Freire / Cátedra UAM-Telefónica


NSURLConnection

- (void)connection:(NSURLConnection *)connection
didFailWithError:(NSError *)error
{
! // Este método se llama cuando falla la conexión
!
[connection release];
[receivedData release];
!
NSLog(@"La conexión ha fallado. Error: %@ %@",
[error localizedDescription],
[[error userInfo]
objectForKey:NSErrorFailingURLStringErrorKey]);
}

© 2010 Manuel Freire / Cátedra UAM-Telefónica


NSURLConnection

- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
! // Este método se llama cuando la conexión ha finalizado con
! // éxito

! NSLog(@"Conexión finalizada. Se han recibido %d bytes.",


[receivedData length]);
!
[connection release];
[receivedData release];
}

© 2010 Manuel Freire / Cátedra UAM-Telefónica


Documentación

© 2010 Manuel Freire / Cátedra UAM-Telefónica


iOS Reference Library

• Biblioteca oficial de Apple para desarrolladores de iOS

• Incluye:

• Guías

• Artículos

• Código de ejemplo

• Vídeos explicativos

• Referencia de las clases del SDK

https://developer.apple.com/library/ios/
© 2010 Manuel Freire / Cátedra UAM-Telefónica
Guías para principiantes

• Getting Started with iOS

• iOS Overview

• Tools for iOS Development

• Learning Objective-C: A Primer

• Creating an iPhone Application

© 2010 Manuel Freire / Cátedra UAM-Telefónica


Siguientes pasos
• iOS Development Guide

• iOS Application Programming Guide

• Your First iOS Application

• iPhone Human Interface Guidelines

• iPad Human Interface Guidelines

• Cocoa Fudamentals Guide

• The Objective-C Programming Language

• iOS Technology Overview

© 2010 Manuel Freire / Cátedra UAM-Telefónica


Guías temáticas
• Getting Started with Audio & Video

• Getting Started with Data Management

• Getting Started with Graphics and Animation

• Getting Started with Networking & Internet

• Getting Started with Performance

• Getting Started with Security

• Getting Started with User Experience

• etc.

© 2010 Manuel Freire / Cátedra UAM-Telefónica


Otros Recursos

• iPhone Application Development, Stanford


University: http://www.stanford.edu/class/cs193p/
cgi-bin/drupal/

• Stack Overflow: http://stackoverflow.com

• Cocoa Heads: http://cocoaheads.com

© 2010 Manuel Freire / Cátedra UAM-Telefónica

Vous aimerez peut-être aussi