ios 8 - parte 1 - intro - ita

43
Corso base iOS www.ofunwebservices.com

Upload: dario-rusignuolo

Post on 31-Jul-2015

104 views

Category:

Software


1 download

TRANSCRIPT

Corso base iOS

www.ofunwebservices.com

Chi sono

• Dario Rusignuolo• Freelance– Php developer– Mobile app developer

• www.ofunwebservices.com• www.ofunwebservices.net/intro.pdf• http://developer.apple.com• www.stackoverflow.com

Il corso iOSestratto doc ufficiale apple

• Intro (4h)– App – Xcode e iOS

• Programmazione (8h)– Programmazione ad oggetti– Programmazione ad oggetti in iOS

• Oggetti iOS (8h)– View Controller– TableViews– Navigation– Tab bar

• Api e funzionalità (8h)– Geolocation– SQLite database– Internet API– Video playback– Map kit– Application integration

• Processo di pubblicazione (4h)– Sviluppo– Debugging– Archiving– Publishing

Introil mondo delle app

• Il boom delle app è iniziato nel gennaio 2007 con il primo iphone

• Oltre 1 milione di app nello store• 75 miliardi di download• 316 milioni di dispositivi venduti • iOS 7 sul 78% dei dispositivi compatibili

– aggiornamenti sono importanti• È già uscito iOS 8• Android supera iOS per numero di app scaricate, ma non

per i guadagni– Conviene sempre sviluppare in iOS

IntroiOS

• iOS è un sistema operativo per piattaforme mobile e tablet di proprietà apple

• Fortemente orientato all’integrazione gestuale• Risoluzioni• 1 schermata per gestire i task• Schermo a dimensione fissa• multitask in parallelo• schermo piccolo, schermo grande

Introapproccio sviluppatore

• contenuti compressi– Eliminare i testi ridondanti– Scelta dei contenuti

• attenzione a come creare navigazione semplice e intuitiva• limitazioni volute per migliorare l’esperienza (UX)• ogni app ha il suo sandbox

– Sicurezza– non si può accedere a dati di altre app

• risorse limitate– no garbage collection– compito programmatore pulire memoria non utilizzata

• salvare i dati temporanei• tempi di visualizzazione sono importanti

– caricare img/dati non + di 5 secondi

Introprocesso sviluppo app

Introprocesso di sviluppo app

• Qual è il tuo audience? – I contenuti della tua app e l’experience saranno diversi a seconda se tu stia

scrivendo un gioco per bambini, una todo list app, o anche un’app di test per il tuo proprio apprendimento

• Qual è lo scopo della tua app? – È importante per un’ app avere un ben definito e chiaro scopo. È parte del

definire lo scopo, comprendere quella cosa che motiverà I tuoi utenti ad usarla. • Che problema sta cercando di risolvere?

– Un’app risolve un singolo problema bene invece di cercare di offrire soluzioni a problemi distinti. Se tu stai cercando di risolvere tanti problemi non correlati tra loro, allora considera di sviluppare app multiple.

• Che contenuti la tua app incorporerà? – Considera che tipo di contenuti la tua app presenterà agli utenti e come loro

interagiscono con essa. Progetta la user interface (anche su foglio carta e penna) per integrare I contenuti che la tua app mostrerà.

Introcosa si può fare?

• €€€– Iniziare la propria carriera lavorativa molto ben remunerata (anche se in italia, al 2014, è sottopagata)

• Startup - >>>• Freelance - >>>• In azienda - >

– Junior (25k all’anno)– Senior (50k e più all’anno)

• App Vetrina• Pagamenti online• Booking• Interazioni di qualsiasi tipo

– Internet of things• Gestures• bluetooth• Giochi (non materia di questo corso)• maps• touch api• News• Chat messages (con l’aiuto di web API)• Social• Augmented reality• Hai una tua idea? Sviluppala…

Introper iniziare?

• Ti serve– Un computer mac– Una licenza sviluppatore iOS– Un device (aiuta ma non indispensabile)– Tempo e denaro

Introxcode

• Ambiente di sviluppo (IDE) per programmazione ios

• Serve per debuggare, archiviare, pubblicare le app ios e mac– Sia su dispositivo che su emulatore

• Gestione di tutto il ciclo di vita dell’app

Introrisorse utili

• documentazione• Stackoverflow (!!!)– Il vostro migliore amico

• Gruppi su facebook• Tutorial youtube (solo per l’inizio)• developer.apple.com

Introdentro iOS

• Core OS e Core Services– Low-level routines, CFNetwork, CFoundation,

SQLite, POSIX • Media Layer– 2D, 3D drawing, audio, video, OpenGL ES, Quartz,

