Blogserie iOS-Entwicklung - Apps für die Apple WatchDie Apple Watch ist in aller Munde und erfreut sich bereits bei vielen tausenden Kunden großer Beliebtheit. Doch auch wir Entwickler haben Grund, uns über den Start der Apple Watch zu freuen: nun endlich können wir die Apps, die wir bereits seit November 2014 programmiert und ausschließlich in einem Apple Watch-Simulator testen konnten, auch auf „richtigen“ Geräten bestaunen. Darüber hinaus stellt die Apple Watch eine gänzlich neue Plattform dar, welche völlig andere Anforderungen an eine App stellt. Während iPhones immer größer werden und iPads sowieso sehr viel Bildschirmplatz bieten, auf dem sich viele Bedienelemente und Ansichten unterbringen lassen, so ist man auf einer Apple Watch deutlich eingeschränkter; mehr als vier verschiedene Auswahlpunkte kann man einem Nutzer auf dem kleinen Touch-Display kaum zumuten, wenn er eine App auf der Apple Watch vernünftig bedienen soll.

Wenn Sie bisher selbst noch keine Erfahrung in der Entwicklung für die Apple Watch gemacht und womöglich seit dem Release Blut geleckt haben, so möchte ich Ihnen mit diesem Beitrag eine Einführung in die Entwicklung von Apple Watch-Apps und die essenziellen Grundlagen mit auf den Weg geben.

Aufbau einer App

Zunächst einmal das Wichtigste vorab: Apple Watch-Apps sind in diesem Sinn keine komplett „eigenständigen“ Apps, sondern setzen immer eine iPhone-App voraus. Das hängt damit zusammen, dass auf der Apple Watch lediglich die notwendigen Dateien für das User Interface installiert werden, während die gesamte Logik der App auf dem mit der Uhr gekoppelten iPhone ausgeführt wird. Die Apple Watch selbst hält also in diesem Sinne nur ein „dummes“ Produkt vor, während alle Operationen das iPhone durchführt.

Damit dieses Zusammenspiel technisch funktioniert, wird eine sogenannte WatchKit Extension verwendet. Diese Extension läuft – wie alle anderen Extensions auch – direkt auf dem iOS-Gerät (in diesem Fall also einem iPhone) und enthält die gesamte Logik in Form von Klassen und Code.

Daneben gibt es noch die WatchKit App. Dabei handelt es sich technisch gesehen um ein Target (so wie eine iOS-App auch), welches auf der Apple Watch installiert wird. Die WatchKit App landet also auf der Smartwatch, während sich die zugehörige WatchKit Extension der App auf dem gekoppelten iPhone um die Code-Ausführung kümmert. Doch was bringt denn dann eine WatchKit App überhaupt mit?

Die WatchKit App enthält ein Storyboard, in dem alle Ansichten und Controller angelegt werden, die innerhalb der Apple Watch-App verwendet und aufgerufen werden sollen, daneben kann die WatchKit App auch Material wie Grafiken und Bilder enthalten, die in der App genutzt werden sollen. Das war’s dann aber auch schon.

Eine neue WatchKit App mitsamt zugehöriger WatchKit Extension kann einem bestehenden iOS-Projekt hinzugefügt werden. Erstellen Sie dazu ein neues Target und wählen Sie links im Menü den Punkt Apple Watch aus. In der Übersicht rechts wird Ihnen dann die passende Vorlage WatchKit App angeboten, die Sie durch die Erstellung und Einrichtung der entsprechenden Erweiterung führt.

Controller und Interfaces des WatchKit SDK

Während wir es in der iOS-Entwicklung mit View-Controllern und Views zu tun haben, so spricht man in der Entwicklung für Watch OS – dem Betriebssystem der Apple Watch – von Interface-Controllern und Interfaces (die aber tatsächlich als direktes Äquivalent gesehen werden können). Eine tragende Rolle spielt dabei die Klasse WKInterfaceController, die als Superklasse für alle eigenen Interface-Controller fungiert (und damit vergleichbar mit UIViewController aus dem UIKit Framework ist). Andere vorgefertigte Interface-Controller-Klassen, wie es sie in der iOS-Entwicklung gibt, fanden (bisher) keinen Weg in das WatchKit SDK.

