mac 署名(デバッグビルド)
この app は通常scripts/package-mac-app.sh からビルドされ、現在は次を行います:
- 安定したデバッグ bundle identifier を設定する:
ai.openclaw.mac.debug - その bundle id で Info.plist を書き込む(
BUNDLE_ID=...で上書き可能) scripts/codesign-mac-app.shを呼び出してメインバイナリと app bundle に署名し、macOS が各再ビルドを同じ署名済み bundle として扱い、TCC 権限(通知、アクセシビリティ、画面収録、マイク、音声)を維持できるようにする。安定した権限のためには実際の署名 identity を使用してください。ad-hoc は明示的なオプトインであり不安定です(macOS permissions を参照)。- デフォルトで
CODESIGN_TIMESTAMP=autoを使用する。これにより Developer ID 署名向けに信頼された timestamp が有効になります。timestamp をスキップするにはCODESIGN_TIMESTAMP=offを設定します(オフラインのデバッグビルド)。 - ビルドメタデータを Info.plist に注入する:
OpenClawBuildTimestamp(UTC)とOpenClawGitCommit(短いハッシュ)。これにより About ペインで build、git、debug/release channel を表示できます。 - パッケージングのデフォルトは Node 24: このスクリプトは TS ビルドと Control UI ビルドを実行します。互換性のため、Node 22 LTS(現在
22.14+)も引き続きサポートされます。 - 環境変数から
SIGN_IDENTITYを読み取る。常に自分の証明書で署名するには、export SIGN_IDENTITY="Apple Development: Your Name (TEAMID)"(または Developer ID Application 証明書)をシェルの rc に追加します。ad-hoc 署名にはALLOW_ADHOC_SIGNING=1またはSIGN_IDENTITY="-"による明示的なオプトインが必要です(権限テストには非推奨)。 - 署名後に Team ID 監査を実行し、app bundle 内のいずれかの Mach-O が別の Team ID で署名されていると失敗します。バイパスするには
SKIP_TEAM_ID_CHECK=1を設定します。
使用方法
Ad-hoc 署名に関する注意
SIGN_IDENTITY="-"(ad-hoc)で署名する場合、スクリプトは自動的に Hardened Runtime(--options runtime)を無効にします。これは、app が同じ Team ID を共有しない埋め込み framework(Sparkle など)を読み込もうとしたときのクラッシュを防ぐために必要です。ad-hoc 署名では TCC 権限の永続性も壊れます。復旧手順については macOS permissions を参照してください。
About 向けのビルドメタデータ
package-mac-app.sh は bundle に次を刻印します:
OpenClawBuildTimestamp: パッケージ時点の ISO8601 UTCOpenClawGitCommit: 短い git ハッシュ(利用できない場合はunknown)
#if DEBUG 経由)を表示します。コード変更後にこれらの値を更新するには、packager を実行してください。
理由
TCC 権限は bundle identifier と code signature に結び付けられています。UUID が変わる未署名のデバッグビルドでは、再ビルドのたびに macOS が付与を忘れてしまっていました。バイナリに署名し(デフォルトでは ad-hoc)、固定された bundle id / path(dist/OpenClaw.app)を保つことで、VibeTunnel のアプローチと同様に、ビルド間で付与を維持できます。