Anatomie eines Mac-Programmes

Seit 1984 haben sich ja viele Elemente eines Macintosh-Programmes weiterentwickelt und vor allem unter der Oberfläche läuft seit Mac OS X ein ganz neuer "Motor". 

Aber jenseits vom anderen Aussehen, die Bedienoberläche, die GUI, hat sich nicht so weiterentwickelt.

Der Finder ist immer noch das zentrale Programm um mit Dateien zu arbeiten, es gibt immer noch eine zentrale Menüleiste und gearbeitet wird immer noch in Fenstern. 

Das hat sich eben nicht geändert. Und das ist auch gut so, denn viele Benutzer kennen es und fühlen sich damit wohl. Auch kleine Details wie: Man zieht ein Wechsellaufwerk (externe Festplatte, USB-Stick, CD/DVD, etc.) auf den Papierkorb um es auszuwerfen, sind immer noch seit Lisas Zeiten vorhanden. 

Dabei sind die meisten Programme so ausgelegt, das man kein Handbuch benötigt, um es in Grundlagen zu bedienen. Klar gibt es auch andere Software, die ein wenig mehr Einarbeitung benötigt, beispielsweise Xcode, allerdings sind viele Elemente selbsterklärend. 

Grundsätzlich kennt macOS zwei Arten von Programmen: Solche mit einem einzelnen, zentralen Fenster, und solche mit Dokumentenfenstern. Das heißt für jedes Dokument wird ein eigenes Fenster (oder ein Tab im zentralen Fenster) aufgemacht. 

In der Regel bleibt das Programm gestartet, selbst wenn das letzte Fenster geschlossen wurde. Die meisten Programme sind erst dann beendet, wenn sie über das Menü oder die Tastenkombination <CMD> + <Q> beendet werden. Man kann dieses Verhalten mittels Code ändern. 

Gestartet werden können die Programme mit Doppelklick, über das Launchpad oder das Terminal mit dem Befehl:

open MeineTolleAnwendung

Während die meisten Abstürze in den ersten Versionen von Mac OS X durch fehlerhafte Speicherverwaltung geschahen, ist das Thema Speicher bei Swift, wie auch bei Java und C# kein Thema mehr. Man kann keinen Speicher in diesen Sprachen einfach so anfordern und muss ihn dann frei machen. Erst wenn man seine Programme mit C, C++ und Objective-C mischt, dann muss man darauf achten. 

In Swift sieht das folgendermaßen aus:

Zuerst wird eine Klasse "AppDelegate" erzeugt. Mit @main wird eine generische Main-Funktion aufgerufen, also die Schleife, die sonst ausprogrammiert werden müsste. Diese erzeugt ein Application Objekt, lädt die Interface-Datei (Main) und setzt das Fenster und das Menü auf. Dann wartet sie auf die Eingaben des Benutzers, die am Ende durch den ViewController interpretiert und ausgeführt werden, so lange bis er die Applikation beendet. Dann führt die Application Klasse noch die Funktionen zur Beendigung bzw. Speicherung des Dokumentes durch und das Programm ist beendet. 

Standardmäßig nutzt ein Mac Programm dazu die Bibliothek "Cocoa" und die Klassen aus dem ehemaligen Nextstep. Es kann hierzu auch SwiftUI genutzt werden. Programme, die als Multiplattform geschrieben sind, setzen ausschließlich auf SwiftUI. Pascal mit der FCL sowie C# mit .Net kapseln ebenfalls Cocoa-Klassen. 

Das war es erst einmal mit der Theorie zur Anatomie eines Mac-Programmes. Morgen werden wir das gleiche für ein iOS-Programm machen.