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:

#!/bin/bash
#
# sign 1.0.7
#
# Signs an OSX App
#
# CALL:
# sign appname
#
# (c)2014-2020 Harald Schneider
#

echo
echo "Clearing attributes ..."
xattr -lr "$1"
xattr -cr "$1"

echo
echo "Signing ..."
codesign  --deep --options runtime -f --preserve-metadata=identifier,entitlements -s "Developer ID Application: Harald Schneider" "$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

chmod +x sign

Der Aufruf erfolgt dann einfach mit

./sign appname.app

Am Ende der Ausgabe sollte dann “accepted” stehen. Ansonsten erhält man detaillierte Auskunft über evtl. Probleme:

...
-------------------------------------------------
Checking Acceptance ...
test.app: accepted
source=Developer ID
origin=Developer ID Application: Harald Schneider (xxx)
-------------------------------------------------
DONE !