27
TWORZENIE APLIKACJI NA PLATFORM Ę WATCHOS 2 SMARTWATCH W WYDANIU APPLE

Tworzenie aplikacji na platformę watchOS2

Embed Size (px)

Citation preview

T W O R Z E N I E A P L I K A C J I N A P L AT F O R MĘ W AT C H O S 2

S M A R T W A T C H W W Y D A N I U A P P L E

K R Ó T K A A G E N D A

• Dlaczego Swift (w GetResponse)?

• Różnice w projektowaniu aplikacji na watchOS2

• Lifecycle i Komunikacja w aplikacjach na tej platformie

• Implementacja aplikacji GetResponse na watchOS2 oraz napotkane problemy

• Glances & Complications

• Co jest nie tak z tworzeniem aplikacji na Apple Watcha?

D L A C Z E G O S W I F T ?

Mimo tego, że Apple chwaliło się, ze aplikacja WWDC była napisana w Swifcie, tak naprawdę tylko 3 z 13 klas w całej aplikacji było napisane w Swifcie.

Jedyna aplikacja w pełni napisana w Swifcie w systemie iOS to systemowy Kalkulator.

C Z Y M W AT C H R ÓŻN I S IĘ O D I P H O N E ?P R O J E K T O W A N I E A P L I K A C J I

O C Z Y M P O W I N N IŚM Y PA M IĘTAĆ P O D C Z A S P R O J E K T O W A N I A  A P L I K A C J I N A A P P L E W AT C H ?

• Ma być to rozszerzenie najważniejszych funkcji aplikacji, a nie jej lustrzana kopia

• Użytkownik ma korzystać z aplikacji góra kilka(naście) sekund!

• W komunikacji nie powinnismy wysyłać dużych zbiorów danych ze względu na ograniczony tzw. „daily budget” narzucony przez Apple

O R ÓŻN I C A C H W P R O J E K T O W A N I U I N T E R F E J S Ó W

G D Z I E M O J E W I D O K I , C Z Y L I

R ÓŻN I C E M IĘD Z Y P R O J E K T O W A N I E M I N T E R F E J S Ó W

• Największy problem - brak UIView który jest postawą wszystkich widoków w normalnym iOS, ogranicza ilość bibliotek z których można skorzystać

• Brak natywnych animacji - jedynie animacje poklatkowe zlozone z obrazkow

• Nie ma dowolności w tworzeniu interfejsu, wszystkie elementy układamy na tzw. siatce, w następujących po sobie grupach interfejsu (WKInterfaceGroup)

• Ilość elementów interfejsu jest ograniczona do odpowiedników na Apple Watch

• W przypadku Glances i Complications sytuacja jest jeszcze bardziej utrudniona, ale o tym potem

K O M U N I K A C J A I L I F E C Y C L E

B U D O W A A P L I K A C J I

L I F E C Y C L E A P L I K A C J I

L I F E C Y C L E K O N T R O L E R A

L I F E C Y C L E - N A C O U W AŻAĆ

• W przypadku gdy korzystamy z interfejsu typu page-based, podczas uruchamiania interefejsu aplikacja wywoła willActivate i willDeactivate dla każdego kontrolera znajdującego się na liście - by przygotować cache widoków

K O M U N I K A C J A Z E G A R K A I I P H O N E

C A ŁOŚĆ K O M U N I K A C J I M A O D B Y W AĆ S IĘ A S Y N C H R O N I C Z N I E

P R Z E D K O R Z Y S TA N I E M Z N I E K T Ó R Y C H M E T O D K O M U N I K A C J I , Z E G A R E K I T E L E F O N M U S ZĄ D Z I E L IĆ A K T Y W NĄ S E S JĘ B L U E T O O T H

K O M U N I K A C J A - D O S TĘP N E M E T O D Y

updateApplicationContextDo wykonywania update kontekstu aplikacji, niezależnie od stanu aktualnej sesji komunikacji - w przypadku utraty połączenia, wiadomości są kolejkowane. Komunikacja jednokierunkowa.

transferFile

Do asynchronicznego przesyłania plików między telefonem a zegarkiem.

sendMessageDo asynchronicznego przesyłania danych między zegarkiem a telefonem tylko podczas aktywnej sesji Bluetooth, najczęściej wykorzystywana, wiadomości mogą się powtarzać. Komunikacja jest dwukierunkowa - metoda zawiera replyHandler

