Skip to content

Mac 서명(디버그 빌드)

이 앱은 일반적으로 scripts/package-mac-app.sh에서 빌드되며 현재 다음과 같습니다.

  • 안정적인 디버그 번들 식별자를 설정합니다: ai.openclaw.mac.debug
  • 해당 번들 ID로 Info.plist를 작성합니다(BUNDLE_ID=...를 통해 재정의).
  • scripts/codesign-mac-app.sh](https://github.com/openclaw/openclaw/blob/main/scripts/codesign-mac-app.sh)를 호출하여 기본 바이너리 및 앱 번들에 서명합니다. 그러면 macOS는 각 재구축을 동일한 서명된 번들로 처리하고 TCC 권한(알림, 접근성, 화면 녹화, 마이크, 음성)을 유지합니다. 안정적인 권한을 위해서는 실제 서명 ID를 사용하세요. 임시는 선택적이고 취약합니다(macOS 권한 참조).
  • 기본적으로 CODESIGN_TIMESTAMP=auto를 사용합니다. 개발자 ID 서명에 대해 신뢰할 수 있는 타임스탬프를 활성화합니다. 타임스탬프(오프라인 디버그 빌드)를 건너뛰려면 CODESIGN_TIMESTAMP=off를 설정하세요.
  • Info.plist에 빌드 메타데이터를 삽입합니다: OpenClawBuildTimestamp(UTC) 및 OpenClawGitCommit(짧은 해시) 그러면 About 창에 빌드, git 및 디버그/릴리스 채널이 표시될 수 있습니다.
  • 패키징에는 Node 22+가 필요합니다: 스크립트는 TS 빌드 및 Control UI 빌드를 실행합니다.
  • 환경에서 SIGN_IDENTITY를 읽습니다. 항상 인증서로 서명하려면 쉘 rc에 export SIGN_IDENTITY="Apple Development: Your Name (TEAMID)"(또는 개발자 ID 애플리케이션 인증서)를 추가하세요. 임시 서명에는 ALLOW_ADHOC_SIGNING=1 또는 SIGN_IDENTITY="-"를 통한 명시적인 선택이 필요합니다(권한 테스트에는 권장되지 않음).
  • 서명 후 팀 ID 감사를 실행하고 앱 번들 내부의 Mach-O가 다른 팀 ID로 서명된 경우 실패합니다. SKIP_TEAM_ID_CHECK=1를 우회로 설정하세요.

사용법

bash
# 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

임시 서명 메모

SIGN_IDENTITY="-"(임시)로 서명하면 스크립트는 자동으로 강화된 런타임(--options runtime)을 비활성화합니다. 이는 앱이 동일한 팀 ID를 공유하지 않는 내장된 프레임워크(예: Sparkle)를 로드하려고 할 때 충돌을 방지하는 데 필요합니다. 임시 서명은 또한 TCC 권한 지속성을 손상시킵니다. 복구 단계는 macOS 권한을 참조하세요.

About에 대한 메타데이터 구축

package-mac-app.sh는 번들에 다음을 스탬프 처리합니다.

  • OpenClawBuildTimestamp: 패키지 시간의 ISO8601 UTC
  • OpenClawGitCommit: 짧은 git 해시(또는 사용할 수 없는 경우 unknown)

정보 탭은 이러한 키를 읽어 버전, 빌드 날짜, git 커밋 및 디버그 빌드인지 여부를 표시합니다(#if DEBUG를 통해). 코드 변경 후 패키저를 실행하여 이러한 값을 새로 고치십시오.

왜?

TCC 권한은 번들 식별자 코드 서명과 연결되어 있습니다. UUID가 변경된 서명되지 않은 디버그 빌드로 인해 macOS는 다시 빌드할 때마다 승인을 잊어버렸습니다. 바이너리에 서명하고(기본적으로 임시) 고정된 번들 ID/경로(dist/OpenClaw.app)를 유지하면 VibeTunnel 접근 방식과 일치하여 빌드 간의 승인이 유지됩니다.

비공식 커뮤니티 번역 · 공식 영문 문서