"Codice iPhone lavato a caldo: come "restringere" la tua app per Apple Watch" by Francesco Ingrassia, Marco Passariello, Salvatore Ferranti
Il supporto ad Apple Watch rappresenta per lo sviluppatore iPhone un crocevia fondamentale per emergere dalla massa, nonché una sfida per i designer di tutto il mondo che devono rivoluzionare il modo con cui l'utente interagisce. Partendo da un'app iPhone di esempio avremo modo di toccare con mano quali sono gli approcci comuni ad iOS, le novità e le principali problematiche che il programmatore deve affrontare nello sviluppo di app per Apple Watch.
5. UN PO’ DI NUMERI
ricerca Juniper Research
ricerca IDC
21M di smartwatch venduti nel 2015
~ 13M sono Apple Watch
15k+ app per Apple Watch
App Annie Dicembre 2015
18M di smartwatch venduti nel 2015
~ 8.8M sono Apple Watch
6. IL PERCHÉ DI QUESTO TITOLO
Anonimo
Mobile Solution Architect
7. DI COSA PARLEREMO OGGI
• Utilizzo di Apple Watch
• Architettura
• Fruizione
dell’informazione
• Watch Connectivity
8. QUELLO CHE SI CHIEDONO UN PO’ TUTTI
RACCONTAMI DI NUOVO
A COSA SERVE APPLE WATCH?
9. A COSA SERVE APPLE WATCH
• Ti fornisce le informazioni che vuoi, dove e
quando ti servono
• Ti aiuta a sbrigare in pochi secondi le attività
di ogni giorno
• Ti mette subito in contatto con le persone a
cui tieni di più
Da Apple Store Italia
http://www.apple.com/it/watch/watch-reimagined/
10. PIÙ PRESENTI E ANCORA PIÙ CONNESSI
Vita reale Prendi il
telefono
Usa il
telefono
Più connessi alle persone intorno a voi e a quelle che non lo sono
Presa in prestito da Google
17. ARCHITETTURA DI WATCHOS 2
Watch
App
Watch
Extension
• Indipendenza, in termini di
esecuzione, dalla controparte
iPhone
• UI più reattiva (no overhead di
comunicazione)
• Le chiamate di rete vengono
effettuate direttamente
• Accesso ai sensori (battito
cardiaco, accelerometro e corona
digitale (limitato)
18. WATCHOS 2 Frameworks
• ClockKit
• Contacts
• Core Data
• Core Foundation
• Core Graphics
• Core Location
• Core Motion
• EventKit
• Foundation
• HealthKit
• HomeKit
• Image I/O
• MapKit
• Mobile Core Services
• PassKit
• Security
• Watch Connectivity
• WatchKit
Nati per watchOS
Ereditati da iOS
27. ALTRI VINCOLI
Ogni componente grafico è in realtà un
oggetto proxy che estende
WKInterfaceObject
Il controller può solo agire su un set
ristretto di parametri esposti, solo in
scrittura
28. ALTRI VINCOLI
Il controller agisce esclusivamente sui
componenti già presenti nello storyboard
Non è possibile aggiungere o rimuovere
componenti e runtime
Non è possibile sovrapporre componenti…
29. LAYOUT
Layout model completamente differente
da quello utilizzato su iOS
I componenti sono posizionati
consecutivamente in base a proprietà
dell’elemento stesso e del suo contenitore
46. NAVIGAZIONE - INTERAZIONE FRA LE MODALITÀ
Page-Based
ModalHierarchical
PUSH
PRESENT
PRESENT
NEXT
PAGE
NEXT PAGE
47. PIÙ PRESENTI E ANCORA PIÙ CONNESSI
Vita reale Prendi il
telefono
Usa il
telefono
Più connessi alle persone intorno a voi e a quelle che non lo sono
Presa in prestito da Google
64. INIZIALIZZAZIONE DI WATCH CONNECTIVITY
if (WCSession.isSupported()) {
let session = WCSession.defaultSession()
session.delegate = self
session.activateSession()
}
Note:
Sempre vero su Apple Watch
Note:
Metodo asincrono (da watchOS 2.1+ diventa sincrono)
66. COMUNICAZIONE IN BACKGROUND
Overview
• Coda di contenuti
• Sistema intelligente di trasferimento dati
• Contenuti non trasferiti immediatamente
• Raccomandato se non è richiesta una comunicazione
istantanea
68. APPLICATION CONTEXT
Considerazioni
• L’informazione ricevuta sarà sempre la più recente e/o
rilevante
• Le informazioni sono inviate mediante una coda sequenziale
• L’ultima informazione sovrascriverà sempre quella
precedentemente ricevuta
• Le informazioni sono strutturate sotto forma di dizionari
chiave-valore
• Particolarmente consigliata per la maggior parte delle
applicazioni watchOS
• Ottimo per la gestione degli aggiornamenti nei Glance
69. USER INFO TRANSFER
Watch
App
Watch
Extension
iPhone
App
1
A B C
1) func transferUserInfo(_ userInfo: [String : AnyObject])
2) optional func session(_ session: WCSession,
didReceiveUserInfo userInfo: [String : AnyObject])
2
outstandingUserInfoTransfers
70. USER INFO TRANSFER
Considerazioni
• Le informazioni sono inserite in una coda d’invio
• La coda viene smaltita in maniera sequenziale
• È possibile sempre sapere lo stato della coda d’invio,
mediante la property outstandingUserInfoTransfers
71. FILE TRANSFER
Watch
App
Watch
Extension
iPhone
App
2
A B C
1) func transferFile(_ file: NSURL,
metadata metadata: [String : AnyObject]?)
2) optional func session(_ session: WCSession,
didReceiveFile file: WCSessionFile)
1
~/Documents/InboxoutstandingFileTransfers
72. FILE TRANSFER
Considerazioni
• Gli oggetti da trasferire sono organizzati in modo simile al
sistema User Info Trasfer
• L’invio dei file è strutturato con una coda d’invio
• È possibile accedere alle informazioni di ogni singolo oggetto
della coda
• È possibile includere delle informazioni extra sotto forma di
meta dati
• Il file ricevuto deve essere copiato in un’area di salvataggio
dell’applicazione poiché, dopo l’esecuzione del delegato,
esso sarà automaticamente rimosso dal dispositivo
73. COMUNICAZIONE IN FOREGROUND
Overview
• Permette lo scambio immediato d’informazioni fra due
dispositivi
• Le informazioni sono inviate mediante una coda sequenziale
• Permette di serializzare degli oggetti custom
• È consigliabile inviare delle informazioni di piccola
dimensione
76. LIVE MESSAGING
Considerazioni
• Permette lo scambio immediato d’informazioni fra due
dispositivi
• Le informazioni sono inviate mediante una coda sequenziale
• Permette di serializzare degli oggetti custom
• È consigliabile inviare delle informazioni di piccola
dimensione
78. WATCHKIT DEVELOPMENT TIPS (1/2)
Performance
• Ridurre al minimo il traffico
• Inizializzare i controllers velocemente
• Caricamento dei contenuti in modalità Lazy
• Aggiornare solo gli elementi che cambiano
• Semplificare le scene dei controllers
• Migliorare i tempi di caricamento, con un minor numero di
righe per le tabelle
79. WATCHKIT DEVELOPMENT TIPS (2/2)
Consigli generali
• Effettuare animazioni mediante sequenze di immagini
• Utilizzare i settings bundle
• Utilizzare il sistema di dettatura vocale
• Salvare le sequenze di immagini sull’Apple Watch
• Ripristino dello stato per l’applicazione
Comunicazione con iPhone
• L’iPhone App dovrebbe fare la maggior parte del lavoro
• Utilizzare le API Handoff
• Condividere i dati mediante App Groups
• Utilizzare Frameworks per condividere codice