Kapitel 18 Grafische Anwendungen unter MacOS X und auf der Apple Watch

Inhalt

Sie haben im ersten Teil dieses Buches bereits Programme geschrieben, die unter MacOS X als sogenannte Kommandozeilenanwendungen laufen. Davon gibt es in der Tat eine Menge, auch wenn Sie in der Regel nicht direkt mit diesen Anwendungen arbeiten.

Im vorhergegangenen Kapitel 17 haben Sie gesehen, dass es technisch keine großen Hürden bei der Portierung einer iPhone-App auf das iPad gibt und ein wichtiger Aspekt darin besteht, sich andere Konzepte der Benutzerführung zu überlegen. Bei der Portierung grafischer Anwendungen auf MacOS X und auf die Apple Watch ist die Sache ein bisschen anders: Zum einen gibt es deutliche Unterschiede in der Benutzerführung, zum anderen haben beide Plattformen durchaus unterschiedliche Programmierschnittstellen.

Mit Swift können Sie sowohl für MacOS X als auch für die Apple Watch entwickeln  in diesem Kapitel stelle ich vor, wie Sie das anhand der Passwort-App auch bewerkstelligen. Ich konzentriere mich zunächst auf MacOS X und die dort auftretenden Eigenheiten und anschließend auf die Apple Watch.

18.1 Besonderheiten von MacOS X

Auf den ersten Blick haben ein Mobiltelefon oder ein iPad und ein Laptop oder ein Desktop-Rechner, der unter MacOS X arbeitet, recht wenig miteinander gemein. Mobile Apps benutzt man »schnell mal so« zwischendurch, sie haben nur immer eine einzige Anwendung im Vordergrund laufen und sie haben nur einen sehr kleinen Bildschirm für genau eine Aufgabe.

Auf einem »richtigen« Rechner arbeiten Sie in der Regel mit mehreren Programmen gleichzeitig. Diese dürfen mehrere Fenster haben und Sie können ebenfalls mehrere Anwendungen gleichzeitig über den gesamten Bildschirm verteilen.

Aber es gibt noch mehr Unterschiede. Während die grafische Oberfläche für iPhone und iPad namens Cocoa Touch nur eine relativ kleine Anzahl von grafischen Elementen bietet, so hat MacOS X auf der grafischen Oberfläche namens Cocoa derer sehr viel mehr. Unter iOS hatten Sie beispielsweise nur einen einzigen Button-Typ. Unter MacOS X haben Sie ein Dutzend verschiedene Button-Typen für alle Lebenslagen.

Schließlich gibt es große Unterschiede in der Leistung des Prozessors und der Grafikkarte sowie des gesamten Speichers: Im Vergleich zu einem iPhone oder iPad haben heutige Rechner mehrere Gigabyte an Hauptspeicher und einen Prozessor mit vielen Cores und Taktraten von mehreren Gigahertz. Auch wenn die Mobilgeräte immer schneller und besser werden, so ist selbst ein kleinerer Mac mini immer noch wesentlich schneller und leistungsfähiger als ein Mobilgerät.

Trotz dieser Unterschiede gibt es aber auch viele Gemeinsamkeiten. MacOS X und iOS basieren beide auf demselben Betriebssystem namens Darwin. Darauf aufbauend haben MacOS X und iOS unterschiedliche grafische Oberflächen, die jedoch beide in Swift programmiert werden. Viele Teile sind daher auf beiden Systemen in gleicher Form verfügbar. Dadurch lassen sich die meisten Datenmodellklassen ohne Änderungen weiterverwenden. Leider müssen Sie wahrscheinlich in den meisten Fällen ein neues Bedienkonzept entwickeln und können von der Präsentation entsprechend weniger Elemente übernehmen. Das Gleiche gilt analog auch für die Steuerungsklassen.


