Sviluppare apps native per iOS - Lo Stretto Digitale

33
Sviluppare app native per Sviluppare app native per iOS iOS Gaspar e Novar a Gaspar e Novar a MESSINA MESSINA - 12 - 12/07/2014 /07/2014

description

Lo Stretto Digitale - Workshops 2014

Transcript of Sviluppare apps native per iOS - Lo Stretto Digitale

Page 1: Sviluppare apps native per iOS - Lo Stretto Digitale

Sviluppare app native per Sviluppare app native per iOSiOS

Gaspar e Novar aGaspar e Novar a

MESSINA MESSINA - 12- 12/07/2014/07/2014

Page 2: Sviluppare apps native per iOS - Lo Stretto Digitale

PrerequisitiPrerequisiti

Che serve per iniziare?Che serve per iniziare?

Sistema Operativo: Sistema Operativo: OS X MavericksOS X Mavericks

Software: Xcode 5.1.1 (con iOS SDK 7 incluso)Software: Xcode 5.1.1 (con iOS SDK 7 incluso)

Know-how: Objective C (base)Know-how: Objective C (base)

Un database SQlite chiamato contatti.sqlite con questa Un database SQlite chiamato contatti.sqlite con questa tabella: CREATE TABLE contact (nome TEXT, cognome TEXT, tabella: CREATE TABLE contact (nome TEXT, cognome TEXT, cellulare TEXT) cellulare TEXT)

Page 3: Sviluppare apps native per iOS - Lo Stretto Digitale

IDE di sviluppo Xcode 5.1.1IDE di sviluppo Xcode 5.1.1

Page 4: Sviluppare apps native per iOS - Lo Stretto Digitale

P r i m i p a s s i i n X c o d eP r i m i p a s s i i n X c o d e

Page 5: Sviluppare apps native per iOS - Lo Stretto Digitale

P r i m i p a s s i i n X c o d eP r i m i p a s s i i n X c o d eI TemplateI Template

Master-Detail Application: Master-Detail Application: genera un’applicazione composta da una genera un’applicazione composta da una tabella, una barra di navigazione e una vista di dettaglio. tabella, una barra di navigazione e una vista di dettaglio.

Page-Based ApplicationPage-Based Application, fornisce una struttura “a pagine”, come una , fornisce una struttura “a pagine”, come una sorta di libro, sfogliabile scorrendo il dito da destra verso sinistra.sorta di libro, sfogliabile scorrendo il dito da destra verso sinistra.

Single View ApplicationSingle View Application, fornisce un’applicazione vuota, senza , fornisce un’applicazione vuota, senza nessuna implemen- tazione particolare.nessuna implemen- tazione particolare.

Tabbed ApplicationTabbed Application, fornisce un’applicazione con la “tab bar”, ovvero , fornisce un’applicazione con la “tab bar”, ovvero la barra nera composta da più sezioni (ad esempio quella che la barra nera composta da più sezioni (ad esempio quella che trovate nell’applicazione nativa “Musica”).trovate nell’applicazione nativa “Musica”).

Empty ApplicationEmpty Application, fornisce solo un delegato per la nostra , fornisce solo un delegato per la nostra applicazione, senza nessun elemento grafico. È destinato agli utenti applicazione, senza nessun elemento grafico. È destinato agli utenti più esperti, che vogliono creare la loro struttura personalizzata.più esperti, che vogliono creare la loro struttura personalizzata.

Page 6: Sviluppare apps native per iOS - Lo Stretto Digitale

A p p T e m p l at eA p p T e m p l at e

Page 7: Sviluppare apps native per iOS - Lo Stretto Digitale

Che App Svilupperemo?Che App Svilupperemo?

Page 8: Sviluppare apps native per iOS - Lo Stretto Digitale

Struttura App di baseStruttura App di baseModel: Contact di tipo NSObjectModel: Contact di tipo NSObject

DAO: classDatabase di tipo NSObjectDAO: classDatabase di tipo NSObject

Controller:Controller:* ListaViewController di tipo UiViewController* ListaViewController di tipo UiViewController* DetailViewController di tipo UiViewController* DetailViewController di tipo UiViewController* AddViewController di tipo UiViewController* AddViewController di tipo UiViewController

Framework di supporto: libsqlite3.0.dylibFramework di supporto: libsqlite3.0.dylib

Page 9: Sviluppare apps native per iOS - Lo Stretto Digitale

AppDelegate.hAppDelegate.h

NOTA: In Objective C tutti gli oggetti sono riferiti tramite puntatori.

Page 10: Sviluppare apps native per iOS - Lo Stretto Digitale

Parentesi: PropertyParentesi: PropertyLe property sono metodi accessori, permettono di definire metodi per accedere indirettamente alle variabili di istanza che essendo private non possono essere viste dall’esterno della classe in cui sono implementate. Questo meccanismo permette di rispettare l’incapsulamento della programmazione orientata agli oggetti.

Per il metodo getter si usa getNomeIstanza;Per il metodo setter si usa setNomeIstanza;

Attributi

Scrittura/lettura:readwrite: indica che è richiesto sia il metodo get che il metodo set dell'attributo.Readonly: indica che è richiesto solo il metodo get del'attributo

