Firma en Mac (builds de debug)
Esta app generalmente se compila desde scripts/package-mac-app.sh, que ahora:
- Establece un identificador de bundle de debug estable:
ai.openclaw.mac.debug - Escribe el Info.plist con ese bundle id (sobrescribible vía
BUNDLE_ID=...) - Llama a
scripts/codesign-mac-app.shpara firmar el binario principal y el app bundle para 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; ad-hoc es opt-in y frágil (ver permisos de macOS). - Usa
CODESIGN_TIMESTAMP=autopor defecto; habilita timestamps confiables para firmas Developer ID. EstableceCODESIGN_TIMESTAMP=offpara omitir el timestamping (builds de debug offline). - Inyecta metadatos de compilación en Info.plist:
OpenClawBuildTimestamp(UTC) yOpenClawGitCommit(hash corto) para que el panel About pueda mostrar build, git, y canal debug/release. - El empaquetado usa Node 24 por defecto: el script ejecuta builds TS y el build de la Control UI. Node 22 LTS, actualmente
22.16+, sigue siendo compatible. - Lee
SIGN_IDENTITYdel entorno. Añadeexport SIGN_IDENTITY="Apple Development: Your Name (TEAMID)"(o tu cert Developer ID Application) a tu shell rc para firmar siempre con tu certificado. La firma ad-hoc requiere opt-in explícito víaALLOW_ADHOC_SIGNING=1oSIGN_IDENTITY="-"(no recomendado para pruebas de permisos). - Ejecuta una auditoría de Team ID después de firmar y falla si algún Mach-O dentro del app bundle está firmado por un Team ID diferente. Establece
SKIP_TEAM_ID_CHECK=1para omitir.
Uso
# desde la raíz del repo
scripts/package-mac-app.sh # auto-selecciona identidad; error si no se encuentra
SIGN_IDENTITY="Developer ID Application: Your Name" scripts/package-mac-app.sh # cert real
ALLOW_ADHOC_SIGNING=1 scripts/package-mac-app.sh # ad-hoc (los permisos no persistirán)
SIGN_IDENTITY="-" scripts/package-mac-app.sh # ad-hoc explícito (misma advertencia)
DISABLE_LIBRARY_VALIDATION=1 scripts/package-mac-app.sh # workaround solo dev para desajuste de Team ID de Sparkle
Nota sobre firma ad-hoc
Al firmar con SIGN_IDENTITY="-" (ad-hoc), el script deshabilita automáticamente el Hardened Runtime (--options runtime). Esto es necesario para evitar crashes cuando la app intenta cargar frameworks embebidos (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 pasos de recuperación.
Metadatos de compilación para About
package-mac-app.sh sella el bundle con:
OpenClawBuildTimestamp: ISO8601 UTC al momento del empaquetadoOpenClawGitCommit: hash corto de git (ounknownsi no está disponible)
La pestaña About lee estas claves para mostrar versión, fecha de compilación, commit de git, y si es un build de debug (vía #if DEBUG). Ejecuta el empaquetador para refrescar estos valores después de cambios en el código.
Por qué
Los permisos TCC están vinculados al identificador de bundle y a la firma de código. Los builds de debug sin firmar con UUIDs cambiantes causaban que macOS olvidara las concesiones después de cada recompilación. Firmar los binarios (ad-hoc por defecto) y mantener un bundle id/ruta fijo (dist/OpenClaw.app) preserva las concesiones entre compilaciones, siguiendo el enfoque de VibeTunnel.