Codice iPhone lavato a caldo: come "restringere" la tua app per Apple Watch

81
Codice iPhone lavato a caldo come “restringere” la tua app per Apple Watch S. Ferranti, F. Ingrassia, M. Passariello ROME 18-19 MARCH 2016

Transcript of Codice iPhone lavato a caldo: come "restringere" la tua app per Apple Watch

Page 1: Codice iPhone lavato a caldo: come "restringere" la tua app per Apple Watch

Codice iPhone lavato a caldo come “restringere” la tua app per Apple Watch

S. Ferranti, F. Ingrassia, M. Passariello

ROME 18-19 MARCH 2016

Page 2: Codice iPhone lavato a caldo: come "restringere" la tua app per Apple Watch

LEI NON SA CHI SIAMO NOI

FrancescoSenior iOS Dev @ Freelance

SalvatoreSenior iOS Developer @

MarcoSenior iOS Consultant @

Page 3: Codice iPhone lavato a caldo: come "restringere" la tua app per Apple Watch

ESPERIENZA

5+ anni su progetti in ambito Finanziario, Telco, Media, B2C & Retail

Page 4: Codice iPhone lavato a caldo: come "restringere" la tua app per Apple Watch

LIBRO

Forse vi ricorderete di noi…

Page 5: Codice iPhone lavato a caldo: come "restringere" la tua app per Apple Watch

UN PO’ DI NUMERI

ricerca Juniper Research

ricerca IDC

21M di smartwatch venduti nel 2015 ~ 13M sono Apple Watch

15k+ app per Apple WatchApp Annie Dicembre 2015

18M di smartwatch venduti nel 2015 ~ 8.8M sono Apple Watch

Page 6: Codice iPhone lavato a caldo: come "restringere" la tua app per Apple Watch

IL PERCHÉ DI QUESTO TITOLO

AnonimoMobile Solution Architect

Page 7: Codice iPhone lavato a caldo: come "restringere" la tua app per Apple Watch

DI COSA PARLEREMO OGGI

• Utilizzo di Apple Watch

• Architettura• Fruizione

dell’informazione• Watch Connectivity

Page 8: Codice iPhone lavato a caldo: come "restringere" la tua app per Apple Watch

QUELLO CHE SI CHIEDONO UN PO’ TUTTI

RACCONTAMI DI NUOVO

A COSA SERVE APPLE WATCH?

Page 9: Codice iPhone lavato a caldo: come "restringere" la tua app per Apple Watch

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 Italiahttp://www.apple.com/it/watch/watch-reimagined/

Page 10: Codice iPhone lavato a caldo: come "restringere" la tua app per Apple Watch

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

Page 11: Codice iPhone lavato a caldo: come "restringere" la tua app per Apple Watch

Architettura di Apple Watch

Page 12: Codice iPhone lavato a caldo: come "restringere" la tua app per Apple Watch

EXTENSION

Extensions: rendere disponibili all’esterno dell’applicazione le funzionalità dell’applicazione stessa

Page 13: Codice iPhone lavato a caldo: come "restringere" la tua app per Apple Watch

ARCHITETTURA

WatchExtension

Watch App

Applicazione contenitore presente su iPhone

Extension Apple Watch dell’applicazione iPhone, contiene la logica applicativa

Contiene tutto ciò che riguarda la UI. Assets e Storyboard no XIB in Apple Watch

iPhone App

Page 14: Codice iPhone lavato a caldo: come "restringere" la tua app per Apple Watch

ARCHITETTURA DI WATCHOS 1

Watch App

WatchExtension

iPhone App

Page 15: Codice iPhone lavato a caldo: come "restringere" la tua app per Apple Watch

WATCHOS 1 Framework

WatchKit

Page 16: Codice iPhone lavato a caldo: come "restringere" la tua app per Apple Watch

ARCHITETTURA DI WATCHOS 2

Watch App

WatchExtension

iPhone App

Page 17: Codice iPhone lavato a caldo: come "restringere" la tua app per Apple Watch

ARCHITETTURA DI WATCHOS 2

Watch App

WatchExtension

• 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)

Page 18: Codice iPhone lavato a caldo: come "restringere" la tua app per Apple Watch

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

Page 19: Codice iPhone lavato a caldo: come "restringere" la tua app per Apple Watch