Assegnazione:strong: l’oggetto che utilizza la property ne detiene la proprietà.weak: l’oggetto che utilizza la property non ne detiene la proprietà.copy: assegna una copia dell’oggetto alla property.assign: indica che il metodo set userà semplicemente un assegnamento. Si usa principalmente per attributi scalari

come per esempio int e floatretain: l’oggetto viene trattenuto in memoria al momento dell’assegnazione.

Atomicità:nonatomic: la property viene trattata in modo non atomico quando vengono utilizzate tecniche di

sincronizzazione.

Page 11: Sviluppare apps native per iOS - Lo Stretto Digitale

AppDelegate.mAppDelegate.m

self.window.rootViewController =

Page 12: Sviluppare apps native per iOS - Lo Stretto Digitale

Il Model Il Model Contact.h

Contact.m

Con il costrutto @synthesize andremo a creare, realmente, questi metodi seguendo le specifiche dichiarate nelle property.

Page 13: Sviluppare apps native per iOS - Lo Stretto Digitale

La Classe DAOLa Classe DAOclassDatabase.h

Page 14: Sviluppare apps native per iOS - Lo Stretto Digitale

La Classe DAOLa Classe DAO classDatabase.m

void = "a reference to some random chunk of memory with untyped/unknown contents" (es: definizione di metodi che non ritornano alcun valore)

id = "a reference to some random Objective-C object of unknown class" (es: init,sender,initWithNibName)

Page 15: Sviluppare apps native per iOS - Lo Stretto Digitale

La Classe DAOLa Classe DAOclassDatabase.m

getContacts

* L’asterisco (*) viene chiamato operatore di indirezione o deferenziazione e restituisce il contenuto dell’oggetto puntato dal puntatore;

* L’operatore “e commerciale” (&) restituisce l’indirizzo della variabile

Page 16: Sviluppare apps native per iOS - Lo Stretto Digitale

La Classe DAOLa Classe DAOdeleteContact

classDatabase.m

Page 17: Sviluppare apps native per iOS - Lo Stretto Digitale

La Classe DAOLa Classe DAOinsertContact

classDatabase.m

Page 18: Sviluppare apps native per iOS - Lo Stretto Digitale

ListaViewControllerListaViewController ListaViewControllerListaViewController.h.h

Page 19: Sviluppare apps native per iOS - Lo Stretto Digitale

ListaViewControllerListaViewController ListaViewControllerListaViewController.m.m

Page 20: Sviluppare apps native per iOS - Lo Stretto Digitale

ListaViewControllerListaViewControllerFunzionalità di cancellazione

ListaViewControllerListaViewController.m.m

Page 21: Sviluppare apps native per iOS - Lo Stretto Digitale

ListaViewControllerListaViewController ListaViewControllerListaViewController.xib.xib

Page 22: Sviluppare apps native per iOS - Lo Stretto Digitale

ListaViewController AppDelegate→ListaViewController AppDelegate→

#import "ListaViewController.h"

@property (strong, nonatomic) ListaViewController *viewController;

AppDelegate.h

AppDelegate.m

self.viewController = [[ListaViewController alloc] initWithNibName:@"ListaViewController" bundle:nil]; UINavigationController* navController = [[UINavigationController alloc] initWithRootViewController:self.viewController];self.window.rootViewController = navController;

Page 23: Sviluppare apps native per iOS - Lo Stretto Digitale

AddViewController AddViewController AddViewController.h

Page 24: Sviluppare apps native per iOS - Lo Stretto Digitale

AddViewController AddViewController AddViewController.m

Page 25: Sviluppare apps native per iOS - Lo Stretto Digitale

AddViewController AddViewController AddViewController.m

Page 26: Sviluppare apps native per iOS - Lo Stretto Digitale

ListaViewController AddViewController →ListaViewController AddViewController →

#import “ListaViewController.h”

Page 27: Sviluppare apps native per iOS - Lo Stretto Digitale

DetailViewControllerDetailViewController DetailViewController.h

Page 28: Sviluppare apps native per iOS - Lo Stretto Digitale

DetailViewControllerDetailViewController DetailViewController.m

Page 29: Sviluppare apps native per iOS - Lo Stretto Digitale

DetailViewControllerDetailViewController DetailViewController.xib

Page 30: Sviluppare apps native per iOS - Lo Stretto Digitale

ListaViewController DetailViewController→ListaViewController DetailViewController→

#import "DetailViewController.h"

Page 31: Sviluppare apps native per iOS - Lo Stretto Digitale

Build & RunBuild & Run

Page 32: Sviluppare apps native per iOS - Lo Stretto Digitale

Gaspare NovaraGaspare Novara

https://twitter.com/gaspare_novarahttps://twitter.com/gaspare_novara

https://www.linkedin.com/in/gasparenovarahttps://www.linkedin.com/in/gasparenovara

https://www.facebook.com/gaspare.novara

https://plus.google.com/101699312037605671054

Page 33: Sviluppare apps native per iOS - Lo Stretto Digitale

GRAZIEGRAZIE!! https://twitter.com/StrettoDigitalehttps://twitter.com/StrettoDigitale - #glsd - #glsd