Signature mac (builds de débogage)
Cette application est généralement compilée à partir descripts/package-mac-app.sh, qui maintenant :
- définit un identifiant de bundle de débogage stable :
ai.openclaw.mac.debug - écrit le Info.plist avec cet identifiant de bundle (remplacement via
BUNDLE_ID=...) - appelle
scripts/codesign-mac-app.shpour signer le binaire principal et le bundle d’application afin que macOS traite chaque recompilation comme le même bundle signé et conserve les autorisations TCC (notifications, accessibilité, enregistrement d’écran, micro, parole). Pour des autorisations stables, utilisez une véritable identité de signature ; l’ad-hoc est une option explicite et fragile (voir macOS permissions). - utilise
CODESIGN_TIMESTAMP=autopar défaut ; cela active les horodatages de confiance pour les signatures Developer ID. DéfinissezCODESIGN_TIMESTAMP=offpour ignorer l’horodatage (builds de débogage hors ligne). - injecte des métadonnées de build dans Info.plist :
OpenClawBuildTimestamp(UTC) etOpenClawGitCommit(hash court) afin que le panneau À propos puisse afficher le build, git et le canal debug/release. - Le packaging utilise Node 24 par défaut : le script exécute les builds TS et le build de Control UI. Node 22 LTS, actuellement
22.14+, reste pris en charge pour la compatibilité. - lit
SIGN_IDENTITYdepuis l’environnement. Ajoutezexport SIGN_IDENTITY="Apple Development: Your Name (TEAMID)"(ou votre certificat Developer ID Application) à votre fichier rc shell pour toujours signer avec votre certificat. La signature ad-hoc nécessite une activation explicite viaALLOW_ADHOC_SIGNING=1ouSIGN_IDENTITY="-"(non recommandé pour les tests d’autorisations). - exécute un audit Team ID après la signature et échoue si un Mach-O à l’intérieur du bundle d’application est signé avec un Team ID différent. Définissez
SKIP_TEAM_ID_CHECK=1pour contourner cela.
Utilisation
Remarque sur la signature ad-hoc
Lors de la signature avecSIGN_IDENTITY="-" (ad-hoc), le script désactive automatiquement le Hardened Runtime (--options runtime). Cela est nécessaire pour éviter les plantages lorsque l’application tente de charger des frameworks intégrés (comme Sparkle) qui ne partagent pas le même Team ID. Les signatures ad-hoc cassent également la persistance des autorisations TCC ; voir macOS permissions pour les étapes de récupération.
Métadonnées de build pour À propos
package-mac-app.sh marque le bundle avec :
OpenClawBuildTimestamp: ISO8601 UTC au moment du packagingOpenClawGitCommit: hash git court (ouunknownsi indisponible)
#if DEBUG). Exécutez l’outil de packaging pour actualiser ces valeurs après des modifications de code.
Pourquoi
Les autorisations TCC sont liées à l’identifiant de bundle et à la signature de code. Les builds de débogage non signés avec des UUID changeants faisaient que macOS oubliait les autorisations accordées après chaque recompilation. Signer les binaires (ad-hoc par défaut) et conserver un identifiant/chemin de bundle fixe (dist/OpenClaw.app) préserve les autorisations entre les builds, conformément à l’approche VibeTunnel.