STRUTTURA

Watch App

Watch Extension

Page 20: Codice iPhone lavato a caldo: come "restringere" la tua app per Apple Watch

WATCH APP

Risorse Storyboard

Page 21: Codice iPhone lavato a caldo: come "restringere" la tua app per Apple Watch

WATCH EXTENSION

ExtensionDelegate

active

inactive

not running

InterfaceControllerinit

awakeWithContext:

willActivate

didAppear

didDeactivate

Page 22: Codice iPhone lavato a caldo: come "restringere" la tua app per Apple Watch

WATCH EXTENSION

ExtensionDelegate

active

inactive

not running

InterfaceControllerinit

awakeWithContext:

willActivate

didAppear

didDeactivate

self.view.addSubview(..)

Page 23: Codice iPhone lavato a caldo: come "restringere" la tua app per Apple Watch

COME FUNZIONA (1/4)

WatchExtension

Watch App Storyboa

rd

Page 24: Codice iPhone lavato a caldo: come "restringere" la tua app per Apple Watch

COME FUNZIONA (2/4)

WatchExtension

Watch App Storyboa

rd

label.setText(“txt”)

Page 25: Codice iPhone lavato a caldo: come "restringere" la tua app per Apple Watch

COME FUNZIONA (3/4)

WatchExtension

Watch App Storyboa

rd

label.getText()

Page 26: Codice iPhone lavato a caldo: come "restringere" la tua app per Apple Watch

COME FUNZIONA (4/4)

L’InterfaceController è responsabile del mantenimento dello stato dei

componenti dell’interfaccia

Page 27: Codice iPhone lavato a caldo: come "restringere" la tua app per Apple Watch

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

Page 28: Codice iPhone lavato a caldo: come "restringere" la tua app per Apple Watch

ALTRI VINCOLI

Il controller agisce esclusivamente sui componenti già presenti nello

storyboard

Non è possibile aggiungere o rimuovere componenti e runtime

Non è possibile sovrapporre componenti…

Page 29: Codice iPhone lavato a caldo: come "restringere" la tua app per Apple Watch

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

Page 30: Codice iPhone lavato a caldo: come "restringere" la tua app per Apple Watch

LAYOUT

Page 31: Codice iPhone lavato a caldo: come "restringere" la tua app per Apple Watch

FLOW LAYOUT

InterfaceController

Page 32: Codice iPhone lavato a caldo: come "restringere" la tua app per Apple Watch

FLOW LAYOUT

InterfaceControllerInterfaceObject

InterfaceObject

Page 33: Codice iPhone lavato a caldo: come "restringere" la tua app per Apple Watch

FLOW LAYOUT

InterfaceController

InterfaceGroup

InterfaceGroup

Page 34: Codice iPhone lavato a caldo: come "restringere" la tua app per Apple Watch

FLOW LAYOUT

InterfaceController

Page 35: Codice iPhone lavato a caldo: come "restringere" la tua app per Apple Watch

FLOW LAYOUT - DIRECTION

InterfaceController

321

Page 36: Codice iPhone lavato a caldo: come "restringere" la tua app per Apple Watch

FLOW LAYOUT - DIRECTION

InterfaceController

1

2

Page 37: Codice iPhone lavato a caldo: come "restringere" la tua app per Apple Watch

FLOW LAYOUT - DIRECTION

InterfaceController

1

2

DEMO

Page 38: Codice iPhone lavato a caldo: come "restringere" la tua app per Apple Watch

NAVIGAZIONE - HIERARCHICAL

PUSH

Page 39: Codice iPhone lavato a caldo: come "restringere" la tua app per Apple Watch

NAVIGAZIONE - HIERARCHICAL

PUSH

BACK

Page 40: Codice iPhone lavato a caldo: come "restringere" la tua app per Apple Watch

NAVIGAZIONE – PAGE BASED

NEXT PAGE

Page 41: Codice iPhone lavato a caldo: come "restringere" la tua app per Apple Watch

NAVIGAZION - MODAL

PRESENT

DISMISS

Page 42: Codice iPhone lavato a caldo: come "restringere" la tua app per Apple Watch

NAVIGAZIONE - INTERAZIONE FRA LE MODALITÀ

Page-Based

Modal

Hierarchical