Tipp
Beim Befolgen des MVC-Konzepts lässt sich das Datenmodell in den meisten Fällen vollständig auf andere Plattformen übertragen. Für die Präsentation gilt dies in der Regel höchstens teilweise. Lediglich die Steuerungsklassen müssen in der Regel völlig neu geschrieben werden.
Ohne das MVC-Konzept zu befolgen, müssten Sie alles komplett neu schreiben.

18.2 Praxisbeispiel: Das Passwort-Programm mit grafischer Oberfläche unter MacOS X

Jetzt geht es wieder an die Arbeit: Sie werden eine MacOS-X-Version der Passwort-App mit grafischer Oberfläche schreiben! In Abschnitt 8.3 hatten Sie die erste Version des Passwort-Generators für MacOS X als Kommandozeilen-Anwendung geschrieben. Diese Version haben Sie dann in Abschnitt 14.2 auf das iPhone und in Abschnitt 17.2 auf das iPad portiert. Nun portieren Sie sie wieder »zurück« auf MacOS X, sodass Sie in wirklich allen Situationen und Lebenslagen Passwörter erzeugen können!

IMG

Abbildung 18.1 Konfiguration des Projekts »PasswortMac« nach der Vorlage »Cocoa Application« in Xcode

Legen Sie wieder ein neues Projekt an, dieses Mal mit der für grafische Anwendungen unter MacOS X geeigneten Vorlage:

1. Wählen Sie als Vorlage aus der Gruppe MACOS X im Abschnitt APPLICATION die Vorlage COCOA APPLICATION aus.
2. Geben Sie als Projektname »PasswortMac« ein und lassen Sie die anderen Einträge auf ihren Voreinstellungen, siehe Abbildung 18.1.
3. Klicken Sie auf CREATE, um das Projekt zu erstellen.

Starten Sie einmal die Anwendung, indem Sie wie gewohnt die Tasten IMG + IMG drücken. Nun öffnet sich eine Anwendung namens »PasswortMac« in MacOS X mit Menüleiste und einem einzelnen grauen und leeren Fenster. Das Menü lässt sich bedienen und es gibt sogar ein ÜBER PASSWORTMAC Fenster. Das Hauptfenster kann auch schon einige Sachen machen  die drei Buttons in der linken oberen Ecke funktionieren korrekt und minimieren, vergrößern oder auch schließen das Fenster. Leider haben Sie nach dem Schließen keine Möglichkeit, es wieder zu öffnen. Diese Funktionalität müssen Sie später selbst schreiben. Sie können die Anwendung mit der Tastenkombination IMG + IMG beenden oder wie gewohnt in Xcode mit IMG + IMG.

Nun werden Sie wieder der Reihe nach das Datenmodell, die Präsentation und die Steuerung des Programms bearbeiten.

18.2.1. Das Datenmodell

Die Klasse PasswortModell, die Sie im Rahmen des iPhone-Projektes in Abschnitt 14.2.1 ab in Listing 14.2 entwickelt haben, war ebenfalls grundlegend für die iPad-App. Diese Klasse können Sie ohne Änderungen ebenfalls in der MacOS X-Anwendung verwenden. Deswegen empfehle ich Ihnen, die komplette Datei PasswortModell.swift in das aktuelle »PasswortMac« zu kopieren.

Damit ist das Datenmodell auch schon fertig!

18.2.2. Die Präsentation

Für die grafische Benutzeroberfläche können Sie in Xcode ebenfalls wieder einen grafischen Editor benutzen. Allerdings funktioniert dieser ein klein wenig anders, als Sie es vom iPad und vom iPhone gewohnt sind. Das liegt darin begründet, dass Sie wesentlich mehr Freiheiten und Flexibilität in der Gestaltung von Fenstern und Menüs haben.

IMG

Abbildung 18.2 Grafische Editor für MacS X im Projekt »PasswortMac«

