macOS .app Bundles Signieren

Dieser Guide erklärt, wie du macOS .app Bundles richtig signierst und notarisierst, damit deine Apps sicher und problemlos auf anderen Macs starten.

macOS .app Bundles auf fremden Rechnern zum Laufen bringen: Signieren & Notarisieren

Ich habe herausgefunden, wie man Source Code in ein GUI-Binary packen kann (in meinem Fall mit fyne).
Dann trat ein Problem auf: Auf anderen Rechnern war die App entweder gesperrt oder wurde als „beschädigt“ angezeigt.
Damit es wirklich funktioniert, musst du ein paar Schritte erledigen.

tl;dr

Hinweis: Das funktioniert nur, wenn die Apple-Entwicklerumgebung bereits eingerichtet ist – in diesem Fall hast du wahrscheinlich schon ähnliche Snippets irgendwo liegen.

sign-notarize: build-gui
 codesign --force --deep --timestamp --options runtime --sign "$(CERT_NAME)" "$(BUILD_DIR)/$(DOTAPP)"
 zip -r "$(BUILD_DIR)/$(DOTAPP).zip" "$(BUILD_DIR)/$(DOTAPP)"
 xcrun notarytool submit "$(BUILD_DIR)/$(DOTAPP).zip" --keychain-profile "notarytool-profile" --wait
 xcrun stapler staple "$(BUILD_DIR)/$(DOTAPP)"
 rm "$(BUILD_DIR)/$(DOTAPP).zip"
 zip -r "$(BUILD_DIR)/$(DOTAPP)-signed.zip" "$(BUILD_DIR)/$(DOTAPP)"

Der Ablauf

Die Schritte sind immer die gleichen:
Build → Signieren → Zip → Notarisieren → „Staple“ → erneut zippen → Verteilen.

Voraussetzung: Apple Developer Zertifikat

Falls du dich fragst: „Welches Zertifikat?“ – dir wird das nicht gefallen.
Du brauchst zwingend ein Apple Developer Account für 99 $ pro Jahr. Daran führt kein Weg vorbei.

  1. Anmeldung unter developer.apple.com
  2. Zertifikate in Keychain Access erstellen:
    • Keychain Access → Zertifikats-Assistent → „Zertifikat von einer Zertifizierungsstelle anfordern“
    • Request-Datei speichern und im Apple Developer Portal hochladen
    • Ausgestelltes Zertifikat herunterladen und mit Doppelklick installieren
    • Team-ID und Zertifikatsnamen in Keychain Access notieren

Der Zertifikatsname ist das, was in --sign "Certificate Name" gehört.

Voraussetzung: Xcode Tools

Installiere die Xcode Command Line Tools:

xcode-select --install

# Überprüfen, ob xcrun verfügbar ist
xcrun --version

Notarisierungs-Credentials einmalig speichern:

xcrun notarytool store-credentials "notarytool-profile" \
 --apple-id "your@apple-id.com" \
 --team-id "YOUR_TEAM_ID" \
 --password "app-specific-password"

⚠️ Das Passwort ist ein app-spezifisches Passwort von appleid.apple.com, nicht dein normales Apple-ID-Passwort.

Der eigentliche Ablauf

# App signieren
codesign --force --deep --timestamp --options runtime \
 --sign "Developer ID Application: Your Name (TEAM_ID)" \
 "myapp.app"

# Für Notarisierung zippen
zip -r "myapp.app.zip" "myapp.app"

# Zur Notarisierung einreichen (dauert ca. 1–3 Minuten)
xcrun notarytool submit "myapp.app.zip" \
 --keychain-profile "notarytool-profile" --wait

# Erfolgs-Output sieht z. B. so aus:
# "Processing complete. Submission ID: xxx-xxx-xxx"
# "status: Accepted"

# Notarisierung „stapeln“
xcrun stapler staple "myapp.app"

# Aufräumen und finale Distributable erstellen
rm "myapp.app.zip"
zip -r "myapp-signed.zip" "myapp.app"

Troubleshooting

  • „no identity found“ → Zertifikat nicht installiert oder falscher Name
  • „invalid signature“--deep Flag probieren, Entitlements prüfen
  • Notarisierung abgelehnt → Mit folgendem Befehl nach unsignierten Dependencies suchen:

codesign -dv --verbose=4

Fazit

Das Setup ist beim ersten Mal schmerzhaft – danach wird es trivial.
Die 99 $ sind Apples „Developer-Steuer“: Entweder bezahlen oder auf localhost bleiben.

Lassen Sie uns gemeinsam Ihre digitale Zukunft gestalten.

Wir entwickeln digitale Erlebnisse für Pioniere, die den Status quo herausfordern wollen, damit sie sich an die Spitze ihrer Konkurrenz setzen können.
© Iridium Works GmbH. Alle Rechte vorbehalten.
Willkommen bei digitaler Excellence.