Neben dieser neuen Controller-Klasse stehen verschiedene vorgefertigte Interfaces zur Verfügung, die allesamt von der Klasse WKInterfaceObject erben (und die dadurch wiederum vergleichbar sind mit UIView). Zu den Subklassen von WKInterfaceObject gehören alte Bekannte und übliche Verdächtige wie WKInterfaceButton (für Schaltflächen), WKInterfaceLabel (zur Darstellung von Texten), WKInterfaceSwitch (zur Umsetzung von Schaltern) und viele mehr. Es fanden aber auch gänzlich neue Interface-Elemente ihren Weg in das SDK, beispielsweise WKInterfaceSeparator zur Darstellung einer einfachen Trennlinie.

Erstellen eigener Interfaces

Das in der WatchKit App enthaltene Storyboard ist essenziell für die gesamte Entwicklung einer WatchKit App. Im Gegensatz zur iOS-Entwicklung gibt es keine Möglichkeit, eigene Interfaces im Code zu erstellen und anschließend programmatisch hinzuzufügen; jeder benötigte Interface-Controller und jedes benötigte Interface-Element müssen zwingend innerhalb des Interface-Storyboards angelegt werden. Die Controller und Interfaces werden dann mit dem entsprechenden Code innerhalb der WatchKit Extension verknüpft, um so auf diese Elemente zuzugreifen und mit passender Logik zu versehen. Das geschieht auf die bereits aus der iOS-Entwicklung gewohnte Art und Weise; die eigenen WKInterfaceController-Subklassen werden den Interface-Controllern im Storyboard zugewiesen, um beide Objekte dadurch miteinander zu verknüpfen. Anschließend können Outlets und Actions von den verschiedenen Interface-Elementen eines Interface-Controllers mit dem Code der zugeordneten Klasse verbunden werden.

Bei diesem Vorgehen wird auch deutlich, wie die Oberfläche des Storyboards von der Logik im Code entkoppelt ist. Während Ersteres in Form eines Storyboards Teil der WatchKit App ist, existieren alle Klassen innerhalb der WatchKit Extensions. Dennoch ist es problemlos möglich, die eben erläuterten Verbindungen zwischen diesen beiden Teilen herzustellen; letztlich ist das ja Sinn und Zweck der Sache.

Lebenszyklus einer App

Startet man eine App auf der Apple Watch, so wird der initiale Interface-Controller aus dem Storyboard der WatchKit App geladen und angezeigt; das Storyboard der WatchKit App stellt also immer den Einstiegspunkt einer jeden Apple Watch-App dar. Dabei werden nacheinander drei verschiedene Methoden der zugeordneten WKInterfaceController-Subklasse des initialen Interface-Controllers aufgerufen:

  • init ist die bereits aus der iOS-Entwicklung bekannte Methode zur Initialisierung eines neuen Objekts. Wann immer eine Instanz eines WKInterfaceController erstellt und geladen wird, wird init aufgerufen. Überschreiben wir diese Methode in unseren WKInterfaceController-Subklassen, können wir sie dazu nutzen, erste Konfigurationen (beispielsweise das Setzen von Standardwerten für Properties) durchzuführen.
  • Der Aufruf der Methode awakeWithContext: erfolgt nach der von init. Dabei handelt es sich um eine exklusive Besonderheit bei der Entwicklung mit dem WatchKit SDK. Diese Methode übergibt ein optionales context-Objekt, dessen Typ beliebig ist. Rufen wir selbst neue Interface-Controller auf, können wir diesen ein entsprechendes context-Objekt übergeben, welches diese dann in dieser Methode awakeWithContext: erhalten und weiterverwenden können. Dieses Verfahren nutzt man typischerweise dazu, ein Objekt an einen aufzurufenden Interface-Controller weiterzugeben. Ob man diese Methode in eigenen Interface-Controllern implementiert, hängt davon ab, ob man von dieser Technik Gebrauch macht.
  • Zu guter Letzt folgt der Aufruf der Methode willActivate. Diese wird kurz vor Erscheinen des Interfaces aufgerufen und erlaubt somit letzte Änderungen und Anpassungen an dem UI; Labels kann ein passender Text zugewiesen und einzelne Elemente können ein- beziehungsweise ausgeblendet werden. Sie ist vergleichbar mit der Methode viewWillAppear: von UIViewController.