Page 43: Codice iPhone lavato a caldo: come "restringere" la tua app per Apple Watch

NAVIGAZIONE - INTERAZIONE FRA LE MODALITÀ

Page 44: Codice iPhone lavato a caldo: come "restringere" la tua app per Apple Watch

NAVIGAZIONE - INTERAZIONE FRA LE MODALITÀ

Page-Based

Modal

Hierarchical

Page 45: Codice iPhone lavato a caldo: come "restringere" la tua app per Apple Watch

NAVIGAZIONE - INTERAZIONE FRA LE MODALITÀ

Page-Based

Modal

Hierarchical

Page 46: Codice iPhone lavato a caldo: come "restringere" la tua app per Apple Watch

NAVIGAZIONE - INTERAZIONE FRA LE MODALITÀ

Page-Based

Modal

HierarchicalPUS

H

PRESENT

PRESENT

PRES

ENT

NEXT PAGE

NEXT PAGE

Page 47: Codice iPhone lavato a caldo: come "restringere" la tua app per Apple Watch

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

Page 48: Codice iPhone lavato a caldo: come "restringere" la tua app per Apple Watch

TEMPO DI INTERAZIONE

Dimensioni dello schermo

Tem

po d

i int

eraz

ione

Page 49: Codice iPhone lavato a caldo: come "restringere" la tua app per Apple Watch

Fruizione dell’informazione

Page 50: Codice iPhone lavato a caldo: come "restringere" la tua app per Apple Watch

Interazioni

FRUIZIONE DELL’INFORMAZIONE

Page 51: Codice iPhone lavato a caldo: come "restringere" la tua app per Apple Watch

INTERAZIONI - GESTURE

Page 52: Codice iPhone lavato a caldo: come "restringere" la tua app per Apple Watch

INTERAZIONI – CORONA DIGITALE

Page 53: Codice iPhone lavato a caldo: come "restringere" la tua app per Apple Watch

INTERAZIONI – FORCE TOUCH

Page 54: Codice iPhone lavato a caldo: come "restringere" la tua app per Apple Watch

INTERAZIONI – DETTATURA VOCALE

Page 55: Codice iPhone lavato a caldo: come "restringere" la tua app per Apple Watch

INTERAZIONI - ACCELEROMETRO

Page 56: Codice iPhone lavato a caldo: come "restringere" la tua app per Apple Watch

App, Glance, Notifiche e Complication

FRUIZIONE DELL’INFORMAZIONE

Page 57: Codice iPhone lavato a caldo: come "restringere" la tua app per Apple Watch

GLANCE

Page 58: Codice iPhone lavato a caldo: come "restringere" la tua app per Apple Watch

NOTIFICHE

NEXT PAGE

short looks

Long looks

static

dynamic

Page 59: Codice iPhone lavato a caldo: come "restringere" la tua app per Apple Watch

• ClockKit• Provider di dati• Timeline• Complication Template• Famiglie di

complication

COMPLICATION

Page 60: Codice iPhone lavato a caldo: come "restringere" la tua app per Apple Watch

LIMITE ATTUALE

Non può esistere un’applicazione Apple

Watch senza un’applicazione

iPhone

Page 61: Codice iPhone lavato a caldo: come "restringere" la tua app per Apple Watch

FRAMEWORK

Watch Connectivity

Page 62: Codice iPhone lavato a caldo: come "restringere" la tua app per Apple Watch

WATCH CONNECTIVITY

Fornisce un canale bidirezionale di comunicazione tra

un’iPhone App ed una Watch App

Note: Compatibile solamente con iPhone

Page 63: Codice iPhone lavato a caldo: come "restringere" la tua app per Apple Watch

TIPOLOGIE DI COMUNICAZIONE

Application Context

User Info Transfer

File Transfer

Background Foreground

Live Messaging

Page 64: Codice iPhone lavato a caldo: come "restringere" la tua app per Apple Watch

INIZIALIZZAZIONE DI WATCH CONNECTIVITY

if (WCSession.isSupported()) {let session = WCSession.defaultSession()session.delegate = selfsession.activateSession()

}

Note: Sempre vero su Apple Watch

Note: Metodo asincrono (da watchOS 2.1+ diventa sincrono)

Page 65: Codice iPhone lavato a caldo: come "restringere" la tua app per Apple Watch

