10 Punkte von GN⁺ 2025-12-09 | Noch keine Kommentare. | Auf WhatsApp teilen
  • 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.

Noch keine Kommentare.