macOS companion app
macOS の署名
mac 署名(デバッグビルド)
scripts/package-mac-app.sh はアプリをビルドして固定パス(dist/OpenClaw.app)にパッケージ化し、その後 scripts/codesign-mac-app.sh を呼び出して署名します。TCC 権限はバンドル ID とコード署名に関連付けられています。再ビルド時に両方を安定させ(さらにアプリを固定パスに配置し)続けることで、macOS が TCC の許可(通知、アクセシビリティ、画面収録、マイク、音声認識)を忘れないようにします。
- デバッグ用バンドル識別子のデフォルトは
ai.openclaw.mac.debugです(BUNDLE_ID=...で上書きできます)。 - Node:
>=22.22.3 <23、>=24.15.0 <25、または>=25.9.0(リポジトリのpackage.jsonengines)。パッケージャーは Control UI(pnpm ui:build)もビルドします。 - デフォルトでは実際の署名 ID が必要です。署名 ID が見つからず、
ALLOW_ADHOC_SIGNINGが設定されていない場合、codesign スクリプトはエラーで終了します。アドホック署名(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、最初に見つかった有効なコード署名 ID の順に ID を自動選択します。 CODESIGN_TIMESTAMP=auto(デフォルト)は、Developer ID Application 署名の場合にのみ信頼できるタイムスタンプを有効にします。いずれかの動作を強制するには、on/offを設定します。- About タブでビルド、git、デバッグ/リリースチャンネルを表示できるように、Info.plist に
OpenClawBuildTimestamp(ISO8601 UTC)とOpenClawGitCommit(短縮ハッシュ、取得できない場合はunknown)を記録します。 - 署名後に Team ID の監査を実行し、バンドル内のいずれかの Mach-O の Team ID が異なる場合は失敗します。回避するには
SKIP_TEAM_ID_CHECK=1を設定します。
使用方法
# リポジトリのルートからscripts/package-mac-app.sh # ID を自動選択。見つからない場合はエラー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 Team ID 不一致の回避策アドホック署名に関する注意
SIGN_IDENTITY="-" は、アプリが同じ Team ID を共有しない組み込みフレームワーク(Sparkle など)を読み込む際のクラッシュを防ぐため、Hardened Runtime(--options runtime)を無効にします。また、アドホック署名では TCC 権限を維持できなくなります。復旧手順については、macOS の権限を参照してください。
About のビルドメタデータ
About タブは Info.plist から OpenClawBuildTimestamp と OpenClawGitCommit を読み取り、バージョン、ビルド日、git コミット、およびビルドが DEBUG かどうか(#if DEBUG を使用)を表示します。これらの値を更新するには、コード変更後にパッケージャーを再実行してください。
関連項目
Was this useful?