Introducció al desenvolupament d’aplicacions per a i os ctug

35
Introducció al desenvolupament d’aplicacions per a iOS Enric Farguell Matesanz – DI [email protected]

Transcript of Introducció al desenvolupament d’aplicacions per a i os ctug

Page 1: Introducció al desenvolupament d’aplicacions per a i os   ctug

Introducció al desenvolupament t oducc ó a dese o upa e t d’aplicacions per a iOS

Enric Farguell Matesanz – DI

[email protected]

Page 2: Introducció al desenvolupament d’aplicacions per a i os   ctug

ContingutsContinguts Què ensenyarem en aquest curs? Introducció al desenvolupament d’aplicacions per a iPhone –

Historia, estat de l’art i conceptes.F d l d b ó d’ l Fonaments de la distribució d’aplicacions.

Eines de desenvolupament: Xcode i Interface Builder (IB).Cl UIL b l i UIB é d IB Classes UILabel i UIButton a través de IB.

Classe NSTimer: control de temps a la aplicació. H d di ió d’ tit j b t t l l t Hands on coding: creació d’un petit joc amb tots els elements

anteriors.

Page 3: Introducció al desenvolupament d’aplicacions per a i os   ctug

ContingutsContinguts Índex Introducció al desenvolupament d’aplicacions per a iPhone –

Historia, estat de l’art i conceptes.F d l d b ó d’ l Fonaments de la distribució d’aplicacions.

Eines de desenvolupament: Xcode i Interface Builder (IB).Cl UIL b l i UIB é d IB Classes UILabel i UIButton a través de IB.

Classe NSTimer: control de temps a la aplicació. H d di ió d’ tit j b t t l l t Hands on coding: creació d’un petit joc amb tots els elements

anteriors.

Page 4: Introducció al desenvolupament d’aplicacions per a i os   ctug

Introducció iPhoneIntroducció - iPhone Presentació de l’iPhone el Gener de 2007 (a la venda en

Juny) Va revolucionar la telefonia mòbil Interfície multitàctil Sistema Operatiu Estètica AppStore Accessoris

Page 5: Introducció al desenvolupament d’aplicacions per a i os   ctug

Introduccíó iPod TouchIntroduccíó - iPod Touch Presentat el Setembre de 2007 Similar a l’iPhone Mateix hardware base (sense telèfon ni GPS) Mateix sistema operatiu Més barat i accessible

Page 6: Introducció al desenvolupament d’aplicacions per a i os   ctug

Introducció iPhone + iPodIntroducció - iPhone + iPod Actualment més de 120 milions de dispositius venuts AppStore + iTunes: vendes centralitzades Més de 240.000 aplicacions disponiblesp p Més de 4000 milions de descàrregues Inesperada plataforma de jocs Inesperada plataforma de jocs

Page 7: Introducció al desenvolupament d’aplicacions per a i os   ctug