Um die grafische Oberfläche zu entwerfen, klicken Sie auf die Datei MainMenu.xib, siehe den grafischen Editor in Abbildung 18.2. Die Datei, die die grafische Oberfläche beschreibt, heißt nun nicht mehr Main.storyboard, sondern hat die Endung .xib. Außerdem sehen Sie am linken Rand der mittleren Spalte eine Reihe von Symbolen, obwohl die Elementübersicht zugeklappt ist. Der grafische Editor von MacOS X integriert einerseits die Menüleiste, andererseits aber auch ein oder mehrere Fenster.


Hintergrund
Grafische Oberfläche bearbeiten Der Editor für grafische Oberflächen, den Sie in Xcode verwenden, hat eine lange Tradition.
Einer der Gründer von Apple, Steve Jobs, gründete nach seinem Weggang von Apple eine Firma namens NeXT, deren Rechner mit einem Betriebssystem namens NeXTSTEP liefen und  genauso wie der Macintosh zuvor  die Arbeit mit grafischen Benutzeroberflächen revolutionierten. In NeXTSTEP wurde im Jahre 1988 zum ersten Mal ein solcher grafischer Editor eingebaut. Der Name dieses Editors war damals Interface Builder.
Diesem System war allerdings kein kommerzieller Erfolg beschieden, denn es war für die meisten Anwender viel zu teuer. Allerdings bot das System damals wie kein anderes die Möglichkeit, ohne Programmierkenntnisse schnell und interaktiv eine grafische Oberfläche zu erstellen. Die erste »Killer-Anwendung«, die damit entwickelt wurde, war der erste Browser des World Wide Web (WWW). Die Geschichte zusammen mit einer Abbildung des ersten Webservers können Sie zum Beispiel auf Wikipedia nachlesen unter https://de.wikipedia.org/wiki/World_Wide_Web.
Auch wenn aus NeXTSTEP niemals direkt ein Erfolg wurde, so wurde die Firma im Jahre 1997 von Apple aufgekauft und aus den Grundsteinen von NeXTSTEP wurde MacOS X entwickelt. Insbesondere die Werkzeuge zur Software-Entwicklung wie Objective-C und Interface Builder bildeten die Grundlage von Xcode, so wie Sie es heute kennen. Es kann passieren, dass Sie von einem erfahrenen Entwickler manchmal diesen Begriff hören, wenn er den grafischen Editor von Xcode meint.

Die Dateien mit der Endung .xib beschreiben einzelne Teile der grafischen Oberfläche, zum Beispiel ein einzelnes Fenster. Die Storyboards, die Sie bereits kennengelernt haben, sind in Wahrheit eine Sammlung einzelner .xib-Dateien. Weil die Arbeitsabläufe in MacOS X in der Regel komplizierter und umfangreicher sind als in iOS, gibt es in MacOS X keine Storyboards, sondern nur einzelne .xib-Dateien.

Das unterste Symbol in der linken Leiste bezieht sich auf das (einzige) Fenster der Anwendung. Klicken Sie einmal darauf und das Fenster erscheint im grafischen Editor. Wählen Sie den vierten Reiter in der rechten Spalte. Achten Sie darauf, dass Sie nur auf das Symbol in der linken Leiste, nicht jedoch auf das Fenster selbst klicken. In letzterem Fall würden Sie leider nicht das Fenster selbst, sondern seinen Inhalt editieren.


Tipp
Im Allgemeinen ist es so, dass Sie im grafischen Editor von MacOS X mehr Fehler machen können, weil die Oberfläche komplizierter ist und mehr Möglichkeiten bietet.
Wenn Sie nicht das richtige Element ausgewählt haben, so klicken Sie einmal außerhalb des Fensters und fangen Sie mit der Auswahl nochmals »von vorne an«, bis Sie die gewünschte Stelle erreichen.

IMG

Abbildung 18.3 Bearbeitung des Hauptfensters in der Datei »MainMenu.xib« im grafischen Editor

In der rechten Spalte können Sie nun die Einstellungen des Fensters verändern:

