macOS companion app
Подписание в macOS
Подписание macOS (отладочные сборки)
scripts/package-mac-app.sh собирает и упаковывает приложение по фиксированному пути (dist/OpenClaw.app), а затем вызывает scripts/codesign-mac-app.sh для его подписания. Разрешения TCC привязаны к идентификатору пакета и подписи кода; сохранение обоих неизменными (и размещение приложения по фиксированному пути) при повторных сборках не позволяет macOS забывать предоставленные разрешения TCC (уведомления, универсальный доступ, запись экрана, микрофон, распознавание речи).
- Идентификатор отладочного пакета по умолчанию —
ai.openclaw.mac.debug(переопределяется с помощьюBUNDLE_ID=...). - Node:
>=22.22.3 <23,>=24.15.0 <25или>=25.9.0(package.jsonрепозитория —engines). Упаковщик также собирает интерфейс управления (pnpm ui:build). - По умолчанию требуется настоящий сертификат подписи; если он не найден и
ALLOW_ADHOC_SIGNINGне задан, скрипт подписания завершается с ошибкой. Для использования ситуативной подписи (SIGN_IDENTITY="-") требуется явное согласие, и такая подпись не сохраняет разрешения TCC между повторными сборками. См. разрешения macOS. - Считывает
SIGN_IDENTITYиз окружения (например,export SIGN_IDENTITY="Apple Development: Your Name (TEAMID)"или сертификат Developer ID Application). Если значение не задано,codesign-mac-app.shавтоматически выбирает сертификат в следующем порядке: Developer ID Application, Apple Distribution, Apple Development, затем первый найденный действительный сертификат подписи кода. CODESIGN_TIMESTAMP=auto(по умолчанию) включает доверенные метки времени только для подписей Developer ID Application. Задайтеon/off, чтобы принудительно включить или отключить их.- Добавляет в Info.plist значения
OpenClawBuildTimestamp(ISO8601 UTC) иOpenClawGitCommit(короткий хеш,unknown, если он недоступен), чтобы на вкладке «Об приложении» отображались сведения о сборке, git и канале отладочной или выпускной версии. - После подписания выполняет проверку идентификатора команды и завершается с ошибкой, если какой-либо файл Mach-O внутри пакета имеет другой идентификатор команды. Задайте
SKIP_TEAM_ID_CHECK=1, чтобы пропустить проверку.
Использование
# из корня репозиторияscripts/package-mac-app.sh # автоматически выбирает сертификат; ошибка, если он не найденSIGN_IDENTITY="Developer ID Application: Your Name" scripts/package-mac-app.sh # настоящий сертификатALLOW_ADHOC_SIGNING=1 scripts/package-mac-app.sh # ситуативная подпись (разрешения не сохранятся)SIGN_IDENTITY="-" scripts/package-mac-app.sh # явная ситуативная подпись (с той же оговоркой)DISABLE_LIBRARY_VALIDATION=1 scripts/package-mac-app.sh # обходной путь только для разработки при несовпадении идентификатора команды SparkleПримечание о ситуативном подписании
SIGN_IDENTITY="-" отключает Hardened Runtime (--options runtime), чтобы предотвратить сбои при загрузке приложением встроенных фреймворков (например, Sparkle), у которых нет того же идентификатора команды. Ситуативные подписи также нарушают сохранение разрешений TCC; инструкции по восстановлению см. в разделе разрешения macOS.
Метаданные сборки для вкладки «Об приложении»
Вкладка «Об приложении» считывает OpenClawBuildTimestamp и OpenClawGitCommit из Info.plist, чтобы отображать версию, дату сборки, коммит git и признак отладочной сборки DEBUG (через #if DEBUG). После изменения кода повторно запустите упаковщик, чтобы обновить эти значения.