Firma en macOS (compilaciones de depuración)
Esta app normalmente se compila desdescripts/package-mac-app.sh, que ahora:
- establece un identificador de bundle de depuración estable:
ai.openclaw.mac.debug - escribe el Info.plist con ese id de bundle (sobrescríbelo mediante
BUNDLE_ID=...) - llama a
scripts/codesign-mac-app.shpara firmar el binario principal y el bundle de la app, de modo que macOS trate cada recompilación como el mismo bundle firmado y mantenga los permisos TCC (notificaciones, accesibilidad, grabación de pantalla, micrófono, voz). Para permisos estables, usa una identidad de firma real; la firma ad-hoc es opt-in y frágil (consulta permisos de macOS). - usa
CODESIGN_TIMESTAMP=autode forma predeterminada; habilita marcas de tiempo confiables para firmas Developer ID. ConfiguraCODESIGN_TIMESTAMP=offpara omitir el timestamping (compilaciones de depuración offline). - inyecta metadatos de compilación en Info.plist:
OpenClawBuildTimestamp(UTC) yOpenClawGitCommit(hash corto) para que el panel About pueda mostrar compilación, git y canal debug/release. - El empaquetado usa Node 24 por defecto: el script ejecuta compilaciones de TS y la compilación de la Control UI. Node 22 LTS, actualmente
22.14+, sigue siendo compatible por compatibilidad. - lee
SIGN_IDENTITYdesde el entorno. Agregaexport SIGN_IDENTITY="Apple Development: Your Name (TEAMID)"(o tu certificado Developer ID Application) a tu shell rc para firmar siempre con tu certificado. La firma ad-hoc requiere activación explícita medianteALLOW_ADHOC_SIGNING=1oSIGN_IDENTITY="-"(no se recomienda para pruebas de permisos). - ejecuta una auditoría de Team ID después de firmar y falla si cualquier Mach-O dentro del bundle de la app está firmado con un Team ID distinto. Configura
SKIP_TEAM_ID_CHECK=1para omitirla.
Uso
Nota sobre firma ad-hoc
Al firmar conSIGN_IDENTITY="-" (ad-hoc), el script desactiva automáticamente el Hardened Runtime (--options runtime). Esto es necesario para evitar fallos cuando la app intenta cargar frameworks integrados (como Sparkle) que no comparten el mismo Team ID. Las firmas ad-hoc también rompen la persistencia de permisos TCC; consulta permisos de macOS para ver los pasos de recuperación.
Metadatos de compilación para About
package-mac-app.sh marca el bundle con:
OpenClawBuildTimestamp: ISO8601 UTC en el momento del empaquetadoOpenClawGitCommit: hash corto de git (ounknownsi no está disponible)
#if DEBUG). Ejecuta el empaquetador para actualizar estos valores después de cambios en el código.
Por qué
Los permisos TCC están vinculados al identificador del bundle y a la firma del código. Las compilaciones de depuración sin firmar con UUID cambiantes hacían que macOS olvidara las concesiones después de cada recompilación. Firmar los binarios (ad-hoc por defecto) y mantener un id/ruta de bundle fijo (dist/OpenClaw.app) conserva las concesiones entre compilaciones, igual que el enfoque de VibeTunnel.