macOS companion app
macOS 署名
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(短いハッシュ)。これにより、情報ペインでビルド、git、デバッグ/リリースチャネルを表示できます。 - パッケージングは既定で Node 24 を使います: スクリプトは TS ビルドと Control UI ビルドを実行します。互換性のため、Node 22 LTS(現在は
22.19+)も引き続きサポートされます。 - 環境から
SIGN_IDENTITYを読み取ります。常に自分の証明書で署名するには、シェル rc にexport SIGN_IDENTITY="Apple Development: Your Name (TEAMID)"(または Developer ID Application 証明書)を追加します。アドホック署名にはALLOW_ADHOC_SIGNING=1またはSIGN_IDENTITY="-"による明示的な選択が必要です(権限テストには推奨しません)。 - 署名後にチーム ID 監査を実行し、アプリバンドル内のいずれかの Mach-O が異なるチーム ID で署名されている場合は失敗します。回避するには
SKIP_TEAM_ID_CHECK=1を設定します。
使用方法
# from repo rootscripts/package-mac-app.sh # auto-selects identity; errors if none foundSIGN_IDENTITY="Developer ID Application: Your Name" scripts/package-mac-app.sh # real certALLOW_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 権限を参照してください。
情報表示用のビルドメタデータ
package-mac-app.sh はバンドルに次を刻印します。
OpenClawBuildTimestamp: パッケージ時点の ISO8601 UTCOpenClawGitCommit: 短い git ハッシュ(取得できない場合はunknown)
情報タブはこれらのキーを読み取り、バージョン、ビルド日、git コミット、そしてデバッグビルドかどうか(#if DEBUG 経由)を表示します。コード変更後にこれらの値を更新するには、パッケージャを実行してください。
理由
TCC 権限はバンドル識別子 と コード署名に紐づいています。UUID が変わる未署名のデバッグビルドでは、リビルドのたびに macOS が許可を忘れていました。バイナリに署名し(既定ではアドホック)、固定のバンドル ID/パス(dist/OpenClaw.app)を維持することで、VibeTunnel のアプローチと同様に、ビルド間で許可を保持できます。
関連
Was this useful?