подписание mac (отладочные сборки)
Это приложение обычно собирается изscripts/package-mac-app.sh, который теперь:
- задаёт стабильный идентификатор бандла для отладки:
ai.openclaw.mac.debug - записывает Info.plist с этим идентификатором бандла (переопределяется через
BUNDLE_ID=...) - вызывает
scripts/codesign-mac-app.shдля подписания основного бинарника и бандла приложения, чтобы macOS воспринимала каждую пересборку как один и тот же подписанный бандл и сохраняла разрешения TCC (уведомления, специальные возможности, запись экрана, микрофон, речь). Для стабильных разрешений используйте реальную идентификацию подписи; ad-hoc — по явному выбору и ненадёжно (см. macOS permissions). - по умолчанию использует
CODESIGN_TIMESTAMP=auto; это включает доверенные временные метки для подписей Developer ID. УстановитеCODESIGN_TIMESTAMP=off, чтобы пропустить проставление временных меток (офлайн-отладочные сборки). - внедряет метаданные сборки в Info.plist:
OpenClawBuildTimestamp(UTC) иOpenClawGitCommit(короткий хеш), чтобы вкладка About могла показать сборку, git и канал debug/release. - Упаковка требует Node 22+: скрипт запускает сборки TS и сборку Control UI.
- читает
SIGN_IDENTITYиз переменных окружения. Добавьтеexport SIGN_IDENTITY="Apple Development: Your Name (TEAMID)"(или ваш сертификат Developer ID Application) в rc-файл оболочки, чтобы всегда подписывать своим сертификатом. Ad-hoc‑подписание требует явного включения черезALLOW_ADHOC_SIGNING=1илиSIGN_IDENTITY="-"(не рекомендуется для тестирования разрешений). - после подписания выполняет аудит Team ID и завершает работу с ошибкой, если какой-либо Mach‑O внутри бандла приложения подписан другим Team ID. Установите
SKIP_TEAM_ID_CHECK=1для обхода проверки.
Использование
Примечание о ad-hoc‑подписании
При подписании сSIGN_IDENTITY="-" (ad-hoc) скрипт автоматически отключает Hardened Runtime (--options runtime). Это необходимо, чтобы предотвратить сбои, когда приложение пытается загрузить встроенные фреймворки (например, Sparkle), которые не разделяют тот же Team ID. Ad-hoc‑подписи также нарушают сохранение разрешений TCC; шаги по восстановлению см. в macOS permissions.
Метаданные сборки для About
package-mac-app.sh помечает бандл следующими данными:
OpenClawBuildTimestamp: ISO8601 UTC на момент упаковкиOpenClawGitCommit: короткий git‑хеш (илиunknown, если недоступно)
#if DEBUG). Запустите упаковщик, чтобы обновить эти значения после изменений кода.
Зачем
Разрешения TCC привязаны к идентификатору бандла и подписи кода. Неподписанные отладочные сборки с меняющимися UUID приводили к тому, что macOS забывала выданные разрешения после каждой пересборки. Подписание бинарников (ad‑hoc по умолчанию) и сохранение фиксированного идентификатора бандла/пути (dist/OpenClaw.app) сохраняет разрешения между сборками, что соответствует подходу VibeTunnel.