1. Im Label neben TITLE geben Sie den Fenstertitel »Passwortgenerator« ein. Standardmäßig war es der Name des Programms, aber Sie dürfen hier auch etwas anderes verwenden.
2. Deaktivieren Sie die Checkboxen CLOSE und RESIZE, die sich neben dem Eintrag CONTROLS befinden. Dadurch kann das Fenster nicht mehr versehentlich geschlossen werden und hat auch eine feste Größe.
3. Die anderen Einstellungen können Sie so belassen, wie sie sind (siehe Abbildung 18.3).

Nun können Sie wie gewohnt die drei Elemente für das Erzeugen und die Ausgabe eines Passworts hinzufügen:

1. Suchen Sie das »Segmented Control« und ziehen Sie es in das Fenster.
2. Das Segmented Control hat unter MacOS X standardmäßig drei Segmente. Ändern Sie die Zahl auf 2 und geben Sie den Segmenten die Namen »Ziffern« und »Buchstaben«.
3. Suchen Sie das »Label« und ziehen Sie es in das Fenster. Beachten Sie, dass es unter MacOS X mehrere Arten von Labels gibt  ich empfehle Ihnen, an dieser Stelle das »normale« Label zu verwenden, das dem von iOS entspricht.
4. Geben Sie als Beschriftung des Labels »-« ein. Zentrieren Sie den Text und ändern Sie die Schriftgröße auf 24 Punkt.
5. Schließlich nehmen Sie einen »Push Button« und ziehen ihn auf das Fenster unterhalb des Labels. Dies ist der erste Button in der Liste.
6. Geben Sie dem Button den Namen »Erzeugen!«.

Unter iOS wäre jetzt der nächste Schritt, die Elemente auf dem Bildschirm mit Ausrichtungsregeln zu versehen. Dies funktioniert im grafischen Editor von MacOS X genauso wie bei einem Storyboard.

Allerdings haben Sie in diesem Fall  durch das Deaktivieren der Checkbox »Resize« die Möglichkeit unterbunden, die Größe zu ändern. Deswegen ist es hier ausnahmsweise einmal möglich, die Elemente direkt mit Hilfe der Hilfslinien im Fenster zu platzieren. Ich empfehle die folgenden Ausrichtungen:

1. Machen Sie das Fenster 300 Pixel breit und 150 Pixel hoch.
2. Zentrieren Sie das Segmented Control horizontal und halten Sie sich an die blaue Hilfslinie unterhalb des oberen Rands.
3. Zentrieren Sie das Label horizontal und vertikal und setzen Sie die Ränder anhand der blauen Hilfslinien am linken und rechten Rand.
4. Zentrieren Sie den Button horizontal und platzieren Sie ihn anhand der blauen Hilfslinie am unteren Rand.

Als zusätzlichen Schritt empfehle ich Ihnen nun, die »überflüssigen« Menüpunkte zu entfernen:

1. Klicken Sie in der linken Leiste das Symbol oberhalb des Fensters an.
2. Löschen Sie die Menüeinträge »File«, »Edit«, »Format« und »View«.

Dieser Schritt ist nicht zwingend notwendig, aber ich finde, es sieht einfach besser aus, wenn die für diese App nicht brauchbaren Einträge verschwunden sind. Abbildung 18.4 zeigt die fertige grafische Oberflächer der Datei MainMenu.xib.

IMG

Abbildung 18.4 Fertige grafische Oberfläche der Datei »MainMenu.xib« im grafischen Editor

Damit ist die Präsentation der MacOS-X-Variante auch schon fertig!

18.2.3. Die Steuerung

Die Steuerung fällt ähnlich einfach aus wie unter iOS  Sie brauchen Eigenschaften für das Segmented Control und das Label und müssen auf das Drücken des Buttons reagieren können. Diese Eigenschaften und die Aktion integrieren Sie unter MacOS X in der Steuerungsklasse AppDelegate in der Datei AppDelegate.swift.

