Die Verteilung von Kommandozeilen-Tools auf macOS stellt Entwickler vor besondere Herausforderungen. Während die Entwicklung und Kompilierung eines CLI-Programms vergleichsweise leicht von der Hand gehen, erfordert die professionelle Verteilung über Installer-Pakete und die Einhaltung von Apples Sicherheitsrichtlinien einen gut geplanten Prozess. Dabei spielen Code-Signing, Notarisierung und kompatible Paketerstellung eine zentrale Rolle, um ein reibungsloses Nutzererlebnis sicherzustellen und Gatekeeper-Meldungen zu vermeiden. Ein wichtiges Fundament für diese Distributionsschritte ist ein aktives Apple Entwicklerkonto, das den Zugang zu notwendigen Zertifikaten und Notarisierungsdiensten ermöglicht. Ohne ein solches Konto kann das korrekte Signieren und Einreichen der Anwendungen bei Apple nicht erfolgen.
Ferner sind spezifische Werkzeuge wie OpenSSL zum Erstellen von privaten Schlüsseln, sowie das Hilfsprogramm „rcodesign“ für Code-Signing-Aufgaben erforderlich. Dabei erfolgt die meiste Arbeit idealerweise auf einem Mac-System, da bestimmte Befehle nur auf macOS ausgeführt werden können, beispielsweise das Erstellen eines Installer-Pakets. Die erste Hürde bei der Distribution ist die Erstellung der passenden Code-Signaturzertifikate. Apple verlangt für die Verteilung sowohl eine Developer ID Application, die den eigentlichen ausführbaren Binärdateien zugeordnet ist, als auch eine Developer ID Installer, die für das Signieren von Installationspaketen notwendig ist. Beide Zertifikate basieren auf einem Zertifikatsantrag, der aus einem eigenen privaten Schlüssel generiert und auf Apples Entwicklerportal hochgeladen wird.
Nach Genehmigung steht ein Zertifikat zum Download bereit, das anschließend ins PEM-Format umgewandelt werden muss, um später vom Signing-Tool verwendet werden zu können. Neben dem Signieren der Binärdateien ist die Apple-Notarisierung ein essenzieller Vorgang, der Gatekeeper dazu befähigt, die Integrität und Sicherheit der Software zu überprüfen. Das Notarisieren erfordert zusätzlich ein App Store Connect API-Schlüsselpaar, welches über die Entwicklerseite unter „Users and Access“ erzeugt und heruntergeladen wird. Dieses private Token erlaubt automatisierte Interaktionen mit Apples Notarisierungsservern. Ein speziell formatiertes JSON-File fasst alle nötigen Informationen zusammen, um die Authentifizierung zu erleichtern.
Nachdem die benötigten Berechtigungs- und Authentifizierungsdaten vorliegen, werden die eigentlichen Binärdateien mit der Developer ID Application signiert. Dieser Schritt ist wichtig, um die „Hardened Runtime“ zu aktivieren, die als Voraussetzung für die Apple-Notarisierung gilt. Anschließend erfolgt die Übermittlung der signierten Dateien an Apple, wo sie auf Schadsoftware geprüft und zertifiziert werden. Dieser Prozess kann mitunter variieren und erfordert manchmal Wiederholungen, insbesondere wenn er in automatisierten Umgebungen wie Continuous Integration-Systemen integriert wird. Für Entwickler, die sowohl Apple Silicon (ARM64) als auch Intel-basierte Macs unterstützen möchten, empfiehlt sich die Erstellung eines universellen Binaries.
Dies bietet Anwendern maximale Kompatibilität, da Mac OS dann selbständig die passende Architektur lädt. Die Erstellung erfolgt durch das Zusammenführen der einzelnen Architektur-spezifischen Binaries mit dem Tool „lipo“. Der daraus entstehende Universal-Binary wird mit den korrekten Berechtigungen versehen und kann anschließend in den Installer eingepflegt werden. Die Paketierung der Software in ein Installer-Paket (.pkg) erlaubt eine einfache Installation für Endnutzer.
Dabei muss die Paketstruktur einem bestimmten Schema folgen, das den Pfad der Installation exakt wiedergibt. So sollte der Binärpfad beispielsweise unter /usr/local/bin/ abgelegt werden, um Standard-Suchpfade in der Shell zu gewährleisten. Zusätzlich wird eine Datei unter /etc/paths.d/ integriert, die den Systempfad um den Installationsordner erweitert, sodass der Befehl problemlos erkannt wird. Im Rahmen der Paketierung wird zuerst ein sogenanntes Komponentepaket erstellt, das die eigentlichen Dateien der Software enthält.
Anschließend kann daraus ein Distribution-Paket erzeugt werden, das weitere Metadaten, Lizenzinformationen sowie optische Elemente wie Icons bereitstellt. Das Design der Installationsoberfläche kann durch eine Bilddatei für den Sidebar-Bereich personalisiert werden. Ebenso lassen sich eine Lizenzdatei und ein HTML-Readme integrieren, die den Nutzer während der Installation informieren. Nach Fertigstellung des Distribution-Pakets muss dieses mit dem Developer ID Installer-Zertifikat signiert werden. Eine abschließende Notarisierung beim Apple-Server ist auch für das Installationspaket obligatorisch, um Sicherheitswarnungen zu vermeiden.
Besonderheit an diesem Schritt ist, dass die Notarisierungsbescheinigung direkt im Paket „gestabled“ wird, sodass keine erneute Prüfung beim späteren Ausführen erforderlich ist. Für Binärdateien hingegen ist eine solche Stapelung noch nicht möglich, weshalb diese separat verwaltet bleiben. Zur Wiederverwendbarkeit und zur sicheren Verwaltung der im Prozess verwendeten Schlüssel und Zertifikate empfiehlt es sich, alle zentralen Dateien – die privaten Schlüssel für die Developer ID Application und Installer sowie die Notarisierungs-API-Schlüssel in JSON – sicher zu speichern. So lässt sich die Distribution zukünftig automatisieren, beispielsweise in einem CI/CD-System, ohne die sensiblen Anmeldedaten immer neu anfertigen zu müssen. Eine angemessene Geheimhaltung der Daten ist dabei unverzichtbar, um Missbrauch zu verhindern.
Insgesamt bietet das Distributionsverfahren für Kommandozeilentools auf macOS eine Reihe von Aufgaben, die Entwickler hinsichtlich Sicherheit, Kompatibilität und Benutzerfreundlichkeit beachten müssen. Der Aufwand zahlt sich jedoch durch eine nicht störende Installation und den Schutz vor Sicherheitsbedrohungen aus. Insbesondere bei proprietären oder kritischen Anwendungen ist die Einhaltung von Apples Signierungs- und Notarisierungsvorgaben unverzichtbar. Mit einer guten Vorbereitung, der Nutzung geeigneter Werkzeuge und der Beachtung der strukturellen Anforderungen kann die Verteilung von CLI-Programmen auf macOS erfolgreich und reibungslos erfolgen. Insbesondere bei Open-Source-Projekten, die als eigenständige Binärdateien und Installationspakete zur Verfügung stehen, steigert dies die Akzeptanz und den Komfort für Endanwender deutlich.
Zusammenfassend gilt: Die Schlüssel zum Erfolg liegen in den richtigen Zertifikaten, sorgfältiger Signierung, gründlicher Notarisierung sowie der korrekten Erstellung von Universal-Binaries und Installer-Paketen. Wer diese Schritte meistert, liefert seinen Nutzern ein hochwertiges und vertrauenswürdiges Tool, das problemlos auf macOS-Systemen eingesetzt werden kann.