Viele zeitraubende Befehle auf der Kommandozeile lassen sich per Skript automatisieren, so auch das Signieren von Apps unter macOS. Das folgende Skript signiert Apps für die spätere Notarisierung durch Apple unter macOS Catalina oder auch für ältere macOS Versionen:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
#!/bin/bash # # sign 1.0.9 # # Signs a macOS App # # CALL: # sign appname # # (c)2014-2022 Harald Schneider - marketmix.com # # Setup.start # # The ID of your "Developer ID Application", assigned to your Keyring. # This is usually your first- and lastname: # ID="Your Name" # # Setup.end echo echo "Signing ..." codesign --force --deep --timestamp --verbose --options runtime -f --preserve-metadata=identifier,entitlements -s "Developer ID Application: ${ID}" "$1" echo "-------------------------------------------------" echo "Verifying (1) ..." codesign -vvv "$1" echo "-------------------------------------------------" echo "Verifying (2) ..." codesign -dv "$1" echo "-------------------------------------------------" echo "Checking Acceptance ..." spctl -a -t exec -vv "$1" echo "-------------------------------------------------" echo "DONE !" |
Das Skript macht im Detail folgendes:
- Es werden alle erweiterten Systemattribute rekursiv gelöscht.
- Codesign wird mit der Option für Runtime Hardening aufgrufen, damit die App später notarisiert werden kann.
- Die Developer ID wird Codesign als Parameter namentlich mitgegeben. Die entsprechenden Keys holt sich Codesign dann automatisch aus dem Schlüsselbund.
- Danach wird das ganze verifiziert und die Aktzeptanz für System bzw. Appstore getestet.
Wir speichern das Ganze unter “sign” und setzen das Execute-Flag mit
1 |
chmod +x sign |
Der Aufruf erfolgt dann einfach mit
1 |
./sign appname.app |
Am Ende der Ausgabe sollte dann “accepted” stehen. Ansonsten erhält man detaillierte Auskunft über evtl. Probleme:
1 2 3 4 5 6 7 8 |
... ------------------------------------------------- Checking Acceptance ... test.app: accepted source=Developer ID origin=Developer ID Application: Harald Schneider (xxx) ------------------------------------------------- DONE ! |
Die aktuellste Version von “sign – macOS Apps code-signieren per Script” gibt es auf GitHub.