Unter MacOS X gibt es nicht die Vorgabe, dass Sie genau eine zentrale Steuerungsklasse für jeden einzelnen Bildschirm haben sollten, denn Ihre Programme dürfen durchaus mehrere Fenster gleichzeitig auf dem Bildschirm haben. Grundsätzlich haben Sie mehr Freiheit als unter iOS, wo die Vorgaben dazu, welche Steuerungsklassen Sie mindestens haben sollten, etwas restriktiver waren. Diese Freiheit bedeutet aber gleichzeitig auch mehr Verantwortung, denn Sie müssen jetzt selbst entscheiden, wie Sie Ihre Steuerungsklassen gestalten wollen.

Für die Aufgabe des Passwort-Programms reicht es vollkommen aus, die Steuerung in die vorhandene Klasse AppDelegate zu packen. Um dies zu tun, gehen Sie folgendermaßen vor:

1. Öffnen Sie das Dokument MainMenu.xib und starten Sie den Assistant Editor. Stellen Sie sicher, dass Sie auf der linken Seite das Hauptfenster und auf der rechten Seite die Datei AppDelegate.swift sehen.
2. Erzeugen Sie eine Eigenschaft namens »passwortAuswahl« vom Segmented Control in der Klasse AppDelegate.
3. Für das Label erzeugen Sie eine Eigenschaft mit Namen »passwortLabel«.
4. Zuletzt erzeugen Sie eine Aktion namens »benutzerDruecktErzeugen« vom Push Button.

Damit lässt sich die Steuerung in der Klasse AppDelegate umsetzen, siehe Listing 18.1 . Beachten Sie, dass es einige Unterschiede zwischen MacOS X und iOS gibt:

import Cocoa 
 
/// Hauptsteuerungsklasse der PasswortMac--Anwendung. 
@NSApplicationMain 
class AppDelegate: NSObject, NSApplicationDelegate { 
 
    /// Das Hauptfenster der App. 
    @IBOutlet weak var window: NSWindow! 
 
    /// Datenmodell--Klasse mit dem Passwort--Generator. 
    var passwortGenerator = PasswortModell() 
 
    /// Das Segmented Control für den Passwort--Typ. 
    @IBOutlet weak var passwortAuswahl: NSSegmentedControl! 
 
    /// Label für die Ausgabe des Ergebnisses. 
    @IBOutlet weak var passwortLabel: NSTextField! 
 
    /// Reaktion, wenn der Benutzer den Button klickt. 
    @IBAction func benutzerDruecktErzeugen(sender: AnyObject) { 
        if self.passwortAuswahl.selectedSegment == 0 { 
            // Das Passwort soll nur aus Ziffern bestehen. 
            self.passwortGenerator.auchBuchstaben = false 
        } else { 
            // Das Passwort soll auch Buchstaben enthalten. 
            self.passwortGenerator.auchBuchstaben = true 
        } 
 
        // Erzeuge das neue Passwort. 
        let passwort = self.passwortGenerator.passwort() 
 
        // Schreibe es in das Ausgabelabel. 
        self.passwortLabel.stringValue = passwort 
    } 
}

Listing 18.1 Klasse »AppDelegate« mit Eigenschaften und Aktion

Starten Sie das Programm und vergewissern Sie sich, dass es auch unter MacOS X einwandfrei funktioniert, siehe Abbildung 18.5).

IMG

Abbildung 18.5 Beispieldurchlauf des Passwort-Programms unter MacOS X

Gratulation  damit haben Sie Ihr erstes Programm unter MacOS X mit grafischer Benutzeroberfläche geschrieben! Und das Beste dabei: Sie mussten nur die Elemente der grafischen Oberfläche neu gestalten und die Steuerungsklasse geringfügig anpassen!

18.3 Besonderheiten der Apple Watch

Bei einer MacOS X Anwendung können Sie im Vergleich zu iOS einen gigantischen Bildschirm beanspruchen, auf deutlich mehr Performance zurückgreifen und auch mehrere Fenster gleichzeitig öffnen. Zumindest wenn Sie es wollen. Auf der Apple Watch ist das Gegenteil der Fall: Ihre technischen Möglichkeiten sind deutlich eingeschränkter, Sie haben lediglich einen winzigen Bildschirm und müssen mit sehr begrenzter Rechenkapazität und Speicherplatz auskommen. Auf keinen Fall können Sie davon ausgehen, dass Sie eine funktionierende Internetverbindung haben und wenn Sie Ihre Benutzer mögen (und das sollten Sie!) sollten Sie sie nicht zwingen, lange Texte einzugeben oder zu lesen.