A P L I K A C J A G E T R E S P O N S E N A W AT C H O S 2

P R Z Y K ŁA D Z ŻY C I A

C O M P L I C AT I O N SN I E S K O M P L I K O W A N E

C Z Y M I J A K W Y G LĄD A JĄC O M P L I C A T I O N S

P L U S Y I M I N U S YC O M P L I C A T I O N S

• Predefiniowane templatki

• Klasy typu Provider do formatowania tekstu w zależności od typu

• Time Travel

• Time Budget

• Czas odpowiedzi z telefonu/API zrywa połączenia

• Nie można określić dokładnego czasu odświeżenia danych

T I M E T R AV E LC O M P L I C A T I O N S

G L A N C E STA K I D UŻY W I D G E T

C Z Y M SĄ ?G L A N C E S

Glances to duże widgety które wyświetlają się po wykonaniu gestu na ekranie głównym zegarka - mają być najszybszym sposobem na dotarcie do najważniejszej informacji z naszej aplikacji

Technicznie to jeden dodatkowy kontroler którego metoda willActivate jest wywoływana za każdym razem gdy użytkownik chce skorzystać z Glance.

P L U S YG L A N C E S

• Łatwość implementacji - jeden controller

• Prostota użycia

• Wysoko oceniany przez użytkowników feature - must have!

M I N U S YG L A N C E S

• Predefiniowane templatki - aby zrealizować mockup graficzny należy znależć odpowiedni layout

• Trudny w testowaniu - potrzebny osobny scheme który nie zawsze chce dobrze działać

N A P O T K A N E P R O B L E M Y P O D C Z A S T W O R Z E N I A A P L I K A C J I

C o c o a P o d s ( i O S d e p e n d e n c y m a n a g e r )Aby korzystać z CocoaPods zarówno w Swifcie jak i Objective-C, w ustawieniach należało dodać dyrektywę use_frameworks! co wprowadza sporo zamieszania w projekcie

Ty p y d a n y c h n a s t y k u ję z y k ó w S w i f t / O b j e c t i v e - CZe względu na różnice językowe, nie mogliśmy skorzystać z modeli używanych w głównym projekcie (brak odpowiednika JsonModel w Swifcie) Przesyłanie danych między telefonem/zegarkiem odbywa się za pomocą przesyłanych słowników (tablic wielowymiarowych)

Niestety i tutaj pojawiał się problem - gdy wysyłaliśmy nieodpowiedni typ danych liczbowych wewnątrz słownika, liczba zero była traktowana jako null po konwersji danych na Swift’a

N A P O T K A N E P R O B L E M Y P O D C Z A S T W O R Z E N I A A P L I K A C J I C . D .

P ro b l e m y z k o m u n i k a c ją

Gdy korzystamy z WatchConnectivity, nie mamy dostępu do informacji dotyczących tzw. „daily budget” - czyli dziennego/godzinnego limitu odświeżania danych oraz ogólnej komunikacji między zegarkiem a telefonem

Częste wysyłanie dużych zbiorów danych powoduje zerwanie sesji między zegarkiem a telefonem i brak reakcji na to zachowanie ze strony aplikacji.

O d s w i e ża n i e C o m p l i c a t i o n s

W y k re s n a G l a n c e s

D E V E L O P M E N T E M A P L I K A C J I N A A P P L E WAT C H ?

C O J E S T N I E TA K Z

C O J E S T N I E TA K Z T W O R Z E N I E M A P L I K A C J I N A WAT C H O S 2 ?• Symulator i jego błędy

• Uruchamianie debugowe na prawdziwym urządzeniu to droga przez mękę

• Debugowanie dwóch urządzeń na raz (aplikacji i zegarka), wymaga podłączenia się do procesu, co nie zawsze działa

• Problemy z komunikacją między symulatorami

• Mało wartościowej dokumentacji od developerów

• Nieudokumentowany time budget oraz ograniczenie wielkości wiadomości

• Jeśli aplikacja była wcześniej pisana w Objective-C, a zegarek pisany jest w Swifcie, to czeka Cię droga przez piekło

P Y TA N I A ?

@ m ko l e k / m ko l e k @ g e t r e s p o n s e . c o m