Sei sulla pagina 1di 12

Anatomia di un’app iOS

Sistemi Operativi

Ivano Bilenchi

Ingegneria Informatica e dell’Automazione


(A.A. 2017/2018)
Indice

o Struttura di un’app (2)

o Event loop (3)

o Cocoa Model-View-Controller (4-5)

o Ciclo di vita di un’app (6)


o UIApplication e UIApplicationDelegate (7)

o Design pattern (delegation ed extension) (8-9)

o Info.plist (10)

o Demo – implementiamo un web browser (11)

Sistemi Operativi – Anatomia di un’app iOS – Ivano Bilenchi 1 di 11


Struttura di un’app

Sistemi Operativi – Anatomia di un’app iOS – Ivano Bilenchi 2 di 11


Event Loop

Sistemi Operativi – Anatomia di un’app iOS – Ivano Bilenchi 3 di 11


Cocoa MVC (1)
o View: classe base UIView, rappresenta un «rettangolo» sullo
schermo, renderizzato ed animato da CoreAnimation.
§ Si occupa esclusivamente dell’interfaccia utente.
§ Sottoclassi built-in (UIButton, UILabel, UISwitch, …) o personalizzate.
o Controller: classe base UIViewController, è l’intermediario
tra model e view.
§ Aggiorna i contenuti di una gerarchia di view, tipicamente a seguito di
modifiche nel model.
§ Risponde alle interazioni utente con le view che gestisce
coordinandosi con altri oggetti, anche altri controller, per portare a
termine task complessi.
o Model: nessuna classe base particolare.
§ Contiene i dati dell’applicazione.
§ Definisce la logica che manipola i dati.
§ Es: accesso alla rete, persistenza, parsing, ecc.

Sistemi Operativi – Anatomia di un’app iOS – Ivano Bilenchi 4 di 11


Cocoa MVC (2)
Azioni utente
Controller Aggiorna Azioni utente Controller Aggiorna

Aggiorna
Aggiorna
Notifica
View Model View Notifica Model
Interroga

MVC tradizionale Cocoa MVC

o Problema: view e model o Soluzione: view e model


sono strettamente comunicano tra loro
accoppiati, dunque il riuso tramite il controller, che
delle view risulta difficile. tipicamente ha meno senso
riutilizzare (contiene logica
specifica per singola app).

Sistemi Operativi – Anatomia di un’app iOS – Ivano Bilenchi 5 di 11


Ciclo di vita di un’app
o Not running: l’app non è stata
lanciata o è stata terminata.
o Inactive: l’app è in foreground ma
non riceve eventi (stato
temporaneo, tipicamente di breve
durata).
o Active: l’app è in foreground e
riceve eventi.
o Background: l’app è in
background e sta eseguendo
codice, tipicamente prima di
essere sospesa.
o Suspended: l’app è in background
ma non sta eseguendo codice.
Sistemi Operativi – Anatomia di un’app iOS – Ivano Bilenchi 6 di 11
UIApplication e delegate
o UIApplication: gestisce l’event loop, il ciclo di vita dell’app,
l’inizializzazione della finestra ed altri eventi di alto livello. Si
usa as-is, configurabile tramite un oggetto delegate.
o App delegate: classe custom implementante il protocollo
UIApplicationDelegate, che espone metodi per gestire:
§ Inizializzazione dell’app.
§ Transizioni di stato (not running, inactive, active, ecc.)
§ Gestione di eventi e warning di sistema (download completato,
memoria in esaurimento, ecc.).
§ Supporto al salvataggio e ripristino dell’attività dell’utente.
§ Gestione di schemi URL.
§ Gestione di notifiche locali e push.
§ Altre tecnologie:
• Handoff: permette la condivisione dell’attività utente tra device multipli.
• Siri: gestione di intent generati a seguito dell’invocazione di Siri.
• WatchKit, CloudKit, HealthKit, …: gestione di specifici eventi generati da
framework built-in.
Sistemi Operativi – Anatomia di un’app iOS – Ivano Bilenchi 7 di 11
Delegation
o Design pattern conclamato nell’ingegneria del software.
o Problema: l’utente fa tap su un pulsante per la sottomissione
di un form. Stando ad MVC, il controller deve in qualche
modo gestire l’evento.
o Soluzione: inserire la logica direttamente nel controller.
§ Violazione di MVC: la logica di dominio non è responsabilità del
controller, che al più dovrebbe coordinarsi con altri oggetti.
§ Che succede se mi serve logica simile in un’altra interfaccia dell’app?
Duplicazione di codice, violazione del principio DRY.
o Soluzione corretta: delegare l’azione a qualcun altro.
§ Il controller ha una proprietà delegate, che risponde ad uno specifico
protocollo (interfaccia).
§ Qualunque oggetto implementi tale interfaccia può comportarsi da
delegate per quel controller, e viceversa.
§ Rispettati MVC e DRY, codice più modulare e testabile.

Sistemi Operativi – Anatomia di un’app iOS – Ivano Bilenchi 8 di 11


Extensions
o In Objective-C e Swift è possibile estendere classi e
protocolli aggiungendovi metodi.

Sistemi Operativi – Anatomia di un’app iOS – Ivano Bilenchi 9 di 11


Info.plist
o File strutturato contenente informazioni essenziali sulla
configurazione dell’app.
o Generato automaticamente a partire dalle tab General,
Capabilities e Info di Xcode.
o Cosa contiene?
§ Informazioni generali: nome, identificativo, versione, ecc.
§ Dispositivi supportati: iPhone, iPad o Universal.
§ Artwork e risorse: icone, storyboard, ecc.
§ Orientazioni supportate: landscape, portrait o entrambi.
§ Capabilities: le funzionalità del dispositivo che l’app intende utilizzare.
§ Tipi di documento: tipi di documento che l’app è in grado di aprire, in
modo da essere integrata nei menu di condivisione system-wide.
§ Schemi URL: i protocolli supportati dall’app. Si utilizzano per fare
inter-app communication, codificando i dati da scambiare all’interno di
URL. (Es: protocollo://dominio.com?chiave=valore).

Sistemi Operativi – Anatomia di un’app iOS – Ivano Bilenchi 10 di 11


Demo
o Implementazione di un semplice
web browser in Swift 4,
utilizzando il framework
WebKit.
o Sorgenti disponibili all’URL:
https://github.com/IvanoBilenchi/
iOS-Browser

Sistemi Operativi – Anatomia di un’app iOS – Ivano Bilenchi 11 di 11