Außerdem muss jeder Träger einer Apple Watch immer ein iPhone haben und Sie müssen immer eine iPhone App zusammen mit Ihrer Apple-Watch-App liefern. Während in der ersten Version des Apple-Watch-Betriebssystems alle Apps, die nicht von Apple stammten, lediglich eine grafische Anzeige für das iPhone boten, so unterstützt die Apple Watch ab Version 2 endlich auch native Apps.

Die grafische Oberfläche für die Apple Watch nennt sich WatchKit und bietet im Vergleich zu iOS eine eingeschränkte Auswahl an Elementen.

18.4 Passwörter auf der Apple Watch

Im Folgenden setzen Sie die PasswortApp für die Apple Watch um. Die iOS-App ist hierbei nur eine minimale Variante, um die assoziierte App auf die Apple Watch zu bringen. Für eine »richtige« App, die Sie Ihren Benutzern verkaufen wollen, sollten Sie sich die Mühe machen und beide Apps richtig zusammenarbeiten lassen.

IMG

Abbildung 18.6 Konfiguration des Projekts für die Apple Watch

Zunächst erzeugen Sie ein Projekt für die Apple Watch:

1. Erstellen Sie ein neues Projekt aus der Vorlage IOS APP WITH WATCHKIT APP in der Gruppe APPLICATION unter WATCHOS.
2. Geben Sie als PRODUCT NAME den Namen »PasswortWatch« ein.
3. Der Einfachheit halber empfehle ich Ihnen, die Haken nicht auszuwählen. Wenn Sie sie doch auswählen, so enthält die Vorlage noch mehr Elemente, beispielsweise für Benachrichtigungen, auf der englischsprachigen Oberfläche Notifications genannt, oder eine Complication (ein kleines Symbol auf dem Ziffernblatt, das Benutzer auswählen können). Diese Complications machen keinen Sinn bei diesem Beispiel. Siehe Abbildung 18.6.

Das Projekt aus der Vorlage ist nun ein bisschen komplizierter, als Sie es bisher kennen. Es gibt insgesamt drei verschiedene Gruppen von Einträgen:

1. PasswortWatch: Die iOS App. In diesem Beispielprojekt möchte ich mich auf die Apple Watch konzentrieren, deswegen lasse ich die App hier so, wie sie ist  was leider nicht mehr als ein leerer Bildschirm ist.
2. PasswortWatch WatchKit App: Die grafische Oberfläche der Apple-Watch-App. Hier werden Sie gleich einige grafische Elemente hinzufügen.
3. PasswortWatch WatchKit Extension: Die Steuerungsklassen der Apple-Watch-App. Hier gibt es wieder die bekannte Steuerungsklasse mit dem View Controller, der allerdings hier einen anderen Namen hat.

Genauso, wie Sie bisher das Prinzip von MVC benutzt haben, um sich Arbeit zu sparen, lässt sich auch hier einiges aus den bestehenden Projekten weiterverwenden.

18.4.1. Das Datenmodell

Erzeugen Sie eine neue Datei namens PasswortModell.swift innerhalb der Gruppe PasswortWatch WatchKit Extension und kopieren Sie aus dem Abschnitt 14.2.1 den Inhalt von Listing 14.2. Und damit ist das Datenmodell auch schon fertig!

18.4.2. Die Präsentation

Bei der Gestaltung der grafischen Oberfläche auf der Apple Watch gibt es eine gute und eine schlechte Nachricht. Die gute ist, dass es keine Ausrichtungsregeln zu beachten gibt, die Ihnen das Leben schwer machen. Die schlechte ist, dass Sie keine Ausrichtungsregeln angeben können, was Ihre Kontrolle über die grafische Oberfläche ein wenig einschränkt.

