SlideShare uma empresa Scribd logo
1 de 43
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 iOS
estratto 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
Intro
il 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
Intro
iOS
• 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
Intro
approccio 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
Intro
processo sviluppo app
Intro
processo 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à.
Intro
cosa 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…
Intro
per iniziare?
• Ti serve
– Un computer mac
– Una licenza sviluppatore iOS
– Un device (aiuta ma non indispensabile)
– Tempo e denaro
Intro
xcode
• 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
Intro
risorse utili
• documentazione
• Stackoverflow (!!!)
– Il vostro migliore amico
• Gruppi su facebook
• Tutorial youtube (solo per l’inizio)
• developer.apple.com
Intro
dentro 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
Intro
hello iOS World!
Intro
hello Xcode World!
Intro
new project
Intro
familiarità con Xcode 6
Intro
hello 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
Intro
tips
• Click sulla root del progetto per vedere
proprietà di configurazione dell’app
– General
– Capabilities
– Info
– Build settings
– Simulatore
Intro
main.m
Intro
main.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.
Intro
i 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)
Intro
lo 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
Intro
la 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
Intro
esempio
Intro
nota 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
Intro
MVC
Intro
MVC
• 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
Intro
controls
• 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
Intro
outlets
• 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
Intro
metodi + 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;
Intro
bundle 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
Intro
navigation 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
Intro
lista 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
Intro
lista 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.
Intro
lista 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
Intro
lista 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
Intro
lista 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
Intro
lista 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
Intro
lista 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

Mais conteúdo relacionado

Semelhante a ios 8 - parte 1 - intro - ita

Slide typescript - net campus
Slide typescript - net campusSlide typescript - net campus
Slide typescript - net campus
DotNetCampus
 
Cert04 70-484 - essentials of developing windows store apps
Cert04   70-484 - essentials of developing windows store appsCert04   70-484 - essentials of developing windows store apps
Cert04 70-484 - essentials of developing windows store apps
DotNetCampus
 
How I did it (in .NET): idiomatic Domain Driven Design
How I did it (in .NET): idiomatic Domain Driven DesignHow I did it (in .NET): idiomatic Domain Driven Design
How I did it (in .NET): idiomatic Domain Driven Design
Andrea Saltarello
 
follow-ap DAY 4: HTML5 e jQuery
follow-ap DAY 4: HTML5 e jQueryfollow-ap DAY 4: HTML5 e jQuery
follow-ap DAY 4: HTML5 e jQuery
QIRIS
 
Writing apps for android with .net
Writing apps for android with .net Writing apps for android with .net
Writing apps for android with .net
Leonardo Alario
 
Slide typescript - xe dotnet - Codemotion Rome 2015
Slide typescript - xe dotnet - Codemotion Rome 2015Slide typescript - xe dotnet - Codemotion Rome 2015
Slide typescript - xe dotnet - Codemotion Rome 2015
Codemotion
 

Semelhante a ios 8 - parte 1 - intro - ita (20)

C#, imparare a programmare e sopravvivere
C#, imparare a programmare e sopravvivereC#, imparare a programmare e sopravvivere
C#, imparare a programmare e sopravvivere
 
Sviluppare app native per iOS
Sviluppare app native per iOSSviluppare app native per iOS
Sviluppare app native per iOS
 
Sviluppare apps native per iOS - Lo Stretto Digitale
Sviluppare apps native per iOS - Lo Stretto DigitaleSviluppare apps native per iOS - Lo Stretto Digitale
Sviluppare apps native per iOS - Lo Stretto Digitale
 
TYPESCRIPT, ANGULAR E BOOTSTRAP ASSIEME PER APPLICAZIONI REAL WORLD
TYPESCRIPT, ANGULAR E BOOTSTRAP ASSIEME PER APPLICAZIONI REAL WORLDTYPESCRIPT, ANGULAR E BOOTSTRAP ASSIEME PER APPLICAZIONI REAL WORLD
TYPESCRIPT, ANGULAR E BOOTSTRAP ASSIEME PER APPLICAZIONI REAL WORLD
 
Slide typescript - net campus
Slide typescript - net campusSlide typescript - net campus
Slide typescript - net campus
 
Sencha touch: Sviluppare un'app - 4° parte
Sencha touch: Sviluppare un'app - 4° parteSencha touch: Sviluppare un'app - 4° parte
Sencha touch: Sviluppare un'app - 4° parte
 