Diese Methoden werden bei jedem Aufruf eines Interface-Controllers entsprechend durchlaufen. Wird ein Interface-Controller ausgeblendet oder die App verlassen, so wird die Methode didDeactivate aufgerufen, die dazu dient, eventuell notwendige „Aufräumarbeiten“ durchzuführen (beispielsweise laufende Animationen oder Timer anzuhalten beziehungsweise zu beenden).

Bild 1 und Bild 2 stellen diesen typischen Lebenszyklus einer Apple Watch-App grafisch dar.

Lebenszyklus einer WatchKit-App 1

Bild 1: Beim Start einer Apple Watch-App werden sowohl die WatchKit App als auch die WatchKit Extension gleichermaßen mit verschiedenen Funktionen ausgeführt.

Lebenszyklus einer WatchKit-App 2

Bild 2: Auch während der Nutzung einer Apple Watch-App spielen WatchKit App sowie WatchKit Extension ständig zusammen.

 

Möglichkeiten und Einschränkungen

Die Entwicklung von Apps für die Apple Watch ist aktuell noch deutlich eingeschränkter als die von Apps für iOS. So ist es laut Dokumentation beispielsweise untersagt, eigene Subklassen von Interface-Elementen wie Schaltflächen oder Labels zu erstellen; es sollen ausschließlich die vorhandenen Klassen genutzt und mittels Outlets und Actions den eigenen Wünschen entsprechend konfiguriert werden. Auch sind die Methoden und Funktionen der Elemente selbst deutlich überschaubarer; einer Schaltfläche beispielsweise lässt sich ausschließlich über den Code ein Titel zuweisen oder die Farbe ändern, mehr ist einfach nicht drin.

Für uns Entwickler ist es dementsprechend schwieriger, sich mit den eigenen Apple Watch-Apps designtechnisch von der Konkurrenz abzuheben; dafür sind die Möglichkeiten der Plattform zur jetzigen Zeit einfach viel zu eingeschränkt. Umgekehrt hat diese Tatsache den Vorteil, diese neue Plattform nicht zu überladen und womöglich eine nur schlecht bis gar nicht bedienbare App zu produzieren, nur weil man alle Freiheiten ausnutzen und sich so weit wie nur möglich von anderen Apps abheben möchte.

Es dürfte Apple vor allen Dingen darum gehen, die Nutzer an die Bedienung, die Funktionsweise und das Design der Apple Watch als ganzheitliche Plattform zu gewöhnen; UI und UX-Experimente sind da fehl am Platz. Und natürlich sorgt diese „aufgezwungene“ Einfachheit der Plattform auch dafür, dass Entwickler sich schneller und einfacher in die Entwicklung mit dem WatchKit SDK einarbeiten können und schnell erste Erfolge erzielen. Komplexe Apps im Sinne von aufwendigen Designs und Abläufen sind aber schlicht unmöglich. Ob die Apple Watch dafür aber auch überhaupt die richtige Plattform ist, ist die andere Frage.

 

Die Frage nach der Zukunft

Spannend bleibt abzuwarten, wie sich die Apple Watch in den nächsten Monaten und Jahren weiterentwickeln wird. Welche Soft- und Hardware-Updates wird es geben, welche Funktionen werden in Zukunft für Entwickler freigeschaltet, wie entwickelt sich das WatchKit SDK weiter? Es bleibt in jedem Fall spannend um Apples Computeruhr und die Möglichkeiten, die sie Entwicklern und Nutzern gleichermaßen bietet.

In jedem Fall liegt es an uns Entwicklern, diese neue Plattform optimal zu nutzen und in unseren Apps das Beste (und auch Sinnvollste) aus ihr herauszuholen. Gerade bei der Apple Watch sollte das Sprichwort „weniger ist mehr“ durchaus Beachtung finden, denn überladene Apps mit Funktionen, die man eigentlich gar nicht auf so einer Computeruhr durchführen will, sollten im Zweifelsfall lieber weggelassen werden. Apple Watch-Apps zeichnet aus, dass sie extrem schnell und einfach genutzt werden können, in aller Regel gar nicht länger als wenige Sekunden. Denken Sie daran, wenn Sie Ihre eigenen Apps für die Apple Watch planen und umsetzen.