Archiviert: Ich nutze dieses Projekt leider nicht mehr aktiv und habe es seit Anfang 2022 nicht ordnungsgemäß gepflegt. Ich begrüße jemanden, der aufgab und dieses Projekt übernehme.
Gon ist ein einfaches Tool ohne Frühling, um Ihre Cli-Binärdateien für macOS zu unterschreiben und zu notariieren. Gon ist als CLI erhältlich, der manuell oder in Automatisierungsleitungen ausgeführt werden kann. Es ist auch als GO -Bibliothek erhältlich, um in GO geschriebene Projekte einzubetten. Gon kann Binärdateien unterschreiben und notariell in jeder Sprache geschrieben werden.
Beginnend mit MacOS Catalina (10.15) muss Apple alle Software, die außerhalb des Mac App Store verteilt ist, unterzeichnet und notariell verteilt werden. Software, die nicht ordnungsgemäß signiert oder notariell ist, wird eine Fehlermeldung angezeigt, wobei die einzig umsetzbare Option darin besteht, "zu Bin zu wechseln". Die Software kann nicht aus der Befehlszeile ausgeführt werden. Die Problemumgehungen sind für Benutzer schmerzhaft. Gon hilft Ihnen bei der Automatisierung des Notarisierungsvorgangs.
Sehen Sie die Roadmap für Funktionen, die wir unterstützen möchten, aber noch nicht.
Das folgende Beispiel führt gon gegen sich selbst aus, um einen Reißverschluss und DMG zu erzeugen.