Für die grafische Oberfläche empfehle ich das folgende Arrangement:

1. Öffnen Sie die Datei Interface.storyboard aus der Gruppe PasswortWatch WatchKit App.
2. Ziehen Sie ein Label auf die grafische Oberfläche. Machen Sie es maximal breit und zentrieren Sie den Text.
3. Ziehen Sie darunter einen Button und nennen Sie ihn »Buchstaben«.
4. Ziehen Sie darunter einen weiteren Button und nennen Sie ihn »Ziffern«.

Diese Oberfläche ist ein bisschen einfacher als die für iOS oder MacOS X. Insbesondere gibt es zwei Buttons, aber keinen Umschalter zwischen beiden Passwort-Varianten. Unter WatchKit gibt es kein Segmented Control, sondern allerhöchstens einen »normalen« Switch. Diesen halte ich aber nicht unbedingt für sinnvoll hier  es wäre einfach recht kompliziert, wenn der Benutzer noch aufwändig rumkonfigurieren müsste. Dies ist ein wichtiger Unterschied auf der Apple Watch  alles sollte sich möglichst schnell, möglichst einfach und mit möglichst wenigen Handgriffen erledigen lassen.


Tipp
Machen Sie die grafische Oberfläche auf der Apple Watch so einfach wie möglich und vermeiden Sie die Notwendigkeit, Einstellungen vorzunehmen, die nicht zwingend erforderlich sind.

18.4.3. Die Steuerung

Für die Steuerung müssen Sie die drei Elemente, die Sie in der Präsentation hinzugefügt haben, mit der Klasse InterfaceController in der Gruppe PasswortWatch WatchKit Extension verbinden:

1. Erzeugen Sie eine Eigenschaft namens passwortLabel vom Label der grafischen Oberfläche. Beachten Sie, dass die Klasse eines Labels auf der Apple Watch WKInterfaceLabel heißt!
2. Erzeugen Sie eine Aktion mit Titel benutzerTippBuchstaben vom oberen Button.
3. Erzeugen Sie eine Aktion benutzerTipptZiffern vom unteren Button.
4. Die Methode willActivate wird aufgerufen, bevor der Bildschirm der App angezeigt wird. Hier füge ich Programmtext ein, der ein neues Passwort erzeugt, damit beim ersten Aufruf bereits etwas angezeigt wird.

Ich halte dies auf der Apple Watch für sinnvoll, denn hier hat der Benutzer noch weniger Lust, auf der grafischen Oberfläche herumzutippen, bevor er etwas zu sehen bekommt.

5. Die Methode didDeactivate wird aufgerufen, nachdem der Bildschirm nicht mehr sichtbar ist. Hier gibt es nichts Sinnvolles für die Passwort-App zu tun, weswegen ich empfehle, diese Methode zu entfernen.
6. Die Methode awakeWithContext wird unmittelbar nach dem Starten der App aufgerufen. Auch hier gibt es nichts Sinnvolles zu tun, weswegen ich empfehle, auch diese Methode zu löschen.

Listing 18.2 zeigt die gesamte Steuerungsklasse InterfaceController für die Apple Watch. Wenn Sie die App starten, wird sowohl ein iPhone-Simulator als auch ein Apple Watch-Simulator gestartet. Mit diesen beiden Simulatoren können Sie das Zusammenspiel der iPhone-App und der Watch App testen  in diesem Fall ist ausschließlich die Apple Watch-Variante interessant. Tippen Sie auf die beiden Buttons und vergewissern Sie sich, dass die App korrekte Passwörter erzeugt  und zwar entweder mit Ziffern oder mit Buchstaben. Abbildung 18.7 zeigt zwei verschiedene Screenshots des Apple-Watch-Simulators.

IMG

Abbildung 18.7 Zwei Passwörter der Passwort-App auf der Apple Watch

