{
  "title": "mac signing (debug builds)",
  "content": "This app is usually built from [`scripts/package-mac-app.sh`](https://github.com/openclaw/openclaw/blob/main/scripts/package-mac-app.sh), which now:\n\n* sets a stable debug bundle identifier: `ai.openclaw.mac.debug`\n* writes the Info.plist with that bundle id (override via `BUNDLE_ID=...`)\n* calls [`scripts/codesign-mac-app.sh`](https://github.com/openclaw/openclaw/blob/main/scripts/codesign-mac-app.sh) to sign the main binary and app bundle so macOS treats each rebuild as the same signed bundle and keeps TCC permissions (notifications, accessibility, screen recording, mic, speech). For stable permissions, use a real signing identity; ad-hoc is opt-in and fragile (see [macOS permissions](/platforms/mac/permissions)).\n* uses `CODESIGN_TIMESTAMP=auto` by default; it enables trusted timestamps for Developer ID signatures. Set `CODESIGN_TIMESTAMP=off` to skip timestamping (offline debug builds).\n* inject build metadata into Info.plist: `OpenClawBuildTimestamp` (UTC) and `OpenClawGitCommit` (short hash) so the About pane can show build, git, and debug/release channel.\n* **Packaging requires Node 22+**: the script runs TS builds and the Control UI build.\n* reads `SIGN_IDENTITY` from the environment. Add `export SIGN_IDENTITY=\"Apple Development: Your Name (TEAMID)\"` (or your Developer ID Application cert) to your shell rc to always sign with your cert. Ad-hoc signing requires explicit opt-in via `ALLOW_ADHOC_SIGNING=1` or `SIGN_IDENTITY=\"-\"` (not recommended for permission testing).\n* runs a Team ID audit after signing and fails if any Mach-O inside the app bundle is signed by a different Team ID. Set `SKIP_TEAM_ID_CHECK=1` to bypass.",
  "code_samples": [],
  "headings": [
    {
      "level": "h2",
      "text": "Usage",
      "id": "usage"
    }
  ],
  "url": "llms-txt#mac-signing-(debug-builds)",
  "links": []
}