Der einfachste Weg, gon zu installieren, ist über Homebrew:
$ brew install mitchellh/gon/gon
Sie können auch die entsprechende Version für Ihre Plattform von der Seite "Releases" herunterladen. Diese sind alle signiert und notariell, um auf MacOS 10.15+ aus der Box zu laufen.
Sie können auch von der Quelle mit GO 1.13 oder später mit Standard go build kompilieren. Bitte stellen Sie sicher, dass GO -Module aktiviert sind.
gon benötigt eine Konfigurationsdatei, die als Dateipfad angegeben oder über stdin übergeben werden kann. Die Konfiguration gibt alle Einstellungen an, gon zum Signieren und Verpacken Ihrer Dateien verwendet.
Gon muss auf einer MacOS -Maschine mit Xcode 11.0 oder höher ausgeführt werden. Code -Unterzeichnung, Notarisierung und Verpackung erfordern Tools, die nur auf MacOS -Maschinen verfügbar sind.
$ gon [flags] [CONFIG]
Bei der Ausführung wird gon konfigurierte Dateien in angeforderten Formaten unterschreiben, ein Paket und notariell beglaubigt. gon wird mit einem 0 -Exit -Code zum Erfolg und einem anderen Wert für den Fehler beenden.
Vor der Verwendung von gon müssen Sie ein Entwickler -ID -Zertifikat erwerben. Dazu können Sie dies entweder über das Web oder über Xcode lokal auf einem Mac tun. Die Verwendung von Xcode ist einfacher, wenn Sie es bereits installiert haben.
Über das Web:
Melden Sie sich mit gültigen Apple -ID -Anmeldeinformationen bei Entwickler.apple.com an. Möglicherweise müssen Sie sich für ein Apple Developer -Konto anmelden.
Navigieren Sie zur Seite der Zertifikate.
Klicken Sie auf das Symbol "+", wählen Sie "Entwickler -ID -Anwendung" und befolgen Sie die Schritte.
Doppelklicken Sie nach dem Herunterladen des Zertifikats, um es in Ihren Schlüsselbund zu importieren. Wenn Sie auf einer CI -Maschine bauen, muss jeder CI -Computer dieses Zertifikat in ihrem Schlüsselbund haben.
Über Xcode:
Öffnen Sie Xcode und gehen Sie zu Xcode => Einstellungen => Konten
Klicken Sie unten links auf "+" und fügen Sie Ihre Apple -ID hinzu, wenn Sie es noch nicht getan haben.
Wählen Sie Ihr Apple -Konto aus und klicken Sie in der unteren rechten Ecke auf "Zertifikate verwalten".
Klicken Sie in der unteren linken Ecke auf "+" und klicken Sie auf "Entwickler -ID -Anwendung".
Klicken Sie mit der rechten Maustaste auf das neu erstellte Zertifikat in der Liste, klicken Sie auf "Exportieren" und exportieren Sie die Datei als P12-formatiertes Zertifikat. Speichern Sie das irgendwo . Sie werden es nie wieder herunterladen können.
Um zu überprüfen, ob Sie dies richtig gemacht haben, können Sie Ihren Schlüsselbund untersuchen:
$ security find-identity -v
1) 97E4A93EAA8BAC7A8FD2383BFA459D2898100E56 " Developer ID Application: Mitchell Hashimoto (GK79KXBF4F) "
1 valid identities foundSie sollten ein oder mehrere Zertifikate sehen, und mindestens eines sollte Ihr Entwickler -ID -Anwendungszertifikat sein. Das Hexadecimal String Prefix ist der Wert, den Sie in Ihrer Konfigurationsdatei verwenden können, um die Identität anzugeben.
Die Konfigurationsdatei kann Listen von Lizenzen für Berichte, Lizenzüberschreibungen für bestimmte Abhängigkeiten und mehr angeben/verweigern. Das Konfigurationsdateiformat ist HCL oder JSON.
Beispiel:
source = [ " ./terraform " ]
bundle_id = " com.mitchellh.example.terraform "
apple_id {
username = " [email protected] "
password = " @env:AC_PASSWORD "
provider = " UL304B4VGY "
}
sign {
application_identity = " Developer ID Application: Mitchell Hashimoto "
}
dmg {
output_path = " terraform.dmg "
volume_name = " Terraform "
}
zip {
output_path = " terraform.zip "
}{
"source" : [ " ./terraform " ],
"bundle_id" : " com.mitchellh.example.terraform " ,
"apple_id" : {
"username" : " [email protected] " ,
"password" : " @env:AC_PASSWORD " ,
"provider" : " UL304B4VGY "
},
"sign" :{
"application_identity" : " Developer ID Application: Mitchell Hashimoto "
},
"dmg" :{
"output_path" : " terraform.dmg " ,
"volume_name" : " Terraform "
},
"zip" :{
"output_path" : " terraform.zip "
}
}Unterstützte Konfigurationen:
source ( array<string> ) - Eine Liste von Dateien zum Signieren, Paket und Notarize. Wenn Sie mehrere Dateien mit unterschiedlichen Identitäten oder in verschiedenen Paketen unterschreiben möchten, sollten Sie gon mit separaten Konfigurationen aufrufen. Dies ist optional, wenn Sie den Only-Modus nur mit dem notarize Block verwenden.
bundle_id ( string ) - Die Bundle -ID für Ihre Anwendung. Sie sollten etwas Einzigartiges für Ihre Anwendung auswählen. Sie können diese auch bei Apple registrieren. Dies ist optional, wenn Sie den Only-Modus nur mit dem notarize Block verwenden.
apple_id - Einstellungen im Zusammenhang mit der Apple -ID für Notarisierung.
username ( string ) - Der Apple -ID -Benutzername, in der Regel eine E -Mail -Adresse. Dies wird standardmäßig bei der Umgebungsvariablen AC_USERNAME standardmäßig festgelegt, wenn nicht festgelegt wird.
password ( string ) - Das Kennwort für die zugehörige Apple -ID. Dies kann direkt oder mit @keychain:<name> oder @env:<name> angegeben werden, um zu vermeiden, dass das Klartextkennwort direkt in eine Konfigurationsdatei eingerichtet wird. Die @keychain:<name> -Syntax lädt das Kennwort mit dem angegebenen Namen aus dem MacOS -Schlüsselbund. Die Syntax @env:<name> lädt das Kennwort aus der benannten Umgebungsvariablen. Wenn dieser Wert nicht festgelegt ist, versuchen wir, die Variable AC_PASSWORD -Umgebungsvariable als Standard zu verwenden.
Hinweis : Wenn Sie 2FA aktiviert haben, muss das Passwort ein Anwendungskennwort und nicht Ihr normales Apple -ID -Passwort sein. Weitere Informationen finden Sie unter Fehlerbehebung.
provider ( string ) - Der App Store Connect -Anbieter bei Verwendung mehrerer Teams in App Store Connect. Wenn dies nicht festgelegt ist, werden wir versuchen, die AC_PROVIDER -Umgebungsvariable als Standard zu lesen.
sign - Einstellungen im Zusammenhang mit Signaturdateien.
application_identity ( string ) - Der Name oder die ID des Zertifikats "Entwickler -ID -Anwendung" zum Signieren von Anwendungen. Dies akzeptiert einen gültigen Wert für das Flag -s -Flag für das codesign -Binär auf macOS. Eine detaillierte Dokumentation zu akzeptierten Werten finden Sie man codesign .
entitlements_file ( string Optional ) -Der vollständige Pfad zu einem Plist -Format. Innititlements -Datei, die für das Argument für codesign --entitlements wird -enthält das Argument: -
dmg ( optional ) - Einstellungen zum Erstellen eines Festplattenbildes (DMG) als Ausgabe. Dies wird nur dann erstellt, wenn dies angegeben ist. Die DMG hat auch das Notarization -Ticket so hoch, dass es offline verifiziert werden kann und kein Internet benötigt.
output_path ( string ) - Der Pfad zum Erstellen des ZIP -Archivs. Wenn dieser Weg bereits existiert, wird er überschrieben. Alle Dateien in source werden in das Root des ZIP -Archivs kopiert.
volume_name ( string ) - Der Name des montierten DMG, der im Finder, dem montierten Dateipfad usw. angezeigt wird, usw.
zip ( optional ) - Einstellungen zum Erstellen eines ZIP -Archivs als Ausgabe. Ein ZIP -Archiv wird nur dann erstellt, wenn dies angegeben ist. Beachten Sie, dass ZIP -Archive das Stapeln nicht unterstützen, was bedeutet, dass Dateien innerhalb des notariellem Zip -Archiv eine Internetverbindung erfordern, um die erste Verwendung zu überprüfen.
output_path ( string ) - Der Pfad zum Erstellen des ZIP -Archivs. Wenn dieser Weg bereits existiert, wird er überschrieben. Alle Dateien in source werden in das Root des ZIP -Archivs kopiert.NOTARISION-NOTARISION-Modus:
notarize ( optional ) - Einstellungen zum Notarisierungsbetrag bereits erstellten Dateien. Dies ist eine Alternative zur Verwendung der source . Diese Option kann wiederholt werden, um mehrere Dateien zu beglaubigen.
path ( string ) - Der Pfad zur Datei zu notarialisieren. Dies muss einer der unterstützten Dateitypen von Apple für die Notarisierung sein: DMG, PKG, App oder Reißverschluss.
bundle_id ( string ) - Die Bündel -ID für diese Notarisierung. Dies wird anstelle des obersten bundle_id verwendet (was den Wert für Quellenbasis steuert).
staple ( bool optional ) - Steuerelemente, wenn stapler staple ausführen sollte, wenn die Notarisierung erfolgreich ist. Dies sollte nur für Filetypen festgelegt werden, die es unterstützen (DMG, PKG oder App).
Sie können gon so konfigurieren, dass bereits unterzeichnete Dateien beglaubigt werden. Dies ist nützlich, wenn Sie gon in eine vorhandene Build -Pipeline integrieren, die möglicherweise bereits die Erstellung von PKG, App usw. Dateien unterstützt.
Da die Notarialisierung die Nutzlast von Paketen ebenfalls unterzeichnet hat, wird in diesem Modus vorausgesetzt, dass Sie die Nutzlast sowie das Paket selbst codessigniert haben. gon wird Ihr Paket nicht in den notarize -Blöcken unterschreiben. Bitte verwechseln Sie dies nicht mit dem festgelegten source und gon selbst erstellt Ihre Pakete. In diesem Fall wird sie auch unterschrieben.
Sie können dies zusätzlich zur Angabe source verwenden. In diesem Fall werden wir die in source angegebenen Dateien codessign und verpacken und diese Ergebnisse sowie diejenigen in notarize -Blöcken anschließend notarisieren.
Beispiel in HCL und dann die identische Konfiguration in JSON:
notarize {
path = " /path/to/terraform.pkg "
bundle_id = " com.mitchellh.example.terraform "
staple = true
}
apple_id {
username = " [email protected] "
password = " @env:AC_PASSWORD "
}{
"notarize" : [{
"path" : " /path/to/terraform.pkg " ,
"bundle_id" : " com.mitchellh.example.terraform " ,
"staple" : true
}],
"apple_id" : {
"username" : " [email protected] " ,
"password" : " @env:AC_PASSWORD "
}
} Beachten Sie, dass Sie mehrere notarize Blöcke angeben können, um Multipel -Dateien gleichzeitig zu beglaubigen.
Der Notarizationsprozess erfordert, dass Sie Ihre Pakete an Apple senden und darauf warten, dass sie sie scannen. Apple stellt so weit ich beurteilen kann.
Bei der Entwicklung gon und der Arbeit mit dem Notarialisierungsprozess habe ich festgestellt, dass der Prozess durchschnittlich schnell ist (<10 Minuten), aber in einigen Fällen sind Notarialisierungsanfragen seit einer Stunde oder länger in die Warteschlange gestellt.
gon gibt den Statusaktualisierungen wie es aus und wartet auf unbestimmte Zeit darauf, dass die Notarisierung abgeschlossen ist. Wenn gon unterbrochen wird, können Sie den Status einer Anforderung selbst über die Anforderung überprüfen, die gon nach der Einreichung ausgibt.
gon ist so konstruiert, dass er in automatisierten Umgebungen wie CI -Pipelines ausgeführt wird. In dieser Umgebung sollten Sie JSON -Konfigurationsdateien mit gon und dem -log-json -Flag verwenden, um die strukturierte Protokollierungsausgabe zu erhalten.
gon gibt immer die menschliche lesbare Ausgabe für STDOut (einschließlich Fehler) und alle logarithmischen Ausgaben auf Stderr aus. Durch Angeben -log-json werden die Protokolleinträge mit JSON strukturiert. Sie können den Stream von JSON mithilfe eines Tools wie jq oder einer Skriptsprache verarbeiten, um kritische Informationen wie die Anforderung UUID, Status und mehr zu extrahieren.
Wenn gon in einer Umgebung ohne TTY geführt wird, wird die menschliche Leistung nicht gefärbt. Dies macht es für Ausgabeprotokolle freundlicher.
Beispiel:
$ gon -log-level=info -log-json ./config.hcl
...
Beachten Sie, dass Sie sowohl -log-level als auch -log-json angeben müssen. Das Flag -log-level ermöglicht die Protokollierung im Allgemeinen. Eine info -Ebene reicht in Automatisierungsumgebungen aus, um alle gewünschten Informationen zu erhalten.
Auf dem ersten Mal kann mehrmals für Passwörter aufgefordert werden. Wenn Sie auf "Immer zulassen" klicken, werden Sie nicht erneut aufgefordert. Diese Eingabeaufforderungen stammen aus Apple -Software, die gon subprozessieren und nicht von gon selbst.
Ich weiß derzeit nicht, wie man die Genehmigungen einsCRECTIONS -STRECTIONEN, daher ist die Empfehlung zu Build -Maschinen darin, gon einmal manuell auszuführen. Wenn jemand einen Weg findet, dies zu automatisieren, öffnen Sie bitte ein Problem, lassen Sie es mich wissen und ich werde diese Readme aktualisieren.
Goreleaser ist ein beliebtes Tool für die Release-Automatisierung für die Release-Automatisierung für GO-basierte Projekte. Gon kann mit Goreleaser verwendet werden, um den Unterzeichnungsschritt zu erweitern, um Ihre Binärdateien als Teil einer Goreleaser -Pipeline zu notarialisieren.
Hier ist ein Beispiel für die Goreleaser -Konfiguration, um Ihre Binärdateien zu unterzeichnen:
builds :
- binary : foo
id : foo
goos :
- linux
- windows
goarch :
- amd64
# notice that we need a separated build for the macos binary only:
- binary : foo
id : foo-macos
goos :
- darwin
goarch :
- amd64
signs :
- signature : " ${artifact}.dmg "
ids :
- foo-macos # here we filter the macos only build id
# you'll need to have gon on PATH
cmd : gon
# you can follow the gon docs to properly create the gon.hcl config file:
# https://github.com/mitchellh/gon
args :
- gon.hcl
artifacts : allWeitere Informationen finden Sie in der Goreleaser -Dokumentation.
Wir enthüllen auch eine unterstützte API für die Unterzeichnung, Verpackung und Notarialisierung von Dateien mithilfe der Go -Programmiersprache. Weitere Informationen finden Sie in der verknüpften GO -Dokumentation.
Die exponierten Bibliotheken sind absichtlich niedriger und trennen das Zeichen, das Paket, die Notarisierung und die Stapelschritte. Auf diese Weise können Sie diese Funktionalität problemlos in jede Toolierung integrieren, im Vergleich zu einer einheitlichen gon -CLI -Erfahrung.
Sie haben wahrscheinlich Apple 2FA aktiviert. Sie müssen ein Anwendungskennwort generieren und anstelle Ihres Apple -ID -Passworts verwenden.
Dies sind einige Dinge, die ich gerne sehen würde, aber derzeit nicht implementiert werden.