import WatchKit 
import Foundation 
 
/// Steuerungsklasse für Passwörter auf der Apple Watch. 
class InterfaceController: WKInterfaceController { 
 
  /// Datenmodell--Klasse mit dem Passwort--Generator. 
  var passwortGenerator = PasswortModell() 
 
  /// Wird vor dem Anzeigen der App aufgerufen. 
  override func willActivate() { 
    // This method is called when watch view controller is about 
    // to be visible to user 
    super.willActivate() 
    neuesPasswort() 
  } 
 
  /// Das Label für die Ausgabe des Passworts. 
  @IBOutlet var passwortLabel: WKInterfaceLabel! 
 
  /// Reaktion auf den Button "Buchstaben". 
  @IBAction func benutzerTippBuchstaben() { 
    self.passwortGenerator.auchBuchstaben = true 
    neuesPasswort() 
  } 
 
  /// Reaktion auf den Button "Ziffern". 
  @IBAction func benutzerTipptZiffern() { 
    self.passwortGenerator.auchBuchstaben = false 
    neuesPasswort() 
  } 
  /// Erzeuge ein neues Passwort und zeige es an. 
  func neuesPasswort() { 
    let passwort = self.passwortGenerator.passwort() 
    self.passwortLabel.setText(passwort) 
  } 
}

Listing 18.2 Klasse »InterfaceController« mit Eigenschaften und Aktionen

18.5 Fortgeschrittenes

Sowohl für MacOS X als auch für die Apple Watch gibt es Richtlinien für grafische Oberflächen. Diese haben beim Erfolg der grafischen Oberflächen eine große Rolle gespielt.

18.5.1. Empfehlungen von Apple für MacOS X und die Apple Watch

Genauso wie ich in Abschnitt 17.4.1 die Human Interface Guidelines für das iPhone und das iPad vorgestellt habe, gibt es auch für MacOS X Richtlinien für die Gestaltung der grafischen Oberfläche. Dieses englischsprachige Dokument finden Sie unter https://developer.apple.com/library/mac/documentation/UserExperience/Conceptual/OSXHIGuidelines/index.html.

Hier beschreibt Apple, wie Sie am besten vorgehen, um grafische Oberflächen unter MacOS X zu gestalten und damit erfolgreiche Programme entwickeln.

Ebenso finden Sie die Richtlinien zur Gestaltung von Apps auf der Apple Watch unter https://developer.apple.com/watch/human-interface-guidelines/.

18.6 Aufgaben

1. Machen Sie in der Präsentation des Passwort-Programms, die Sie in Abschnitt 18.2.2 in Abbildung 18.4 erzeugt haben, den Text des Passwort-Labels etwas größer und fügen Sie darunter ein mehrzeiliges weiteres Label mit einem Erklärungstext ein. Passen Sie die Fenstergröße korrekt an.
2. Fügen Sie in der Präsentation des Passwort-Programms ein weiteres Label zwischen dem Passwort-Label und dem Button ein und passen Sie das Fenster entsprechend an. Modifizieren Sie das Steuerungsobjekt so, dass ein Klicken auf den »Erzeugen!«-Button in den beiden Labels zwei unterschiedliche Passwörter erzeugt.
3. Wäre es möglich, das Label, das das Passwort anzeigt, durch ein Textfeld zu ersetzen, aus dem der Benutzer das Passwort mit Copy & Paste herauskopieren kann? Wenn ja, wie?
4. Portieren Sie eine Variante des Streichholzspiels auf MacOS X, wobei die Streichholzanzeige ausschließlich durch Text erfolgen soll.

Achtung: Diese Aufgabe ist schwierig!

5. Versuchen Sie, ebenfalls die grafische Ausgabe für die Streichhölzer auf MacOS X zu portieren!

Achtung: Diese Aufgabe ist sehr schwierig und erfordert sowohl Experimentieren als auch eigenständige Recherche in der Apple-Dokumentation! Sie können zunächst auf die Animation verzichten.