Introducció iPadIntroducció - iPad A la venda el 3 d’abril de 2010 en USA Basat en iOS Accessoris d’Apple (Teclat, SD-Card, USB, adaptador pp ( p

VGA...) Abans de la distribució ja va suposar una revolució j p

(tabletes Android) Més d’un milió d’unitats venudes en 28 dies Més de 20.000 Apps natives

Page 8: Introducció al desenvolupament d’aplicacions per a i os   ctug

ContingutsContinguts Índex Introducció al desenvolupament d’aplicacions per a iPhone –

Historia, estat de l’art i conceptes.F d l d b ó d’ l Fonaments de la distribució d’aplicacions.

Eines de desenvolupament: Xcode i Interface Builder (IB).Cl UIL b l i UIB é d IB Classes UILabel i UIButton a través de IB.

Classe NSTimer: control de temps a la aplicació. H d di ió d’ tit j b t t l l t Hands on coding: creació d’un petit joc amb tots els elements

anteriors.

Page 9: Introducció al desenvolupament d’aplicacions per a i os   ctug

Distribució d’aplicacionsDistribució d aplicacions Distribució de software iOS Tipus de llicència i de distribució (Ad-Hoc, AppStore) Desenvolupament en:

Objective-C Flash

P i i d di i i Provisionat de dispositius Identificador únic: UDID

Cl i ifi Claus i certificats

Page 10: Introducció al desenvolupament d’aplicacions per a i os   ctug

Distribució iPhone 3 xDistribució - iPhone 3.x Característiques destacades: Mac OS X empotrat Llibreries estándard Programable en C C++ Objective C Programable en C, C++, Objective-C... Optimitzat per al dispositiu

Novetats de la versió: Novetats de la versió: Compra de continguts Connectivitat simplificadap Notificacions PUSH Mapes y geolocalització Control d’accesoris Més de 1000 APIs noves

Page 11: Introducció al desenvolupament d’aplicacions per a i os   ctug

Distribució iPhone 3 xDistribució - iPhone 3.x Limitacions imposades: Accés només a alt nivell Intèrprets programables (Java, Flash, C64...) Multitasca no permesa

RendimentS Seguretat

Limitacions distribució AppStore, a afegirU bili i di Usabilitat i disseny

La distribució Ad-Hoc no limita

Page 12: Introducció al desenvolupament d’aplicacions per a i os   ctug

Distribució iPhone 4 xDistribució - iPhone 4.x Novetats: iPhone OS canvia a iOS Multitasca iAd iAd Game Center Millor interfície d’usuari Millor interfície d usuari Mail millorat

Empresa:p Millor seguretat Apps via WiFi i 3G Gestió de dispositius Més de 1.500 APIs noves

Page 13: Introducció al desenvolupament d’aplicacions per a i os   ctug

ContingutsContinguts Índex Introducció al desenvolupament d’aplicacions per a iPhone –

Historia, estat de l’art i conceptes.F d l d b ó d’ l Fonaments de la distribució d’aplicacions.

Eines de desenvolupament: Xcode i Interface Builder (IB).Cl UIL b l i UIB é d IB Classes UILabel i UIButton a través de IB.

Classe NSTimer: control de temps a la aplicació. H d di ió d’ tit j b t t l l t Hands on coding: creació d’un petit joc amb tots els elements

anteriors.

Page 14: Introducció al desenvolupament d’aplicacions per a i os   ctug

Eines de desenvolupamentEines de desenvolupament Dashcode Disseny web natiu, no accedeix a perifèrics

XCode 3 - 4 Codi Obj-C, C, C++

Interface Builder (integrat XCode 4)( g ) Disseny assistit: WYSIWYG

Instruments Eina de depuració i detecció de fallades de memòria

Page 15: Introducció al desenvolupament d’aplicacions per a i os   ctug

Descripció de l’Objective CDescripció de l Objective-C Mètode: Pot ser:

Dirigit a una classe (mètode de classe): no cal tenir un objecte instanciat en memòriainstanciat en memòria

Dirigit a una instància (mètode d’instància): em dirigeixo a un objecte en memòria

Els mètodes es criden com a missatges El format és: El format és: [receptor missatge];

Amb paràmetres: Amb paràmetres: [receptor missatge: (tipus1) par1 missatgePar2: (tipus2) par2];

Page 16: Introducció al desenvolupament d’aplicacions per a i os   ctug

Classes: interfície i implementacióClasses: interfície i implementació Per a crear una classe necessito una interfície i una implementació:

Interfície: estudiant h Interfície: estudiant.h Implementació: estudiant.m

Per a definir les funcions he de fer:F d l Funcions de classe: +(tipusDeRetorn)nomFuncio;

Funcions d’instància: -(tipusDeRetorn)nomFuncio;

La sintaxi de la interfície és: @interface NomClasse: PareDelQueHereto {@ {

// Declaració de variables membre } // Declaració de mètodes @end

Si no em cal heretar de cap altre classe, he d’heretar de NSObject

Page 17: Introducció al desenvolupament d’aplicacions per a i os   ctug

Classes: interfície i implementacióClasses: interfície i implementació La implementació és l’arxiu .m

L i i é La sintaxi és: @implementation NomClasse // Implementació dels mètodes // Implementació dels mètodes @end

La implementació dels mètodes segueix la sintaxi:p g Per a funcions de classe:

+(tipusDeRetorn) nomFuncio: (tipus1){ //Implementació de la funció //Implementació de la funció

} Per a funcions d’instància:

-(tipusDeRetorn) nomFuncio: (tipus1){ //Implementació de la funció

}

Page 18: Introducció al desenvolupament d’aplicacions per a i os   ctug

Exemple 1Exemple 1 Crea un projecte tipus View-based Sobre l’arxiu NomProjecteAppDelegate.c, busca la funció:

-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

Dins d’aquesta funció, posa-hi: NSL (@”H ll f didFi i h”) NSLog(@”Hello from didFinish”);

Sobre l’arxiu NomProjecteViewController.c, busca la funció:

-(void)viewDidLoad

Dins d’aquesta funció, posa-hi: NSLog(@”Hello from viewDidLoad”);

Compila, executa i mira què surt per la consola

Page 19: Introducció al desenvolupament d’aplicacions per a i os   ctug

Exemple 2Exemple 2 Sobre el projecte anterior Sobre l’arxiu NomProjecteAppDelegate.h, posa-hi la capçalera: -(void) saySomething:(NSString*) aString;

Sobre l’arxiu NomProjecteAppDelegate c implementa la funció: Sobre l arxiu NomProjecteAppDelegate.c, implementa la funció: -(void) saySomething:(NSString*) aString{

NSLog(aString);g( g) }

Busca la funció:

-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

Fes la crida: [self saySomething:@”Hello world.”];

Page 20: Introducció al desenvolupament d’aplicacions per a i os   ctug

Exemple 3Exemple 3 Sobre el projecte anterior Sobre l’arxiu NomProjecteViewController.h, posa-hi la capçalera: -(void) saySomething:(NSString*) aString;

Sobre l’arxiu NomProjecteViewController h implementa la funció: Sobre l arxiu NomProjecteViewController.h, implementa la funció: -(void) saySomething:(NSString*) aString{

NSLog(aString);g( g) }

A l’arxiu NomProjecteAppDelegate.c, busca la funció:

-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

Fes la crida: [viewController saySomething:@”Hello from viewController.”];

Page 21: Introducció al desenvolupament d’aplicacions per a i os   ctug

Iniciat d’objectesIniciat d objectes Tots els objectes es declaren com a punters en Obj-C

Ojb * V i bl meuOjbecte *mevaVariable; Per tant, sempre cal demanar memòria per a un objecte quan

el volem fer servir:el volem fer servir: mevaVariable=[meuObjecte alloc]; alloc és funció de classe, no d’instància: +(id) alloc; alloc només demana memòria i inicia a zero.

S’ha d’iniciar els objectes amb una funció que sempre comença amb init:amb init: El mètode init està implementat a NSObject per defecte. Es pot sobreescriure, però és recomanable crear un inicialitzadorp p

que comenci amb la paraula init. El retorn de qualsevol funció init és sempre id, per si alguna classe

que hi hereti necessita treballar amb un tipus de dades diferentque hi hereti necessita treballar amb un tipus de dades diferent.

Page 22: Introducció al desenvolupament d’aplicacions per a i os   ctug

Gestió de memòriaGestió de memòria La memòria pels objectes es demana amb alloc alloc ve implementat per defecte des de NSObject Per a poder alliberar memòria, cal crear dealloc Aquesta rutina no està implementada per defecte a les classes

pròpies. A diferència d’alloc és mètode d’instància: A diferència d alloc, és mètode d instància:

-(void) dealloc {{

//Alliberem tots els objectes per als que haguem demanat memòria. //Alliberem el mètode pare. [super dealloc]; [super dealloc];

}

Cal crear un dealloc, encara que només sigui per a alliberar el pare!

Page 23: Introducció al desenvolupament d’aplicacions per a i os   ctug

Declaració de propietatsDeclaració de propietats L’accés a les variables pròpies d’una classe es fa a partir de les

propietats Les propietats es van incloure recentment per a aconseguir

i ti t i lt d di l t l operacions que antigament requerien molt de codi; realment el que fan és implementar un setter i un getter El setter dóna un valor a la variable El setter dóna un valor a la variable El getter llegeix el valor de la variable

En general, les variables pròpies d’una classe d’Obj-C, reben el En general, les variables pròpies d una classe d Obj C, reben el nom de propietats, i per a cada objecte declarat dins la classe caldrà definir-les

La sintaxi és: @property (atribut1, atribut2, ...) tipus nomVariable;

Page 24: Introducció al desenvolupament d’aplicacions per a i os   ctug

Declaració de propietatsDeclaració de propietats Les propietats es divideixen en:

De modificació de setter i getter: per defecte, el getter és el nom de la propietat i el setter és g p , g p psetNomPropietat. La sintaxi és: setter=nomSetter getter=nomGetter

D’assignació (mutuament excloents): D assignació (mutuament excloents): readwrite: de lectura i escriptura, és el valor per defecte readonly: només de lectura

Del setter (mutuament excloents): assign: copia directament la informació d’una variable a la altra copy: copia la informació i allibera el valor anterior de la variable retain: copia la informació i allibera el valor anterior de la variable, la variable actual ha de fer un

retain D’atomicitat

atomic: la execució del setter i el getter no es pot interrompre per cap altre fil en l’entorn multifild’un S.O. És el valor per defecte

non-atomic: la execució es pot interrompre, però també és molt més ràpidp p p p

Algunes propietats només funcionen amb objectes i no amb POD (Plain, Old Data)

Page 25: Introducció al desenvolupament d’aplicacions per a i os   ctug

Exemple 4Exemple 4 Sobre el projecte anterior A la interfície de NomProjecteViewController:

Declara NSString *texteAPintar; Defineix les seves propietats:

@property(nonatomic, retain)NSString *texteAPintar;

A la implementació fes: @synthesize texteAPintar;

Sobre la funció saySomething, afegim una mica de codi: -(void) saySomething:(NSString*) aString{

NSLog(aString);g( g); NSLog(texteAPintar);

} A l’arxiu NomProjecteAppDelegate.c, busca la funció:

-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

Implementa aquestes línies de codi: viewController texteAPintar=@”I use a NSString property”; viewController.texteAPintar=@ I use a NSString property. ; [viewController saySomething:@”Hello from viewController.”];

Prova: [viewController saySomething:[NSString stringWithString:@”Hello from viewController.”]];

Page 26: Introducció al desenvolupament d’aplicacions per a i os   ctug

ContingutsContinguts Índex Introducció al desenvolupament d’aplicacions per a iPhone –

Historia, estat de l’art i conceptes.F d l d b ó d’ l Fonaments de la distribució d’aplicacions.

Eines de desenvolupament: Xcode i Interface Builder (IB).Cl UIL b l i UIB é d IB Classes UILabel i UIButton a través de IB.

Classe NSTimer: control de temps a la aplicació. H d di ió d’ tit j b t t l l t Hands on coding: creació d’un petit joc amb tots els elements

anteriors.

Page 27: Introducció al desenvolupament d’aplicacions per a i os   ctug

UIViewUIView Desenvolupar per a iOS implica treballar amb vistes. La vista és el que es mostra per pantalla. Es poden tenir vistes múltiples sobre la pantalla, a forma de

stackstack. La vista que es veu és la primera, la resta es superposen.

Totes les classes que hereten de UIView poden rebre otes es c asses que e ete e U V ew po e eb e crides a funcions de UIView. Les classes de UIView pertanyen al UIKit Framework. COCOA inclou per defecte UIKit. UILabel i UIButton hereten de UIView, i inclouen d’altres

variables interenes d’altres tipusvariables interenes d altres tipus. Si ho busqueu al help d’Apple, assegureu-vos de buscar-ho

a la SDK de iOS, i no a la de Mac OS!a la SDK de iOS, i no a la de Mac OS!

Page 28: Introducció al desenvolupament d’aplicacions per a i os   ctug

UIViewUIView Interface Builder (IB) és una eina WYSIWYG. Permet dis sar alse l classe e hereta de UIVie a la Permet disposar qualsevol classe que hereta de UIView a la

pantalla de la App. Tot el que es pot fer amb IB es pot fer programàticament.q p p p g NO es recomana treballar amb els controladors alhora amb IB i

programàticament, ja que el codi generat per IB no és accessible. Per a obrir la aplicació IB cal prèmer sobre l’arxiu p p

NomAppViewController.xib; aquesta és la vista editable per IB. NO treballeu amb el MainWindow.xib; no funciona! Salveu l’arxiu XIB en acabar la edició... Salveu l arxiu XIB en acabar la edició...

Per a referenciar un objecte pintat a l’IB des del codi s’usa la macro IBOutlet.P f i f ió l i d l é Per a referenciar una funció relacionada a un element a través d’IB s’usa la macro IBAction.

Page 29: Introducció al desenvolupament d’aplicacions per a i os   ctug

UILabel i UIButtonUILabel i UIButton UILabel és una classe que permet mostrar camps de text

com a etiquetes: Es pot canviar el seu contingut com a camp de text: té una

i i é d l i NSS ipropietat interna que és text, del tipus NSString. El text, imatges associades i posició es poden editar tant a

través d’IB com programàticament través d IB com programàticament.

UIButton és una classe que permet generar botons a l’aplicació:l aplicació: Es pot relacionar a una funció, que es cridarà en prémer el

botó.botó. De nou, tant el text com les imatges com la posició es poden

editar a través de IB i programàticament.

Page 30: Introducció al desenvolupament d’aplicacions per a i os   ctug

ContingutsContinguts Índex Introducció al desenvolupament d’aplicacions per a iPhone –

Historia, estat de l’art i conceptes.F d l d b ó d’ l Fonaments de la distribució d’aplicacions.

Eines de desenvolupament: Xcode i Interface Builder (IB).Cl UIL b l i UIB é d IB Classes UILabel i UIButton a través de IB.

Classe NSTimer: control de temps a la aplicació. H d di ió d’ tit j b t t l l t Hands on coding: creació d’un petit joc amb tots els elements

anteriors.

Page 31: Introducció al desenvolupament d’aplicacions per a i os   ctug

NSTimerNSTimer NSTimer és una classe que permet crear un cronògraf

intern on es va cridant una funció cada vegada que passa un determinat període de temps.

Es crea i instancia amb una funció de classe: scheduledTimerWithTimeInterval:... Aquesta funció incorpora un autorelease. Per tant, no es pot

fer release del timer (proveu a fer-ho...).P l i llib l l id f ió ífi Per a aturar-lo i alliberar-lo cal cridar una funció específica, que és invalidate.

Un objecte de NSTimer es pot crear d’altres formes però Un objecte de NSTimer es pot crear d altres formes, però aquesta és la automàtica.

Page 32: Introducció al desenvolupament d’aplicacions per a i os   ctug

Exemple 5Exemple 5 Crea un nou projecte tipus View-based. Sobre l’arxiu AppViewController.h, afegeix:pp g

NSTimer *myTimer; int tCount;

Sobre l’arxiu AppViewController.c, busca viewDidLoad.Di d l f ió i l Dintre de la funció, implementa: myTimer=[NSTimer scheduled TimerWithTimeInterval: 1.0 target:self selector:@selector(timerSpeaks)

userInfo:nil repeats:YES]; tCount=0;

En una funció separada, implementa: -(void)timerSpeaks{

tCount++; if(tCount==60){ if(tCount 60){

NSLog(@”Timer out”); [myTimer invalidate];

} else NSLog([NSString stringWithFormat:@”Happened %d seconds”, tCount]);

} Com a exemple 6, proveu a fer la crida des d’AppDelegate en lloc de AppViewController...

Page 33: Introducció al desenvolupament d’aplicacions per a i os   ctug

ContingutsContinguts Índex Introducció al desenvolupament d’aplicacions per a iPhone –

Historia, estat de l’art i conceptes.F d l d b ó d’ l Fonaments de la distribució d’aplicacions.

Eines de desenvolupament: Xcode i Interface Builder (IB).Cl UIL b l i UIB é d IB Classes UILabel i UIButton a través de IB.

Classe NSTimer: control de temps a la aplicació. H d di ió d’ tit j b t t l l t Hands on coding: creació d’un petit joc amb tots els elements

anteriors.

Page 34: Introducció al desenvolupament d’aplicacions per a i os   ctug

Hands on codingHands on coding Feu un joc amb tot el que heu après fins ara, que

respongui a aquestes especificacions: El joc és un compte enrere de 10 segons on l’usuari ha de

d i b ó fi ’ l tocar tantes vegades com pugui un botó fins que s’esgota el temps.

El joc s’inicia polsant un botó diferent El joc s inicia polsant un botó diferent. La vista ha de contenir aquests objectes:

2 UILabels, 2 UIButton 2 UILabels, 2 UIButton

Els UILabels han d’informar de 2 coses: Temps restant.p Vegades que s’ha premut el botó de puntuació.

Page 35: Introducció al desenvolupament d’aplicacions per a i os   ctug

Moltes gràcies per la seva atenció!

Introducció al desenvolupament t oducc ó a dese o upa e t d’aplicacions per a iOS

Enric Farguell Matesanz – [email protected]

Dep. d’informàtica, Enginyeria i Arquitectura La Salle