Core {Audio, Animation} • Cocoa Touch– High level collections, UIKit, GameKit, iAd, MapKit

Introhello iOS World!

Introhello Xcode World!

Intronew project

Introfamiliarità con Xcode 6

Introhello iOS World!

• Se siete registrati come iOS Developer potete:– Creare dei certificati per i dispositivi– Creare dei certificati per gli sviluppatori

• Diversi certificati per sviluppatori differenti • Testare le applicazioni su device reali

Introtips

• Click sulla root del progetto per vedere proprietà di configurazione dell’app– General– Capabilities– Info– Build settings– Simulatore

Intromain.m

Intromain.m

• @autoreleasepool {}– Infrastruttura del memory management

• UIApplicationMain– Crea istanza di AppDelegate

• L’app delegate crea la window dove saranno inseriti i contenuti e fornisce un posto dove rispondere agli stati di transizione dell’app

– Crea istanza di UIApplication• L’application object gestisce l’evento loop e coordina altri

comportamenti di alto livello dell’app. Questa classe, definita nel UIKit framework, non richiede di scrivere codice ulteriore a quello generato automaticamente nel framework.

Introi delegati

• AppDelegate .m e .h– Se si guarda dentro il codice, il .h contiene la

proprietà window– Nel .m invece ci sono i metodi event listeners (o

skeleton perché non c’è codice all’interno)

Introlo storyboard

• rappresentazione visuale dell’app user interface

• Mostra le schermate e transizioni tra una schermata e l’altra

• È possibile associare uno storyboard per target– Target -> Deployment info -> main interface– Aggiungere componenti tramite drag & drop

Introla programmazione

• Classi• Oggetti (OOP)

– Definizione– Astrazione– Incapsulamento (e information hiding)– Polimorfismo

• Ereditarietà• Interfacce

– Metodi e messaggi– Interfaccia grafica– Programmazione orientata agli eventi

• Paradigma strutturale– Selezione– Loop (for, do-while, while-do)– Sviluppo top-down– Funzioni

• Passaggio parametri

– Strutture dati• Array• Costanti

– Algoritmi• Ordinamento• Ricerca

Introesempio

Intronota confortante

• con iOS sdk Non devi implementare gli oggetti da zero– Foundation framework contiene e fornisce gli

oggetti di base con i quali è possibile costruirne altri

– È raccomandabile quando possibile, di usare le classi predefinite o al limite estenedere (creare sotto classi) classi predefinite

IntroMVC

IntroMVC

• Model– Dati dell’applicazione– Contenuti (esempio gli elementi della lista)

• View– Le view non solo si mostrano sullo schermo,ma reagiscono a input di utenti,

loro servono anche come contenitori di altre view. – Le view nell’app sono strutturate in gerarchia chiamata view hierarchy che

definisce il layout di view relativamente ad altre view.– Le view, quindi, possono essere incapsulate

• Il top view è il window object• Lo storyboard gestisce l’incapsulamento e la view hierarchy automaticamente

• Controller– Supporta le view rispondendo alle interazioni con l’utente con le user actions – È il condotto attraverso cui le view imparano come cambiano i dati

Introcontrols

• Oggetto della user interface– Bottoni, slider, switch…– Forniscono un modo per ricevere messaggi dalla

user interface al codice• Quando un control è generato, un control

event è creato. Ci sono 3 tipi di eventi– Touch & drag– Editing– Value changed

Introoutlets

• Forniscono una forma di riferimento tra l’interfaccia e il codice sorgente

• Si crea un oggetto attraverso il drag&drop nello storyboard

• Sono definiti come proprietà IBOutlets– Comunicano ad Xcode di collegare la proprietà con

l’interface builder.

Intro@property

• Nonatomic– nonatomic è usato per scopi di multi threading. Se dobbiamo configurare l’attributo come nonatomic al

momento della dichiarazione, allora ogni thread che vuole accedere a quell’oggetto, lo può fare rispettando le logiche di multi-threading.

• Copy– copy richiesto quando l’oggetto è mutable. Da utilizzare se si necessita il valore dell’oggetto com è al

momento e non si vuole quel valore in base alle modifiche effettuate dal proprietario dell’oggetto. Avrai bisogno di rilasciare l’oggetto quando hai finito con esso perchè stai rilasciando la sua copia.

• Assign– Assign è in qualche modo l’opposto di copy. Quando chiami il getter di una proprietà assegnata, esso

restituisce una referenza al dato attuale. Tipicamente utilizzerai questo attributo quando hai una proprietà avente tipo primitivo (float, int, BOOL...)

• Retain– retain è richiesto quando l’attributo è un puntatore ad un oggetto. Il setter generato da @synthesize

