assinatura no Mac (builds de depuração)
Este app geralmente é compilado a partir descripts/package-mac-app.sh, que agora:
- define um identificador de bundle de depuração estável:
ai.openclaw.mac.debug - grava o Info.plist com esse ID de bundle (substitua com
BUNDLE_ID=...) - chama
scripts/codesign-mac-app.shpara assinar o binário principal e o bundle do app, para que o macOS trate cada recompilação como o mesmo bundle assinado e mantenha as permissões do 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 a inclusão de timestamp (builds de depuração offline). - injeta metadados de build no Info.plist:
OpenClawBuildTimestamp(UTC) eOpenClawGitCommit(hash curto) para que o painel Sobre possa mostrar build, git e o canal de depuração/release. - O empacotamento usa Node 24 por padrão: o script executa builds TS e o build da Control UI. O Node 22 LTS, atualmente
22.14+, continua com suporte por compatibilidade. - 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 opt-in explícito viaALLOW_ADHOC_SIGNING=1ouSIGN_IDENTITY="-"(não recomendado para testar permissões). - executa uma auditoria de Team ID após a assinatura e falha se qualquer Mach-O dentro do bundle do app estiver assinado por um Team ID diferente. Defina
SKIP_TEAM_ID_CHECK=1para ignorar.
Uso
Observação sobre assinatura ad-hoc
Ao assinar comSIGN_IDENTITY="-" (ad-hoc), o script desabilita automaticamente o Hardened Runtime (--options runtime). Isso é necessário para evitar falhas quando o app tenta carregar frameworks incorporados (como Sparkle) que não compartilham o mesmo Team ID. Assinaturas ad-hoc também quebram a persistência das permissões do TCC; consulte permissões do macOS para as etapas de recuperação.
Metadados de build para Sobre
package-mac-app.sh marca o bundle com:
OpenClawBuildTimestamp: ISO8601 UTC no momento do empacotamentoOpenClawGitCommit: hash curto do git (ouunknownse não estiver disponível)
#if DEBUG). Execute o empacotador para atualizar esses valores após alterações no código.
Por quê
As permissões do TCC estão vinculadas ao identificador do bundle e à assinatura do código. Builds de depuração não assinados com UUIDs variáveis faziam o macOS esquecer as concessões após cada recompilação. Assinar os binários (ad-hoc por padrão) e manter um ID/caminho de bundle fixo (dist/OpenClaw.app) preserva as concessões entre builds, correspondendo à abordagem do VibeTunnel.