macOS companion app
macOS-Signierung
Mac-Signierung (Debug-Builds)
Diese App wird normalerweise mit scripts/package-mac-app.sh gebaut. Das Skript:
- setzt einen stabilen Debug-Bundle-Identifier:
ai.openclaw.mac.debug - schreibt die Info.plist mit dieser Bundle-ID (überschreibbar über
BUNDLE_ID=...) - ruft
scripts/codesign-mac-app.shauf, um die Haupt-Binärdatei und das App-Bundle zu signieren, damit macOS jeden Rebuild als dasselbe signierte Bundle behandelt und TCC-Berechtigungen beibehält (Benachrichtigungen, Bedienungshilfen, Bildschirmaufnahme, Mikrofon, Sprachausgabe). Verwenden Sie für stabile Berechtigungen eine echte Signaturidentität; Ad-hoc ist optional und fragil (siehe macOS-Berechtigungen). - verwendet standardmäßig
CODESIGN_TIMESTAMP=auto; dies aktiviert vertrauenswürdige Zeitstempel für Developer-ID-Signaturen. Setzen SieCODESIGN_TIMESTAMP=off, um die Zeitstempelung zu überspringen (Offline-Debug-Builds). - fügt Build-Metadaten in die Info.plist ein:
OpenClawBuildTimestamp(UTC) undOpenClawGitCommit(kurzer Hash), damit der Info-Bereich Build, Git sowie Debug-/Release-Kanal anzeigen kann. - Die Paketierung verwendet standardmäßig Node 24: Das Skript führt TS-Builds und den Control-UI-Build aus. Node 22 LTS, derzeit
22.16+, wird aus Kompatibilitätsgründen weiterhin unterstützt. - liest
SIGN_IDENTITYaus der Umgebung. Fügen Sieexport SIGN_IDENTITY="Apple Development: Your Name (TEAMID)"(oder Ihr Developer-ID-Application-Zertifikat) zu Ihrer Shell-rc hinzu, um immer mit Ihrem Zertifikat zu signieren. Ad-hoc-Signierung erfordert explizite Zustimmung überALLOW_ADHOC_SIGNING=1oderSIGN_IDENTITY="-"(für Berechtigungstests nicht empfohlen). - führt nach der Signierung ein Team-ID-Audit aus und schlägt fehl, wenn eine Mach-O-Datei im App-Bundle mit einer anderen Team ID signiert ist. Setzen Sie
SKIP_TEAM_ID_CHECK=1, um dies zu umgehen.
Verwendung
# from repo root
scripts/package-mac-app.sh # auto-selects identity; errors if none found
SIGN_IDENTITY="Developer ID Application: Your Name" scripts/package-mac-app.sh # real cert
ALLOW_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 workaround
Hinweis zur Ad-hoc-Signierung
Beim Signieren mit SIGN_IDENTITY="-" (ad-hoc) deaktiviert das Skript automatisch die Hardened Runtime (--options runtime). Dies ist erforderlich, um Abstürze zu verhindern, wenn die App versucht, eingebettete Frameworks (wie Sparkle) zu laden, die nicht dieselbe Team ID verwenden. Ad-hoc-Signaturen unterbrechen außerdem die Persistenz von TCC-Berechtigungen; Wiederherstellungsschritte finden Sie unter macOS-Berechtigungen.
Build-Metadaten für „Info“
package-mac-app.sh versieht das Bundle mit:
OpenClawBuildTimestamp: ISO8601-UTC zum PaketierungszeitpunktOpenClawGitCommit: kurzer Git-Hash (oderunknown, falls nicht verfügbar)
Der Info-Tab liest diese Schlüssel, um Version, Build-Datum, Git-Commit und ob es sich um einen Debug-Build handelt (über #if DEBUG) anzuzeigen. Führen Sie den Packager nach Codeänderungen aus, um diese Werte zu aktualisieren.
Warum
TCC-Berechtigungen sind an den Bundle-Identifier und die Codesignatur gebunden. Nicht signierte Debug-Builds mit wechselnden UUIDs führten dazu, dass macOS Berechtigungen nach jedem Rebuild vergaß. Das Signieren der Binärdateien (standardmäßig ad-hoc) und das Beibehalten einer festen Bundle-ID/eines festen Pfads (dist/OpenClaw.app) bewahrt die Berechtigungen zwischen Builds und entspricht damit dem VibeTunnel-Ansatz.