possiederà l’oggetto. Avrai bisogno quindi di rilasciare l’oggetto quando avrai finito con esso. Utilizzando retain, si incrementerà la memoria nell’ autorelease pool e il relativo retain count.

• Strong– strong è un sostitutivo dell’attributo retain, come parte dell’ Objective-C Automated Reference Counting

(ARC). Se un codice non è ARC, strong è solo un sinonimo di retain. • Weak

– weak è simile a strong ad eccezione che non incrementerà il reference count di 1. non diventerà il proprietario di quell’oggetto ma solo detiene un suo riferimento. Se il reference count dell’oggetto va a 0, verrà deallocato dalla memoria.

Intro#pragma mark

• Categorizza i metodi• Non ha alcun effetto sul codice• Aiuta solo lo sviluppatore quando il codice

diventa difficile da leggere e accedere un determinato metodo

Intro@synthesize

• @property dichiara che esiste un attributo dell’oggetto avente quel nome e quel tipo specifico– Può essere scritta o letta con la “dot notation”

• @synthesize instanzia quella proprietà (e i metodi getter e setter)• Grazie all’ autosynthesis non c’è bisogno di esplicitare @synthesize alla proprietà

dato che verrà automaticamente sintetizzata dal compilatore così com’è @synthesize propertyName = _propertyName

• Tuttavia, ci sono alcune eccezioni:– Proprietà readwrite con custom getter and setter– Se si forniscono entrambi i getter and setter come metodi customizzati, la proprietà non

sarà sintetizzata automaticamente– Proprietà readonly con custom getter– Se si fornisce un’ implementazione customizzata del metodo getter per una proprietà

readonly, essa non verrà sintetizzata automaticamente– @dynamic– Viene usata ad esempio con sottoclassi di NSManagedObject (CoreData) o quando si crea

un outlet per una proprietà definita da una superclasse non definita come IBOutlet:– Se si usa una proprietà con la notazione @dynamic, la proprietà non verrà

automaticamente sintetizzata

Intrometodi + o -

• Person *myPerson = [[Person alloc] init];• -(void)doSomething;– Metodi di istanza– [myPerson doSomething];

• +(void)doSomethingElse;– Metodi di classe (statici)– [Person doSomethingElse];

• Un altro esempio– id object = [[NSObject alloc] init]; – + (id)alloc; – - (id)init;

Introbundle vs framework

• Una libreria statica è un singolo archivio di file di codice che è possibile compilare nell’app a build time

• Una libreria dinamica è un singolo archivio di file di codice che si può eseguire a Runtime

• Frameworks sono gruppi di librerie (dinamiche), headers, dentro I bundle che insieme creano una unità che si può utilizzare durante la programmazione. Simili alle DLL in altre piattaforme.

• Un Bundle è una cartella strutturata che contiene codice e file di supporto. Frameworks sono bundles. Così anche le applicazioni e i plugin.

• Un Plugin è simile a un framework

Intronavigation controller

• Sottotipo di view controller (UINavigationController)

• Gestisce la transizione da un view controller ed un altro (last-in, first-out collection)

• Il primo elemento aggiunto alla navigation controller è la root view controller e non è possibile rimuoverlo dalla navigation view controller

• Il back button provvede a rimuovere la view dalla navigation stack

Introlista degli elementi UI (1)

• Buttons– Types:

• UIButtonTypeCustom • UIButtonTypeRoundedRect• UIButtonTypeDetailDisclosure• UIButtonTypeInfoLight• UIButtonTypeInfoDark• UIButtonTypeContactAdd

– Properties• imageView• titleLabel

– + (id)buttonWithType:(UIButtonType)buttonType – - (UIImage *)backgroundImageForState:(UIControlState)state– - (UIImage *)imageForState:(UIControlState)state – - (void)setTitle:(NSString *)title forState:(UIControlState)state – - (void)addTarget:(id)target action:(SEL)action forControlEvents: (UIControlEvents) controlEvents

• Label– properties

• textAlignment• textColor• text• numberOflines • lineBreakMode

• Toolbar– properties

• barStyle• items

• Navigation Bar– Editor->embed in->nav controller

Introlista degli elementi UI (2)

• Text Fields– Placeholder text which is shown when there is no user input– Normal text – Auto correction type– Key board type– Return key type– Clear button mode– Alignment– Delegate

• Input types - TextFields (textField.keyboardType)– UIKeyboardTypeASCIICapableKeyboard includes all standard ASCII characters. – UIKeyboardTypeNumbersAndPunctuationKeyboard display numbers and punctuations once its

