Codice iPhone lavato a caldo: come "restringere" la tua app per Apple WatchCodemotion
"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.
Codice iPhone lavato a caldo: come "restringere" la tua app per Apple WatchCodemotion
"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.
Antonio Russo, Federico Oldrini e Jacopo Giola di Makeitapp hanno presentato il workshop di CommitUniversity, dedicato al Backend as a Service, mostrandoci come costruire con esso un applicazione.
Microsoft Band e' uno dei piu' innovativi e cross platform smartwatch sul mercato. Recentemente sono stati rilasciati SDK per le principali piattaforme mobile. In questa sessione vedremo come interagire con lo smartwatch da applicazioni Windows Phone e Windows Store.
Grazie a Team Foundation Build è possibile adottare pratiche di integrazione continua nel proprio progetto. In questa presentazione viene introdotta la struttura di tfs build assieme alle tecniche base per effettuare una customizzazione della build.
Angular js o React? Spunti e idee per la scelta di un frameworkGiovanni Buffa
Come poter scegliere un framework da utilizzare in un progetto per una web applications? Durante questo workshop analizzeremo le parti fondamentali di AngularJs e React, in modo da capire pregi e difetti di ognungo dei due principali strumenti di sviluppo.
Dependency injection questa sconosciutaAndrea Dottor
L'uscita di ASP.NET Core ha portato a una maggiore diffusione dell'utilizzo della DI (Dependency Injection) ma spesso senza che lo sviluppatore sappia la sua reale utilità o potenzialità.
Dependency Injection, uno dei design pattern della programmazione OOP. Una best-practice dello sviluppo che può portare alla semplificazione del codice scritto, facilitare il disacoppiamento, e migliorare la testabilità.
In questa sessione vedremo cos'è la DI e come utilizzarla intelligentemente all'interno dei nostri progetti.
Slide dell'evento "XE One Day - Good code" tenuto il 15.09.2018.
Il codice è disponibile alla pagina dell'evento https://www.xedotnet.org/eventi/one-day-good-code/
Antonio Russo, Federico Oldrini e Jacopo Giola di Makeitapp hanno presentato il workshop di CommitUniversity, dedicato al Backend as a Service, mostrandoci come costruire con esso un applicazione.
Microsoft Band e' uno dei piu' innovativi e cross platform smartwatch sul mercato. Recentemente sono stati rilasciati SDK per le principali piattaforme mobile. In questa sessione vedremo come interagire con lo smartwatch da applicazioni Windows Phone e Windows Store.
Grazie a Team Foundation Build è possibile adottare pratiche di integrazione continua nel proprio progetto. In questa presentazione viene introdotta la struttura di tfs build assieme alle tecniche base per effettuare una customizzazione della build.
Angular js o React? Spunti e idee per la scelta di un frameworkGiovanni Buffa
Come poter scegliere un framework da utilizzare in un progetto per una web applications? Durante questo workshop analizzeremo le parti fondamentali di AngularJs e React, in modo da capire pregi e difetti di ognungo dei due principali strumenti di sviluppo.
Dependency injection questa sconosciutaAndrea Dottor
L'uscita di ASP.NET Core ha portato a una maggiore diffusione dell'utilizzo della DI (Dependency Injection) ma spesso senza che lo sviluppatore sappia la sua reale utilità o potenzialità.
Dependency Injection, uno dei design pattern della programmazione OOP. Una best-practice dello sviluppo che può portare alla semplificazione del codice scritto, facilitare il disacoppiamento, e migliorare la testabilità.
In questa sessione vedremo cos'è la DI e come utilizzarla intelligentemente all'interno dei nostri progetti.
Slide dell'evento "XE One Day - Good code" tenuto il 15.09.2018.
Il codice è disponibile alla pagina dell'evento https://www.xedotnet.org/eventi/one-day-good-code/
Similar to Progettazione per Apple Watch - Todi Appy Days 2015 (20)
#VDT Visual Design Thinking - Todi Appy Days 2015Todi Appy Days
La presentazione del workshop "#VDT Visual Design Thinking" di Carlo Frinolli a Todi Appy Days 2015.
Un tentativo di sistematizzare il processo lavorativo di nois3 e una proposta che mostra, assieme ad alcuni casi di studio, come la qualità del lavoro e la soddisfazione del team siano cresciuti. Una lista di cose se volete banali, ma messe in fila.
The dark side of the app - Todi Appy Days 2015Todi Appy Days
La presentazione del workshop di Simone Di Maulo e Claudio D'Alicandro "The dark side of the app" a Todi Appy Days 2015.
The dark side of the app: a journey through the api development.
Guida galattica per Product Hunt - Todi Appy Days 2015Todi Appy Days
La presentazione del talk "Guida galattica per Product Hunt" di Raffaele Gaito a Todi Appy Days 2015.
"In questo talk cerco di rispondere a queste e ad altre domande. Il viaggio inizia con un po' di storia sulla nascita e l'ascesa di Product Hunt. Poi passeremo ad approfondire i numeri, analizzando qualche caso di successo. Infine, concluderemo con alcune indicazioni per utilizzarlo al meglio."
Il Progetto Europeo CIRCLE: incontro fra ICT, Biologia, Medicina e Nano-Tecno...Todi Appy Days
La presentazione dell'intervento "Il Progetto Europeo CIRCLE: incontro fra ICT, Biologia, Medicina e Nano-Tecnologie" di Luca Felicetti a Todi Appy Days 2015
La presentazione di Sandro Cacciamani preparata per Todi Appy Days 2015.
Bestr è la piattaforma digitale basata sugli open badges per valorizzare le competenze di ciascuno di noi.
6. Oltre 10000 app già
disponibili
Fonte: Apple Keynote 9 Settembre 2015
7. App fornite da Apple:
• Possono funzionare senza iPhone
• Hanno accesso ai dati dei sensori
• Possibilità di animazioni avanzate
8. App terze parti:
• Girano interamente su iPhone
• Vengono installate quando la corrispettiva
app viene installata su iPhone
• SDK (Watch Kit) limitato
• Con Watch Kit 2 cambiano le regole del gioco
9. Non è (ancora) possibile
• Utilizzare le app senza un iPhone connesso
• Realizzare app che girano solo su Apple Watch
• Creare animazioni avanzate
• Utilizzare i dati dei sensori biometrici e di movimento
10. • Accedere ai dati dell’app (parente) che gira
su iPhone
• Creare animazioni basate sulle immagini
• Ricevere notifiche e visualizzarle
• Presentare delle viste e creare interfacce
semplici
Ma si può
13. WatchKit Extension
• Gira su iPhone
• Ha il suo ciclo di vita (willActivate, didActivate, etc…)
• Cattura le interazioni dell’utente dall’app installata su Apple Watch
• Aggiorna l’interfaccia del watch da remoto
• Esegue piccoli e brevi task
• Accede ai dati condivisi con la WatchKit App
15. iPhone App
• E’ l’app parente di quella
presente su Apple Watch
• Può processare task
molto lunghi
• Può accedere ai dati
condivisi con Apple
Watch
• Esegue processi che
sono separati da quelli
dell’estensione.
17. WKInterfaceController
• Tutti i controller di WatchKit sono sottoclassi
di WKInterfaceController
• E’ molto simile a UIViewController, ma con
un lifecycle differente.
• Al suo interno possono essere inseriti molti
dei componenti di WatchKit per realizzare
interfacce complesse.
18. WKInterfaceController gestisce gli elementi in una scena.
UIViewController gestisce View e Subview.
Gli oggetti dell’interfaccia non sono View, ma si comportano in
modo simile.
Inizializzazione usando initWithContext:
override init(context: AnyObject?) {
super.init(context: context)
// ...
}
19. // MARK: - WKInterfaceController
override func willActivate() {
// ...
}
override func didDeactivate() {
// ...
}
Solo 2 metodi per il Lyfecycle:
That's it: 2 methods. No loading /
unloading, no will / did appear /
disappear, no animated:YES. Watch
apps are simple by necessity.
Communication between the iOS device
driving the application and the watch is
both time-consuming and battery-
consuming, so all of the setup for the
interface controller's scene is to be
done in the initializer and willActivate.
Both during and after didDeactivate, the
Watch will ignore attempts to update
the state of interface elements.
20. Stack di navigazione
Le applicazioni hanno una navigazione Gerarchica o
Page-Based.
The presentControllerWithName:context: method performs a page-based navigation
equivalent to using the modal segue. The context argument allows you to pass data
to the destination Interface Controller.
//Hierarchical Navigation
@IBAction func btnHierarchical() {
pushControllerWithName(“Page2”,
context: [“segue”: “hierarchical”,
“data”:“Passed through hierarchical navigation”])
}
//Page Based Navigation
@IBAction func btnPagebased() {
presentControllerWithName(“Page2”,
context: [“segue”: “pagebased”,
“data”: “Passed through page-based navigation”])
}
Page2 è l’identificativo del successivo InterfaceController. The
pushControllerWithName:context: method performs a hierarchical navigation
equivalent to using the push segue. The context argument allows you to pass data
to the destination Interface Controller. You navigate to the specific Interface
Controller you want by using its identifier.
25. Configuriamo i pulsanti
@IBAction func btnPagebased() {
presentControllerWithNames(
[“Page2”, “Page3”],
contexts: [
[“segue“: “pagebased”,
“data”: “Passed through page-based navigation”],
[“segue”: “pagebased”,
“data”: “Passed through page-based navigation”]])
}
Stiamo chiamando presentControllerWithNames:contexts: con
i seguenti argomenti:
• Un array di stringhe contenenti gli identificativi degli Interface
Controllers da visualizzare.
• Un array di oggetti da passare all’Interface Controller di
destinazione. Il primo oggetto sarà passato a Page2, il
secondo oggetto a Page3.
28. WKInterfaceObject
E’ come una UIView, con proprietà come alpha, hidden,
allineamento orizzontale e verticale, width, height.
Object Action Method
Button - (IBAction)doButtonAction
Switch - (IBAction)doSwitchMethod:(BOOL)on
Slider - (IBAction)doSliderAction:(float)value
Table
- (IBAction)doTableRowTapAction:
(NSInteger)rowIndex
Menu Item - (IBAction)doMenuItemAction
The most striking difference is the lack
of a frame. Instead of manually
specifying coordinate points or setting
up Auto Layout constraints, WatchKit
interface objects are laid out in a grid
according to their margins and
respective ordering, which is
reminiscent to working with a CSS
framework like Bootstrap (or for you
Rubyists out there, remember Shoes?).
29. Oggetti principali con cui
costruire app complesse
• WKInterfaceButton
• WKInterfaceTable
• WKInterfaceLabel
• WKInterfaceDate & WKInterfaceTimer
• WKInterfaceSlider & WKInterfaceSwitch
WKInterfaceDate is a special kind of
label that displays the current date or
time. WKInterfaceTimer is similar,
except that it displays a countdown
until a specified date.
31. 3 Metodi per comunicare con la main
app e scambiarsi informazioni
• Metodo 1: OpenParentApp
• Metodo 2: Share Data
Cache con NSUserDefaults
e App Groups
• Metodo 3: Update Callbacks
usando il Darwin Notification
Center
32. Metodo 1
openParentApplication:reply:
1) Da chiamare in MKInterfaceController. Passerà un
dictionary contenente delle azioni da richiedere alla
main app.
2) L’azione (es. “getUserCount”) viene ricevuta dalla
main app, che risponderà con un altro Dictionary
contenente delle informazioni, da visualizzare su
Apple Watch.
3) E’ possibile gestire gli errori di comunicazione
(blocco success, blocco failure).
4) Il più grande vantaggio è che l’app su iPhone
risponde anche se non è in esecuzione.
33. Metodo 2
Share Data Cache con NSUserDefaults e App Groups.
1) E’ un metodo già rodato, e funziona in maniera simile
alle estensioni introdotte da Apple in iOS 8.
2) Si utilizza per condividere dati tra elementi eseguiti su
iPhone, appartenenti allo stesso gruppo, che condividono
una sandbox comune.
3) Invece del metodo standardDefaults di NSUserDefault,
si usa initWithSuite: che permette di salvare e leggere i
dati utilizzando NSUserDefaults tra più eseguibili.
4) Non cambia nulla dal classico NSUserDefaults a cui gli
sviluppatori iOS sono abituati.
5) Consigliato solo per i dati meno dinamici. Non c’è
alcun modo per essere avvisati sul cambiamento di un
valore in NSUserDefaults.
34. Metodo 3
Update Callbacks usando il Darwin Notification
Center
1) E’ una API di basso livello scritta in C.
2) Esiste una libreria wrapper che ne semplifica
l’utilizzo: MMWormhole.
3) E’ simile a NSUserDefaults, ma permette di
ricevere aggiornamenti al cambio dei valori.
4) Usa il KVO tramite il quale si possono ricevere
notifiche solo quando stiamo realmente utilizzando
l’app. Mentre lo schermo di Apple Watch è spento,
possiamo decidere di non comunicare con il telefono,
e di sincronizzarsi solo quando se ne ha necessità.
35. Quale usare?
DIPENDE.
Una buona soluzione per la stragrande
maggioranza dei casi è una combinazione dei
metodi 1 & 3.
openParentApplication:reply: per il trigger delle
azioni start/pause/resume (ad esempio per
richiedere i dati da una API).
+
MMWormhole per l’aggiornamento dei dati
persistenti.
36. Cose da non
dimenticare
• Per sviluppare un’app per Apple
Watch è comunque necessario
realizzare la corrispettiva app per iOS.
• Senza iPhone non si va da nessuna
parte.
• Con WatchOS 2 le regole del gioco
cambiano significativamente.
38. Novità in WatchOS 2
• Le app girano nativamente su Apple Watch.
• Le performance delle app sono notevolmente
superiori.
• Le app terze sfruttano le funzioni hardware di Apple
Watch: accesso a Taptic Engine, Digital crown,
Accelerometro, Cardiofrequenzimetro, Altoparlante,
Microfono.
39. App che già sfruttano le
potenzialità di WatchOS 2
Ping usa l’accelerometro per
misurare la velocità del tuo swing
quando giochi a golf.
Insteon usa la Digital Crown per
controllare le luci della casa.
42. Share Data su WatchOS 2
Le app che girano nativamente su WatchOS 2 necessitano di
tenere in sincronizzazione i dati tra l’app per Apple Watch e
quella su iPhone.
Non ci sono container condivisi con App Group.
——
Apple introduce WCSession. Le sessioni sono la radice da cui
partono tutte le comunicazioni da e verso l’app WatchOS.
Ogni sessione gestisce le informazioni ad alto livello: capisce
se il dispositivo in uso ha un Apple Watch abbinato, se
l’applicazione è installata sull’orologio, se l’applicazione si
trova a tutto schermo, ed altro ancora.
43. WCSession
• E’ possibile accedere ad una sessione e inviare dati
attraverso esso da qualsiasi punto dell’app.
• Le informazioni da una sessione vengono ricevute in un
unico posto incaricato.
• La sessione va attivata su entrambe le app (solitamente
nell’AppDelegate, ma può trovarsi ovunque).
• I dati vengono inviati in maniera intelligente (risparmio
batteria) non solo con la UI visibile, ma anche in
background.
• La Watch App non ha bisogno di sapere ogni cosa che
accade su iPhone e viceversa. Al momento opportuno
chiederà: aggiornami su tutti gli aggiornamenti di stato
avvenuti fino ad ora.
• WCSession ha un metodo updateApplicationContext:
che serve a mantenere i dati dell’app sempre aggiornati.
44. WCSession: esempio di invio
e ricezione
1) WCSession invia i dati dalla Watch App
attraverso updateApplicationContext:
2) Il delegato implementato sull’app iPhone,
otterrà in
session:didReceiveApplicationContext: gli
ultimi dati inviati.
3) Se la Watch App imposta un nuovo context
prima che vengano inviati i dati precedenti, la
copia dei dati precedenti viene automaticamente
ignorata a favore dei nuovi dati.
45. WCSession: garantire la
consegna dei dati
E se i dati che dobbiamo inviare devono
essere sempre consegnati?
WCSession offre il metodo
transferUserInfo:
Funziona allo stesso modo di
updateApplicationContext: ma garantisce
che i dati vengano consegnati in ordine
FIFO.
46. WCSession: dati istantanei
sendData:
A volte è necessario inviare i dati ad un dispositivo associato immediatamente,
senza attendere che i dati si sincronizzino.
Il metodo sendData: è molto simile a openParentApplication:reply: di WatchOS
1, e permette a chi riceve di rispondere con un messaggio di conferma.
I dati vengono inviati immediatamente a condizione che:
1) Su Apple Watch l’applicazione sia attiva (anche a schermo spento).
2) iPhone ed Apple Watch siano associati e siano entrambi raggiungibili via
bluetooth.
Come si fa a decidere se usare la messaggistica istantanea o quella per le attività
in background?
WCSession ha una property -> isReachable
47. WKInterfaceMap
• Contenuto non interattivo
• Può essere configurato dinamicamente
• Massimo 5 annotazioni (pin o immagini)
• Un tap apre l’app Mappe di Apple
48. Personalizzazione della UI
Cosa è configurabile:
- Altezza
-Larghezza
- Alpha
- Visibilità
- Dimensione del testo
ANCORA BEN LONTANO DA UIKIT
49. Tips per migliorare le
proprie app
• API Handoff
• Implementare animazioni (basate su
sequenze di immagini su WatchOS 1)
• Caching delle immagini
• Utilizzare WCSession (solo WatchOS 2)
• Non reinventare la ruota: sfruttare a
pieno le potenzialità dei framework di
Apple
50. Impatto di Apple Watch nel
settore retail
Beacon + Internet
Fonte: 20 Ways The Apple Watch can impact the Retail
experience https://medium.com/@jpeddycoart/20-ways-the-
apple-watch-can-impact-the-retail-experience-442095859b11
53. Non finisce qui
1. Pagamenti (Apple Pay)
2. Fitness
3. Salute
4. IOT
5. Comunicazioni e feedback
Fonte: 5 Ideas for the Apple Watch https://medium.com/
backchannel/5-ideas-for-apple-watch-393a7a16f8a1
54. - Usare Apple Watch in maniera
creativa
- Interazione con il mondo esterno,
non limitarsi alla sola visualizzazione
di contenuti
- Estensione di te
Le sfide
61. Conviene investire nello
sviluppo per Apple Watch?
*Stima degli analisti
1) 3 milioni di Apple Watch venduti *
2) WatchOS 2
3) Poca concorrenza sullo store
4) Tante potenzialità nel settore retail
5) Settore Health & Fitness in rapida crescita
6) Opportunità nel settore IOT
7) Un mercato potenzialmente enorme e semi
inesplorato