Mac 署名(デバッグビルド)

このアプリは通常 scripts/package-mac-app.sh からビルドされます。現在は次のことを行います:

  • 安定したデバッグバンドル識別子を設定: ai.openclaw.mac.debug
  • そのバンドル ID で Info.plist を書き込みます(BUNDLE_ID=... 経由でオーバーライド)
  • scripts/codesign-mac-app.sh を呼び出してメインバイナリとアプリバンドルに署名し、macOS が各再ビルドを同じ署名されたバンドルとして扱い、TCC パーミッション(通知、アクセシビリティ、画面録画、マイク、スピーチ)を保持するようにします。安定したパーミッションのためには、実際の署名 ID を使用してください。アドホックはオプトインで脆弱です(macOS パーミッション を参照)。
  • デフォルトで CODESIGN_TIMESTAMP=auto を使用します。Developer 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)"(または Developer ID Application 証明書)を追加します。アドホック署名には ALLOW_ADHOC_SIGNING=1 または SIGN_IDENTITY="-" による明示的なオプトインが必要です(パーミッションテストには推奨されません)。
  • 署名後に 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="-"(アドホック)で署名する場合、スクリプトは自動的に Hardened Runtime--options runtime)を無効にします。これは、アプリが同じ Team ID を共有しない埋め込みフレームワーク(Sparkle など)をロードしようとするときのクラッシュを防ぐために必要です。アドホック署名は TCC パーミッションの永続性も破壊します。回復手順については macOS パーミッション を参照してください。

About のビルドメタデータ

package-mac-app.sh はバンドルに以下をスタンプします:

  • OpenClawBuildTimestamp: パッケージ時の ISO8601 UTC
  • OpenClawGitCommit: 短い git ハッシュ(利用できない場合は unknown

About タブはこれらのキーを読み取り、バージョン、ビルド日、git コミット、およびデバッグビルドかどうか(#if DEBUG 経由)を表示します。コード変更後にこれらの値を更新するには、パッケージャーを実行します。

理由

TCC パーミッションはバンドル識別子*およびコード署名に紐付けられています。UUID が変化する署名されていないデバッグビルドは、macOS が各再ビルド後に許可を忘れる原因となっていました。バイナリに署名し(デフォルトでアドホック)、固定のバンドル ID/パス(dist/OpenClaw.app)を保持することで、ビルド間で許可が保持され、VibeTunnel アプローチと一致します。