iOS Programming
iOS ProgrammingiOS Programming
iOS Programming
 
Cert04 70-484 - essentials of developing windows store apps
Cert04   70-484 - essentials of developing windows store appsCert04   70-484 - essentials of developing windows store apps
Cert04 70-484 - essentials of developing windows store apps
 
Creare un Information Radiator con Delphi
Creare un Information Radiator con DelphiCreare un Information Radiator con Delphi
Creare un Information Radiator con Delphi
 
Never Mind the Bollocks: here's the Domain Driven Design
Never Mind the Bollocks: here's the Domain Driven DesignNever Mind the Bollocks: here's the Domain Driven Design
Never Mind the Bollocks: here's the Domain Driven Design
 
Machine learning models continuous deployment on azure using devops
Machine learning models continuous deployment on azure using devopsMachine learning models continuous deployment on azure using devops
Machine learning models continuous deployment on azure using devops
 
How I did it (in .NET): idiomatic Domain Driven Design
How I did it (in .NET): idiomatic Domain Driven DesignHow I did it (in .NET): idiomatic Domain Driven Design
How I did it (in .NET): idiomatic Domain Driven Design
 
follow-ap DAY 4: HTML5 e jQuery
follow-ap DAY 4: HTML5 e jQueryfollow-ap DAY 4: HTML5 e jQuery
follow-ap DAY 4: HTML5 e jQuery
 
WhyMCA12 - Android Tools e la gestione di progetti complessi
WhyMCA12 - Android Tools e la gestione di progetti complessiWhyMCA12 - Android Tools e la gestione di progetti complessi
WhyMCA12 - Android Tools e la gestione di progetti complessi
 
Writing apps for android with .net
Writing apps for android with .net Writing apps for android with .net
Writing apps for android with .net
 
AngularJs, Bootstrap e Cordova: il connubio per app mobile cross-platform
AngularJs, Bootstrap e Cordova: il connubio per app mobile cross-platformAngularJs, Bootstrap e Cordova: il connubio per app mobile cross-platform
AngularJs, Bootstrap e Cordova: il connubio per app mobile cross-platform
 
Applicazioni mobile integrate a TYPO3
Applicazioni mobile integrate a TYPO3Applicazioni mobile integrate a TYPO3
Applicazioni mobile integrate a TYPO3
 
Meetup ASP.NET Core Angular
Meetup ASP.NET Core AngularMeetup ASP.NET Core Angular
Meetup ASP.NET Core Angular
 
Java Programming Language
Java Programming LanguageJava Programming Language
Java Programming Language
 
Slide typescript - xe dotnet - Codemotion Rome 2015
Slide typescript - xe dotnet - Codemotion Rome 2015Slide typescript - xe dotnet - Codemotion Rome 2015
Slide typescript - xe dotnet - Codemotion Rome 2015
 

ios 8 - parte 1 - intro - ita

  • 2. 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
  • 3. Il corso iOS estratto 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
  • 4. Intro il 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
  • 5. Intro iOS • 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
  • 6. Intro approccio 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
  • 8. Intro processo 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à.
  • 9. Intro cosa 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…
  • 10. Intro per iniziare? • Ti serve – Un computer mac – Una licenza sviluppatore iOS – Un device (aiuta ma non indispensabile) – Tempo e denaro
  • 11. Intro xcode • 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
  • 12. Intro risorse utili • documentazione • Stackoverflow (!!!) – Il vostro migliore amico • Gruppi su facebook • Tutorial youtube (solo per l’inizio) • developer.apple.com
  • 13. Intro dentro 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
  • 18. Intro hello 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
  • 19. Intro tips • Click sulla root del progetto per vedere proprietà di configurazione dell’app – General – Capabilities – Info – Build settings – Simulatore
  • 21. Intro main.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.
  • 22. Intro i 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)
  • 23. Intro lo 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
  • 24. Intro la 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
  • 26. Intro nota 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
  • 28. Intro MVC • 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
  • 29. Intro controls • 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
  • 30. Intro outlets • 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.
  • 31. 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.
  • 32. 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
  • 33. 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
  • 34. Intro metodi + 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;
  • 35. Intro bundle 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
  • 36. Intro navigation 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
  • 37. Intro lista 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
  • 38. Intro lista 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.
  • 39. Intro lista 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
  • 40. Intro lista 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
  • 41. Intro lista 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
  • 42. Intro lista 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
  • 43. Intro lista 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