macOS companion app
Assinatura do macOS
assinatura no mac (compilações de depuração)
Este app normalmente é compilado por scripts/package-mac-app.sh, que agora:
- define um identificador de pacote de depuração estável:
ai.openclaw.mac.debug - grava o Info.plist com esse id de pacote (sobrescreva via
BUNDLE_ID=...) - chama
scripts/codesign-mac-app.shpara assinar o binário principal e o pacote do app, para que o macOS trate cada recompilação como o mesmo pacote assinado e mantenha as permissões de TCC (notificações, acessibilidade, gravação de tela, microfone, fala). Para permissões estáveis, use uma identidade de assinatura real; ad-hoc é opcional e frágil (consulte permissões do macOS). - usa
CODESIGN_TIMESTAMP=autopor padrão; isso habilita timestamps confiáveis para assinaturas Developer ID. DefinaCODESIGN_TIMESTAMP=offpara pular o timestamping (compilações de depuração offline). - injeta metadados de compilação no Info.plist:
OpenClawBuildTimestamp(UTC) eOpenClawGitCommit(hash curto), para que o painel Sobre possa mostrar compilação, git e canal de depuração/lançamento. - O empacotamento usa Node 24 por padrão: o script executa compilações TS e a compilação da UI de Controle. Node 22 LTS, atualmente
22.16+, continua compatível. - lê
SIGN_IDENTITYdo ambiente. Adicioneexport SIGN_IDENTITY="Apple Development: Your Name (TEAMID)"(ou seu certificado Developer ID Application) ao rc do seu shell para sempre assinar com seu certificado. A assinatura ad-hoc exige adesão explícita viaALLOW_ADHOC_SIGNING=1ouSIGN_IDENTITY="-"(não recomendado para testes de permissões). - executa uma auditoria de Team ID após a assinatura e falha se qualquer Mach-O dentro do pacote do app estiver assinado por um Team ID diferente. Defina
SKIP_TEAM_ID_CHECK=1para ignorar.
Uso
# 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
Observação sobre assinatura ad-hoc
Ao assinar com SIGN_IDENTITY="-" (ad-hoc), o script desabilita automaticamente o Runtime Reforçado (--options runtime). Isso é necessário para evitar falhas quando o app tenta carregar frameworks incorporados (como o Sparkle) que não compartilham o mesmo Team ID. Assinaturas ad-hoc também quebram a persistência de permissões de TCC; consulte permissões do macOS para etapas de recuperação.
Metadados de compilação para Sobre
package-mac-app.sh carimba o pacote com:
OpenClawBuildTimestamp: UTC ISO8601 no momento do empacotamentoOpenClawGitCommit: hash git curto (ouunknownse indisponível)
A aba Sobre lê essas chaves para mostrar versão, data de compilação, commit git e se é uma compilação de depuração (via #if DEBUG). Execute o empacotador para atualizar esses valores após alterações no código.
Por quê
As permissões de TCC estão vinculadas ao identificador do pacote e à assinatura de código. Compilações de depuração não assinadas com UUIDs variáveis faziam o macOS esquecer concessões após cada recompilação. Assinar os binários (ad-hoc por padrão) e manter um id/caminho de pacote fixo (dist/OpenClaw.app) preserva as concessões entre compilações, correspondendo à abordagem do VibeTunnel.