- macOS-Anwendungen besitzen komplexere Bestandteile als Kommandozeilenprogramme und verwalten Oberflächenressourcen wie Fenster und Menüs in einer separaten Struktur
- In Classic Mac OS wurden ausführbarer Code und Ressourcen im Ressourcen-Fork einer Datei gespeichert, ab Mac OS X erfolgte jedoch der Wechsel zur Bundle-Struktur
- Ein App-Bundle ist um das Verzeichnis Contents herum aufgebaut und besteht aus Unterordnern wie MacOS, Resources und Frameworks sowie zentralen Dateien wie Info.plist
- Später kamen Code Signing, App-Store-Belege und Notarisierung (notarization) hinzu, wodurch sich die Struktur zur Stärkung von Sicherheit und Integrität weiterentwickelte
- Diese in sich geschlossene Struktur (App-Bundle) bildet die zentrale Grundlage dafür, Installation, Updates und Entfernen zu vereinfachen und Sicherheit sowie Wartungseffizienz zu erhöhen
Die App-Struktur von Classic Mac OS
- In frühen Mac-OS-Versionen wurden UI-Ressourcen wie Fenster und Menüs getrennt von der ausführbaren Datei im Ressourcen-Fork (resource fork) gespeichert
- Als Beispiel werden die Ressourcen von QuarkXPress 4.11 in ResEdit angezeigt
- Der ausführbare Code ist in CODE-Ressourcen enthalten; zusätzlich werden Dateityp (type) und Ersteller (creator) gespeichert, damit der Finder die Datei erkennen kann
Die Bundle-Struktur von Mac OS X
- Mac OS X führte die von NeXTSTEP stammende Bundle-Struktur ein
- Eine App ist ein Verzeichnis mit der Endung
.app und enthält darin den Ordner Contents
- Der Ordner MacOS enthält die ausführbare Datei der GUI-App und Kommandozeilenwerkzeuge
- Im Ordner Resources werden Ressourcendateien wie App-Symbole und GUI-Komponenten gespeichert
- Einige Apps enthalten zusätzlich einen Ordner Frameworks und betten dylib-Dateien (dynamische Bibliotheken) ein
- Die Datei Info.plist ist zwingend erforderlich und definiert unter anderem den Namen der ausführbaren Datei, das Symbol, die minimale macOS-Version, Dokumenttypen und Versionsnummern
- Die Datei PkgInfo bewahrt die Typ-/Erstellerinformationen aus Classic Mac OS, ist aber nicht zwingend erforderlich
- Beim Start einer App startet launchd den ausführbaren Code, während LaunchServices und RunningBoard anhand der Informationen aus Info.plist die Initialisierung durchführen
Sicherheit und Erweiterungen unter macOS
- Ab Mac OS X 10.5 Leopard (2007) wurde Code Signing eingeführt, wodurch der Ordner _CodeSignature hinzukam
- Die Datei CodeResources enthält den Code-Directory-Hash (CDHash) zur Prüfung der App-Integrität
- Über den App Store verteilte Apps enthalten im Ordner _MASReceipt den Store-Beleg
- Seit 2018 gibt es Notarisierung (notarization); ein von Apple ausgestelltes Ticket kann per „Stapling“ an das Bundle in der CodeResources-Datei angeheftet werden
- Moderne App-Bundles enthalten Komponenten selbst, die früher in Systemordnern installiert wurden
- Ordner Library: LaunchDaemons, LoginItems usw.
- Ordner XPCServices: separate ausführbare Dienste, die von der App verwendet werden
- Ordner Plugins / Extensions: App-Erweiterungen und App Intents
- In einigen Apps gibt es außerdem eine Datei version.plist
Vorteile von App-Bundles
- Durch die Integration aller Komponenten im Bundle werden Installation, Updates und Entfernen einfacher
- Die Wahrscheinlichkeit fehlender Komponenten sinkt, und durch Signatur- und Notarisierungsschutz wird die Sicherheit erhöht
- App-Store-Apps enthalten zusätzlich Belege und Notarisierungs-Tickets und gewinnen so an Vertrauenswürdigkeit
- Zwischen Intel- und Arm-Architekturen gibt es keinen strukturellen Unterschied; die Mach-O-Datei wird als Universal Binary (fat binary) gespeichert und kann Code für beide Plattformen enthalten
- In derselben Datei befinden sich auch die jeweiligen Signaturen (signatures) für jede Architektur
Visueller Überblick über die App-Struktur
- Im Diagramm markiert hellgelb Komponenten, die zwingend oder in fast allen Apps vorhanden sind
- Grün steht für Elemente, die nur in über den App Store verteilten Apps vorkommen, Blau für optionale Notarisierungs-Tickets
- Zusätzlich können weitere Elemente wie Automator-Workflows oder Skripte enthalten sein
- Insgesamt haben sich macOS-Apps zu einer in sich geschlossenen, sicherheitsorientierten Struktur entwickelt
Noch keine Kommentare.