SESSIONE DI COMUNICAZIONE

Watch App

WatchExtension

iPhone App

2) session.reachability == true optional func sessionReachabilityDidChange(_ session: WCSession)

1) session.paired == true

1

2

3) session.watchAppInstalled == true session.watchDirectoryURL != nil

3

Page 66: Codice iPhone lavato a caldo: come "restringere" la tua app per Apple Watch

COMUNICAZIONE IN BACKGROUND

Overview• Coda di contenuti• Sistema intelligente di trasferimento dati• Contenuti non trasferiti immediatamente• Raccomandato se non è richiesta una comunicazione

istantanea

Page 67: Codice iPhone lavato a caldo: come "restringere" la tua app per Apple Watch

APPLICATION CONTEXT

Watch App

WatchExtension

iPhone App

1ABC

1) func updateApplicationContext(_ applicationContext: [String : AnyObject])

2) optional func session(_ session: WCSession, didReceiveApplicationContext applicationContext: [String : AnyObject])

2

AC

applicationContext receivedApplicationContext

Page 68: Codice iPhone lavato a caldo: come "restringere" la tua app per Apple Watch

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

Page 69: Codice iPhone lavato a caldo: come "restringere" la tua app per Apple Watch

USER INFO TRANSFER

Watch App

WatchExtension

iPhone App

1A B C

1) func transferUserInfo(_ userInfo: [String : AnyObject])2) optional func session(_ session: WCSession, didReceiveUserInfo userInfo: [String : AnyObject])

2

outstandingUserInfoTransfers

Page 70: Codice iPhone lavato a caldo: come "restringere" la tua app per Apple Watch

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

Page 71: Codice iPhone lavato a caldo: come "restringere" la tua app per Apple Watch

FILE TRANSFER

Watch App

WatchExtension

iPhone App

2A B C

1) func transferFile(_ file: NSURL, metadata metadata: [String : AnyObject]?)

2) optional func session(_ session: WCSession, didReceiveFile file: WCSessionFile)

1

~/Documents/InboxoutstandingFileTransfers

Page 72: Codice iPhone lavato a caldo: come "restringere" la tua app per Apple Watch

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 poiche, dopo l’esecuzione del delegato, esso sarà automaticamente rimosso dal dispositivo

Page 73: Codice iPhone lavato a caldo: come "restringere" la tua app per Apple Watch

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

Page 74: Codice iPhone lavato a caldo: come "restringere" la tua app per Apple Watch

LIVE MESSAGING

Watch App

WatchExtension

iPhone App

1) Entrambe le applicazioni sono raggiungibili ed in Foreground

2) La Watch App può iniziare una comunicazione avviando la iPhone App in Background rendendola quindi raggiungibile

1

2

Page 75: Codice iPhone lavato a caldo: come "restringere" la tua app per Apple Watch

LIVE MESSAGING

Watch App

WatchExtension

iPhone App

1A B

1) func sendMessage(_ message: [String : AnyObject], replyHandler replyHandler: (([String : AnyObject]) -> Void)?, errorHandler errorHandler: ((NSError) -> Void)?)

2) optional func session(_ session: WCSession, didReceiveMessage message: [String : AnyObject], replyHandler replyHandler: ([String : AnyObject]) -> Void)

2C D

Page 76: Codice iPhone lavato a caldo: come "restringere" la tua app per Apple Watch

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

Page 77: Codice iPhone lavato a caldo: come "restringere" la tua app per Apple Watch

TIPS

WatchKit Development TipsOptimize your WatchKit apps with these tips and best practices.

Reference:https://developer.apple.com/watchkit/tips/

Page 78: Codice iPhone lavato a caldo: come "restringere" la tua app per Apple Watch

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

Page 79: Codice iPhone lavato a caldo: come "restringere" la tua app per Apple Watch

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

Page 80: Codice iPhone lavato a caldo: come "restringere" la tua app per Apple Watch

DOMANDE?

FORSE TE VOLEVI CHIEDERE

“CHE ORE SONO?”

Page 81: Codice iPhone lavato a caldo: come "restringere" la tua app per Apple Watch

Thanks!

ROME 18-19 MARCH 2016

All pictures belongto their respective authors

@kajinka13@effecomefra@j4s0n13

Salvatore

Francesco

Marco