shown. – UIKeyboardTypeURLKeyboard is optimized for URL entry. – UIKeyboardTypeNumberPadKeyboard is used for PIN input and show a numeric keyboard. – UIKeyboardTypePhonePadKeyboard is optimized for entering phone numbers. – UIKeyboardTypeNamePhonePadKeyboard is used for entering name or phone number. – UIKeyboardTypeEmailAddressKeyboard is optimized for entering email address. – UIKeyboardTypeDecimalPadKeyboard is used for entering decimal numbers. – UIKeyboardTypeTwitterKeyboard is optimized for twitter with @ and # symbols.

Introlista degli elementi UI (3)

• Split View– It is used for displaying a two panes with master pane controlling information on detail

pane.– Properties

• delegate• viewControllers

• Text View– It is used for diplaying scrollable list of text information that is optionally editable.– Properties

• dataDetectorTypes• delegate• editable• inputAccessoryView• inputView• text• textAlignment• textColor

– Methods• -(void)textViewDidBeginEditing:(UITextView *)textView -(void)textViewDidEndEditing:(UITextView

*)textView -(void)textViewDidChange:(UITextView *)textView -(BOOL)textViewShouldEndEditing:(UITextView *)textView

Introlista degli elementi UI (4)

• Scroll View– properties

• contentSize• contentInset• contentOffset• delegate

– metodi• - (void)scrollRectToVisible:(CGRect)rect animated:(BOOL)animated• - (void)setContentOffset:(CGPoint)contentOffset animated:(BOOL)animated

– Metodi del delegate• - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView • - (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate • - (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView • - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView

• Table View – Properties

• delegate• dataSource• rowHeight• sectionFooterHeight• sectionHeaderHeight• separatorColor• tableHeaderView• tableFooterView

– Methods• - (UITableViewCell *)cellForRowAtIndexPath:(NSIndexPath *)indexPath • - (void)deleteRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation• - (id)dequeueReusableCellWithIdentifier:(NSString *)identifier • - (id)dequeueReusableCellWithIdentifier:(NSString *)identifier forIndexPath:(NSIndexPath *)indexPath • - (void)reloadData • - (void)reloadRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation - (NSArray *)visibleCells

Introlista degli elementi UI (5)

• Tab bar– Editor -> embed in->tabbar controller– Properties

• backgroundImage• items• selectedItem

• Image View– properties

• image• highlightedImage• userInteractionEnabled• animationImages• animationRepeatCount

– methods• - (id)initWithImage:(UIImage *)image • - (id)initWithImage:(UIImage *)image highlightedImage: (UIImage *)highlightedImage • - (void)startAnimating • - (void)stopAnimating

• Scroll View– properties

• contentSize• contentInset• contentOffset• delegate

– metodi• - (void)scrollRectToVisible:(CGRect)rect animated:(BOOL)animated• - (void)setContentOffset:(CGPoint)contentOffset animated:(BOOL)animated

– Metodi del delegate• - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView • - (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate • - (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView • - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView

Introlista degli elementi UI (6)

• View Transition– It explains the various view transitions between views.

• Pickers– It is used for displaying for selecting a specific data from a list.– Properties

• delegate• dataSource

– Methods• - (void)reloadAllComponents • - (void)reloadComponent:(NSInteger)component • - (NSInteger)selectedRowInComponent:(NSInteger)component • - (void)selectRow:(NSInteger)row inComponent:(NSInteger)component animated:(BOOL)animated

• Switches– It is used as disable and enable for actions.– Properties

• onImage• offImage• On

– Methods• - (void)setOn:(BOOL)on animated:(BOOL)animated

• Sliders– It is used to allow users to make adjustments to a value or process throughout a range of allowed values.– Properties

• continuous • maximumValue• minimumValue• value

– Methods• - (void)setValue:(float)value animated:(BOOL)animated

Introlista degli elementi UI (7)

• Alerts– It is used to give important information to user.– Properties

• alertViewStyle • cancelButtonIndex• delegate• message• numberOfButtons• title

– Methods• - (NSInteger)addButtonWithTitle:(NSString *)title • - (NSString *)buttonTitleAtIndex:(NSInteger)buttonIndex • - (void)dismissWithClickedButtonIndex: (NSInteger)buttonIndex animated:(BOOL)animated • - (id)initWithTitle:(NSString *)title message: (NSString *)message delegate:(id)delegate cancelButtonTitle:(NSString

*)cancelButtonTitle otherButtonTitles:(NSString*)otherButtonTitles, ... • - (void)show

• Icons– It is an image representation used for an action or depict something related to the application.– Properties

• AppIcon• App icon for the App Store • Small icon for Spotlight search results and Settings• Toolbar and navigation bar icon• Tab bar icon