OpenClaw für macOS signieren: Debug-Builds in 5 Minuten
Kennst du das? Du baust deine Mac-App neu und plötzlich fragt macOS wieder nach allen Berechtigungen. Benachrichtigungen, Mikrofon oder Screen Recording – alles weg. Das nervt im Entwicklungsalltag gewaltig und hält dich nur auf.
Diese App wird normalerweise über scripts/package-mac-app.sh gebaut. Das Script erledigt jetzt folgende Aufgaben für dich:
- Es setzt eine stabile Debug Bundle Identifier:
ai.openclaw.mac.debug. - Es schreibt die Info.plist mit dieser Bundle ID (überschreibbar via
BUNDLE_ID=...). - Es ruft
scripts/codesign-mac-app.shauf, um das Main Binary und das App Bundle zu signieren. So erkennt macOS jeden Rebuild als dasselbe signierte Bundle an und behält die TCC-Berechtigungen (Notifications, Accessibility, Screen Recording, Mic, Speech). Für stabile Berechtigungen solltest du eine echte Signing Identity nutzen; Ad-hoc ist optional und fehleranfällig (siehe macOS permissions). - Standardmäßig wird
CODESIGN_TIMESTAMP=autoverwendet, was vertrauenswürdige Zeitstempel für Developer ID Signaturen aktiviert. MitCODESIGN_TIMESTAMP=offkannst du das Zeitstempeln überspringen (praktisch für Offline-Debug-Builds). - Build-Metadaten werden in die Info.plist injiziert:
OpenClawBuildTimestamp(UTC) undOpenClawGitCommit(Short Hash). So zeigt das “Über”-Fenster den Build, Git-Infos und den Debug/Release-Channel an. - Packaging nutzt standardmäßig Node 24: Das Script führt TS-Builds und den Control UI Build aus. Node 22 LTS (aktuell
22.14+) wird weiterhin unterstützt. SIGN_IDENTITYwird aus der Umgebung gelesen. Fügeexport SIGN_IDENTITY="Apple Development: Dein Name (TEAMID)"(oder dein Developer ID Application Zertifikat) zu deiner Shell-Konfiguration hinzu, um immer mit deinem Zertifikat zu signieren. Ad-hoc-Signierung erfordert ein explizites Opt-in viaALLOW_ADHOC_SIGNING=1oderSIGN_IDENTITY="-"(nicht empfohlen für das Testen von Berechtigungen).- Nach dem Signieren läuft ein Team ID Audit. Das Script bricht ab, falls ein Mach-O innerhalb des App Bundles mit einer anderen Team ID signiert ist. Mit
SKIP_TEAM_ID_CHECK=1kannst du das umgehen.
Nutzung
Abschnitt betitelt „Nutzung“# from repo rootscripts/package-mac-app.sh # auto-selects identity; errors if none foundSIGN_IDENTITY="Developer ID Application: Your Name" scripts/package-mac-app.sh # real certALLOW_ADHOC_SIGNING=1 scripts/package-mac-app.sh # ad-hoc (permissions will not stick)SIGN_IDENTITY="-" scripts/package-mac-app.sh # explicit ad-hoc (same caveat)DISABLE_LIBRARY_VALIDATION=1 scripts/package-mac-app.sh # dev-only Sparkle Team ID mismatch workaroundHinweis zur Ad-hoc-Signierung
Abschnitt betitelt „Hinweis zur Ad-hoc-Signierung“Wenn du mit SIGN_IDENTITY="-" (ad-hoc) signierst, deaktiviert das Script automatisch die Hardened Runtime (--options runtime). Das ist nötig, um Abstürze zu verhindern, wenn die App versucht, eingebettete Frameworks (wie Sparkle) zu laden, die nicht dieselbe Team ID teilen. Ad-hoc-Signaturen führen auch dazu, dass TCC-Berechtigungen nicht dauerhaft gespeichert werden; schau dir die macOS permissions an, um zu erfahren, wie du das behebst.
Build-Metadaten für “Über diese App”
Abschnitt betitelt „Build-Metadaten für “Über diese App”“package-mac-app.sh versieht das Bundle mit folgenden Infos:
OpenClawBuildTimestamp: ISO8601 UTC zum Zeitpunkt des PackensOpenClawGitCommit: Kurzer Git-Hash (oderunknown, falls nicht verfügbar)
Der “Über”-Tab liest diese Keys aus, um Version, Build-Datum, Git-Commit und den Status als Debug-Build (via #if DEBUG) anzuzeigen. Starte den Packager neu, um diese Werte nach Code-Änderungen zu aktualisieren.
Warum das Ganze?
Abschnitt betitelt „Warum das Ganze?“TCC-Berechtigungen hängen an der Bundle Identifier und der Code-Signatur. Unsignierte Debug-Builds mit wechselnden UUIDs haben dazu geführt, dass macOS die Freigaben nach jedem Rebuild vergessen hat. Indem wir die Binaries signieren (standardmäßig ad-hoc) und eine feste Bundle ID sowie einen festen Pfad (dist/OpenClaw.app) beibehalten, bleiben die Freigaben zwischen den Builds erhalten. Das entspricht dem VibeTunnel-Ansatz.
Nächste Schritte
Abschnitt betitelt „Nächste Schritte“OpenClaw Expert
Noch festgefahren?
Wenn diese Seite nicht hilft, frage OpenClaw Expert nach Schritt-fuer-Schritt-Loesungen.