macOS companion app
Firma macOS
firma mac (build di debug)
Questa app viene solitamente creata da scripts/package-mac-app.sh, che ora:
- imposta un identificatore di bundle di debug stabile:
ai.openclaw.mac.debug - scrive l'Info.plist con quell'id bundle (sovrascrivibile tramite
BUNDLE_ID=...) - chiama
scripts/codesign-mac-app.shper firmare il binario principale e il bundle dell'app, in modo che macOS tratti ogni ricompilazione come lo stesso bundle firmato e mantenga le autorizzazioni TCC (notifiche, accessibilità, registrazione dello schermo, microfono, sintesi vocale). Per autorizzazioni stabili, usa un'identità di firma reale; ad-hoc è opt-in e fragile (vedi autorizzazioni macOS). - usa
CODESIGN_TIMESTAMP=autoper impostazione predefinita; abilita timestamp attendibili per le firme Developer ID. ImpostaCODESIGN_TIMESTAMP=offper saltare il timestamping (build di debug offline). - inserisce i metadati di build in Info.plist:
OpenClawBuildTimestamp(UTC) eOpenClawGitCommit(hash breve), così il pannello Informazioni può mostrare build, git e canale debug/release. - Il packaging usa Node 24 per impostazione predefinita: lo script esegue le build TS e la build della Control UI. Node 22 LTS, attualmente
22.19+, rimane supportato per compatibilità. - legge
SIGN_IDENTITYdall'ambiente. Aggiungiexport SIGN_IDENTITY="Apple Development: Your Name (TEAMID)"(o il tuo certificato Developer ID Application) al tuo shell rc per firmare sempre con il tuo certificato. La firma ad-hoc richiede opt-in esplicito tramiteALLOW_ADHOC_SIGNING=1oSIGN_IDENTITY="-"(non consigliato per testare le autorizzazioni). - esegue un audit del Team ID dopo la firma e fallisce se qualsiasi Mach-O dentro il bundle dell'app è firmato da un Team ID diverso. Imposta
SKIP_TEAM_ID_CHECK=1per bypassare.
Utilizzo
# 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 workaroundNota sulla firma ad-hoc
Quando si firma con SIGN_IDENTITY="-" (ad-hoc), lo script disabilita automaticamente il Hardened Runtime (--options runtime). Questo è necessario per evitare crash quando l'app tenta di caricare framework incorporati (come Sparkle) che non condividono lo stesso Team ID. Le firme ad-hoc interrompono anche la persistenza delle autorizzazioni TCC; vedi autorizzazioni macOS per i passaggi di ripristino.
Metadati di build per Informazioni
package-mac-app.sh marca il bundle con:
OpenClawBuildTimestamp: UTC ISO8601 al momento del packagingOpenClawGitCommit: hash git breve (ounknownse non disponibile)
La scheda Informazioni legge queste chiavi per mostrare versione, data di build, commit git e se si tratta di una build di debug (tramite #if DEBUG). Esegui il packager per aggiornare questi valori dopo modifiche al codice.
Perché
Le autorizzazioni TCC sono legate all'identificatore del bundle e alla firma del codice. Le build di debug non firmate con UUID variabili facevano sì che macOS dimenticasse le concessioni dopo ogni ricompilazione. Firmare i binari (ad-hoc per impostazione predefinita) e mantenere un id/percorso bundle fisso (dist/OpenClaw.app) preserva le concessioni tra le build, seguendo l'approccio di VibeTunnel.