Přejít k navigační liště

Zdroják » Mobilní vývoj » Vyvíjíme pro Apple Watch: Architektura

Vyvíjíme pro Apple Watch: Architektura

Články Mobilní vývoj

O Apple Watch se mluví tak nějak všude. Lifestylové magazíny je dávají na obálky, nadšenci je již hrdě nosí a skeptici dumají, k čemu taková hračka vůbec je. Zahálet tedy nemohou ani vývojáři. O tom, jak pro Apple Watch vyvíjet, se toho ale zatím mnoho nenapsalo. Naším seriálem to chceme změnit.

V Ackee se primárně věnujeme vývoji mobilních aplikací a všem technologiím okolo. Nemohly nám tedy uniknout ani v poslední době hojně diskutované Apple Watch. Od chvíle, kdy je Tim Cook v září loňského roku představil, sledujeme všechny novinky, zkoumáme a zkoušíme, co všechno zatím hodinky umí a k čemu by se daly využít. O nabyté zkušenosti se s vámi chceme podělit v tomto třídílném seriálu o vývoji aplikací pro Apple Watch.

V tomto úvodním díle se budeme věnovat architektuře samotných aplikací, jejich možnostem a omezením, příště se podíváme, jak vytvořit projekt a jak nastavit simulátor. V poslední části seriálu si zkusíme napsat jednoduchou aplikaci a ukázat si na ní hlavní principy a postupy vývoje.

3 podoby aplikace

Na začátek se podíváme, jak vlastně mohou aplikace pro Apple Watch vypadat. Každá aplikace se totiž na displeji hodinek může objevovat ve třech podobách. Tou hlavní je samotná aplikace, kterou uživatel otevírá z domovské obrazovky. Ta může obsahovat celou hierarchii obrazovek a komplexní uživatelské rozhraní, přes které uživatel interaguje s daty aplikace.

Další podobou je tzv. rozhraní glance, což je jedna informační obrazovka, na které jsou zobrazeny nejdůležitější aktuální informace. Obrazovka je read-only, takže ji nelze scrollovat, neobsahuje žádné ovládací prvky a neumožňuje žádnou interakci. Může na ní být například aktuální teplota nebo v případě našeho App4Festu čas zbývající do dalšího koncertu.

Rozhraní Glance v Apple Watch

Rozhraní Glance v Apple Watch

Poslední podobou je notifikační obrazovka, kterou můžeme jako vývojáři přizpůsobovat pro naše konkrétní potřeby.

Architektura

Aplikace třetích stran v hodinkách nefungují samostatně. Pro svůj běh totiž potřebují iPhone spárovaný přes bluetooth, což úzce souvisí právě s architekturou a principem fungování samotných aplikací. Aplikace pro hodinky se skládá ze dvou, respektive ze tří částí.

První zásadní částí je WatchKit App, která běží na hodinkách, a druhou částí je WatchKit Extension, která běží na iPhonu. Třetí částí je pak „mateřská aplikace“ v iPhonu, protože aplikace v hodinkách je vnímána jako její doplněk a je dodávána jako součást jejího bundlu (rozšíření). Samostatně tedy aplikace pro hodinky nemůže existovat.

Nás pochopitelně zajímá především WatchKit App a WatchKit Extension. Watchkit App, která je fyzicky uložena přímo v hodinkách, obsahuje pouze definici uživatelského rozhraní ve formě storyboardu, nenajdeme v ní tedy žádnou funkční logiku, žádný spustitelný kód. Veškerou logiku obstarává právě WatchKit Extension, která je uložena v iPhonu jako součást „mateřské aplikace“. Všechny uživatelské akce a události jsou pomocí bluetooth spojení delegovány do iPhonu, kde jsou vyhodnocovány a zpracovávány.

Spolupráce WatchKit App a WatchKit Extension

Jak již bylo řečeno, WatchKit App obsahuje pouze storyboard, grafické prvky ve formě obrázků a sadu ikon. Při interakci uživatele s hodinkami WatchKit App vybere scénu ze storyboardu odpovídající dané akci a pomocí WatchKitu v telefonu spustí WatchKit Extension. Ta se postará o konfiguraci scény a až poté je hotová scéna zobrazena na displeji hodinek.

Spolupráce WatchKit App a WatchKit Extension

Spolupráce WatchKit App a WatchKit Extension

Tento proces výměny informací obstarává WatchKit sám a programátor je od něj zcela odstíněn. Při vývoji tedy používáme standardní postupy jako při vývoji běžných iOS aplikací. Objekty ve storyboardu svazujeme s kódem pomocí outletů a akcí a v kódu k nim potom můžeme přistupovat a konfigurovat je. Jediným zásadním rozdílem je nemožnost vytvářet uživatelské rozhraní dynamicky v kódu. Klasické vytvoření UIView v kódu a jeho následné přidání do view hierarchie zde není možné a z hlediska uživatelského rozhraní jsme tedy odkázáni čistě na storyboard.

Možnosti a omezení

V porovnání s vývojem klasických iOS aplikací jsou Apple Watch značně omezené. S největším množstvím omezení se jako vývojáři musíme potýkat v oblasti uživatelského rozhraní.

Storyboardy pro hodinky využívají svoji vlastní sadu UI prvků, která je sice analogií běžných prvků z UIKitu, ale obsahuje jich mnohem méně a nabízí o mnoho méně možností. Všechny tyto prvky jsou potomky třídy WKInterfaceObject a není možné je inicializovat ručně, jsou vytvářeny ze storyboardu a my k nim můžeme přistupovat pouze pomocí outletů a navazovat na ně akce.

Celé UI tedy musí být definováno předem, jediné možné úpravy UI v runtime jsou změny hodnot (např. text labelu apod.), změna velikosti objektu, skrytí/odkrytí objektu a nastavení průhlednosti. Zatímco na iOS jsme odpovědní za veškerý layout a díky přístupu k frame nebo autolayoutu můžeme UI do detailu upravovat, na hodinkách pouze vkládáme objekty do scény a Xcode je automaticky skládá jako bloky vertikálně pod sebe.

Příklad layoutu pomocí grup

Příklad layoutu pomocí grup

Zásadní prvek, kterým můžeme layout ovlivňovat, je WKInterfaceGroup, což je kontejner obsahující více objektů. Objekty v tomto kontejneru mohou být uspořádány jak vertikálně, tak horizontálně a mohou být i vkládány do sebe navzájem.

Na první pohled se tedy zdá, že je UI až příliš striktně omezené, ale po chvilce hraní si v Interface Builderu a s trochou kreativity lze vytvořit téměř cokoliv. Cesta sice není tak přímá a jasná jako na iOS, ale schopný vývojář si dokáže poradit.

V příštím díle

Dnes jsme si prošli nezbytnou teorii, ale už příště se vrhneme do praxe. Ukážeme si, jak vytvořit projekt, jak nastavit simulátor a další základní nástroje pro vývoj aplikace pro Apple Watch. Všechny nové znalosti pak využijeme v posledním díle, ve kterém si společně naprogramujeme jednoduchou hodinkovou aplikaci.

Ackee

Ackee je inovativní vývojářské studio se sídlem v pražských Dejvicích. Zabýváme se vývojem mobilních aplikací, webů a vlastních produktů, jako je například aplikace pro festivaly App4Fest.

Komentáře

Subscribe
Upozornit na
guest
2 Komentářů
Nejstarší
Nejnovější Most Voted
Inline Feedbacks
View all comments
PH

UI je sice pevně dané storyboardem, ale do WKInterfaceTable se dá nacpat cokoliv včetně buněk s dynamickou velikostí, takže programaticky se dá implementovat prakticky cokoliv. Ale předpokládám, že něco takového se v některém z příštích dílů objeví.
(Doufám, že se autor bude věnovat také WatchOS 2.)

Josef Gattermayer

Ano, WatchOS 2 bude :).

Enum a statická analýza kódu

Mám jednu univerzální radu pro začínající programátorty. V učení sice neexistují rychlé zkratky, ovšem tuhle radu můžete snadno začít používat a zrychlit tak tempo učení. Tou tajemnou ingrediencí je statická analýza kódu. Ukážeme si to na příkladu enum.