
人工智能大模型LLM 网关AI Agent即时通讯【免费下载链接】openclaw-zero-tokenOpenClaw: Use All Major AI Models NO API Token! Claude/ChatGPT/Gemini/DeepSeek/Doubao/Grok/Qwen/Manus/Kimi项目地址https://gitcode.com/gh_mirrors/op/openclaw-zero-token点击查看免费下载本文面向需要在本地构建、打包并运行 OpenClaw macOS 菜单栏应用dist/OpenClaw.app的开发者系统讲解调试构建的签名机制为什么签名、如何用scripts/package-mac-app.sh与scripts/codesign-mac-app.sh完成打包与签名、如何配置真实签名身份与临时签名以及签名如何影响 TCC 权限持久化与关于面板的构建元数据。读完本文你将能复现一条稳定、可调试、权限不丢的 macOS 调试构建流水线。背景为什么调试构建也需要签名macOS 的 TCCTransparency, Consent, and Control权限系统将权限授权与三件事绑定在一起应用的代码签名code signature、Bundle 标识符bundle identifier以及应用在磁盘上的路径。只要其中任何一项发生变化macOS 就会把应用当作一个全新应用从而可能丢弃已授予的权限甚至让权限提示直接消失。OpenClaw 的 macOS 应用是菜单栏配套应用需要通知、辅助功能Accessibility、屏幕录制、麦克风、语音识别等多项 TCC 权限可参见 macOS 权限文档。如果调试构建使用不断变化的 UUID 且不签名每次重新构建后 macOS 都会忘记授权开发者不得不在每次构建后重新走一遍权限授权流程。为此仓库的打包脚本采用了一套稳定策略使用固定的调试 Bundle 标识符ai.openclaw.mac.debug对主二进制与应用包进行签名默认临时签名推荐真实证书将产物固定在固定路径dist/OpenClaw.app。这样 macOS 会把每次重新构建视为同一个已签名包从而在构建之间保留 TCC 授权。这一方案与项目所称的 VibeTunnel 方案一致详见原文档原因一节。打包与签名脚本总览OpenClaw macOS 应用通常通过以下两个脚本构建均位于仓库scripts/目录脚本职责scripts/package-mac-app.sh完整打包入口安装依赖、编译 TS 与控制 UI、swift build、组装.app包、写入 Info.plist、调用签名脚本scripts/codesign-mac-app.sh签名执行器选择签名身份、处理时间戳与 entitlements、深度签名 Sparkle、执行 Team ID 审计package-mac-app.sh的核心流程对应源码 scripts/package-mac-app.sh解析环境变量BUNDLE_ID默认ai.openclaw.mac.debug、APP_VERSION、APP_BUILD、BUILD_CONFIG默认debug、BUILD_ARCHS、SPARKLE_FEED_URL等安装依赖运行pnpm install --no-frozen-lockfile --config.node-linkerhoisted构建 JS 与 Control UIpnpm build与node scripts/ui.js build可用SKIP_TSC1、SKIP_UI_BUILD1跳过Swift 构建按目标架构对apps/macos执行swift build -c debug --product OpenClaw并附加-Xlinker -rpath -Xlinker executable_path/../Frameworks以便加载内嵌框架组装应用包清理旧的dist/OpenClaw.app创建Contents/MacOS、Contents/Resources、Contents/Frameworks拷贝二进制多架构时用lipo -create合并嵌入Sparkle.framework、Swift 6.2 兼容库、应用图标、设备模型资源、模型目录、OpenClawKit 与 Textual 资源包写入 Info.plist基于模板 apps/macos/Sources/OpenClaw/Resources/Info.plist用PlistBuddy写入 Bundle ID、版本、构建号、构建元数据、Sparkle 订阅源地址等停止旧进程killall -q OpenClaw然后调用 scripts/codesign-mac-app.sh 签名输出就绪的应用包到dist/OpenClaw.app。注意打包流程依赖Node 22运行 TS 构建与控制 UI 构建Swift 侧则要求较新的 Xcode / Swift 6.2 工具链可参考 macOS 开发者设置 的检查命令xcodebuild -version、xcrun swift --version。关键环境变量一览以下是package-mac-app.sh/codesign-mac-app.sh支持的主要环境变量及其默认值环境变量默认值说明BUNDLE_IDai.openclaw.mac.debug调试构建的 Bundle 标识符以.debug结尾时会清空 Sparkle 订阅源并关闭自动更新检查SIGN_IDENTITY自动选择签名证书名称如Apple Development: Your Name (TEAMID)或Developer ID Application: ...ALLOW_ADHOC_SIGNING未设置设为1时找不到证书则回退到临时签名ad-hoc-CODESIGN_TIMESTAMPautoautoDeveloper ID 签名自动启用受信任时间戳on强制启用off跳过时间戳离线调试构建DISABLE_LIBRARY_VALIDATION0设为1时向 entitlements 添加com.apple.security.cs.disable-library-validation用于开发期解决 Sparkle Team ID 不匹配SKIP_TEAM_ID_CHECK0设为1时跳过签名后的 Team ID 一致性审计BUILD_CONFIGdebugdebug/releaserelease 默认构建 universal 双架构BUILD_ARCHS$(uname -m)目标架构列表如arm64 x86_64或allSKIP_TSC/SKIP_UI_BUILD0跳过 JS / Control UI 构建用于快速迭代其中关于Bundle ID 的一个细节源码中package-mac-app.sh在BUNDLE_ID以.debug结尾时会将SPARKLE_FEED_URL置空、AUTO_CHECKSfalse即调试构建默认不启用 Sparkle 自动更新避免调试包被更新机制干扰。用法从仓库根目录打包# 从仓库根目录 scripts/package-mac-app.sh # 自动选择身份未找到时报错 SIGN_IDENTITYDeveloper ID Application: Your Name scripts/package-mac-app.sh # 真实证书 ALLOW_ADHOC_SIGNING1 scripts/package-mac-app.sh # 临时签名权限不会持久化 SIGN_IDENTITY- scripts/package-mac-app.sh # 显式临时签名同样的限制 DISABLE_LIBRARY_VALIDATION1 scripts/package-mac-app.sh # 仅限开发的 Sparkle Team ID 不匹配解决方案更完整的真实证书示例含 Bundle ID 覆盖BUNDLE_IDai.openclaw.mac.debug \ SIGN_IDENTITYApple Development: Your Name (TEAMID) \ scripts/package-mac-app.sh推荐做法将export SIGN_IDENTITYApple Development: Your Name (TEAMID)或你的 Developer ID Application 证书写入 shell 配置文件如~/.zshrc、~/.bashrc这样每次构建都会自动使用你的证书签名。临时签名需要显式启用ALLOW_ADHOC_SIGNING1或SIGN_IDENTITY-且不建议用于权限测试。签名身份的自动选择逻辑当未显式设置SIGN_IDENTITY时scripts/codesign-mac-app.sh 中的select_identity()会按以下优先级自动挑选本机钥匙串中的可用证书Developer ID Application证书最优先Apple Distribution证书Apple Development证书任意有效的 codesigning 身份回退。如果完全没有可用证书设置了ALLOW_ADHOC_SIGNING1时脚本回退到临时签名-并打印警告临时签名的应用不会持久化 TCC 权限否则脚本报错退出提示设置SIGN_IDENTITY或启用ALLOW_ADHOC_SIGNING。临时签名Ad-hoc注意事项使用SIGN_IDENTITY-临时签名时脚本会自动禁用强化运行时Hardened Runtime即不传--options runtime。这是为了防止应用在尝试加载不共享相同 Team ID 的嵌入式框架如 Sparkle时崩溃。相关逻辑位于 scripts/codesign-mac-app.sh 的options_args分支只有非临时签名才追加--options runtime。同时临时签名还会破坏 TCC 权限持久化——每次构建都会生成新的签名macOS 会忘记之前的授权权限提示可能完全消失。如果你正在测试权限行为务必使用真实证书签名临时签名的构建仅适用于不需要权限的快速本地运行。另外注意临时签名时时间戳参数被强制设为--timestampnone即使设置了CODESIGN_TIMESTAMPon也不会启用。时间戳Timestamp配置默认CODESIGN_TIMESTAMPauto其行为如下见 scripts/codesign-mac-app.sh取值行为auto仅当签名身份为 Developer ID Application 时启用受信任时间戳--timestamp否则--timestampnoneon或1/yes/true强制启用时间戳off或0/no/false跳过时间戳适合离线调试构建时间戳对 Developer ID 签名很重要——它让签名在证书过期后仍可被验证是发布分发公证的前提调试构建则可以用CODESIGN_TIMESTAMPoff加快本地构建。Entitlements签名时注入了哪些权限声明codesign-mac-app.sh在签名时动态生成两份 entitlements plist主二进制与应用的 entitlementsAPP_ENTITLEMENTS包含com.apple.security.automation.apple-eventsAppleScript 自动化、com.apple.security.device.audio-input音频输入、com.apple.security.device.camera摄像头、com.apple.security.personal-information.location定位当DISABLE_LIBRARY_VALIDATION1时额外添加com.apple.security.cs.disable-library-validation脚本还准备了运行时 entitlements 模板allow-jit、allow-unsigned-executable-memory对应 JIT/动态代码场景。这些声明与 Info.plist 模板中的用途描述NSMicrophoneUsageDescription、NSScreenCaptureDescription、NSAppleEventsUsageDescription等见 apps/macos/Sources/OpenClaw/Resources/Info.plist相互配合构成应用向系统请求 TCC 权限的完整声明。深度签名主二进制、Sparkle 与整体包签名流程scripts/codesign-mac-app.sh依次处理主二进制Contents/MacOS/OpenClaw使用完整 entitlements 签名Sparkle.framework 深度签名遍历框架内所有 Mach-O 文件主框架、Autoupdate、Updater.app、XPCServices/Downloader.xpc、Installer.xpc等逐层签名其他嵌入式框架 / dylib对Contents/Frameworks下除 Sparkle 外的所有.framework、.dylib逐一签名整个应用包最后对.app本身签名含 entitlements。签名前会先执行xattr -cr清除扩展属性避免残留的陈旧签名导致验证失败。所有签名都使用--force强制覆盖。Team ID 审计签名完成后脚本会执行 Team ID 审计verify_team_ids读取应用包的TeamIdentifier然后遍历包内所有 Mach-O 文件若任何文件的 Team ID 与应用包不一致或应用包有 Team ID 而文件没有则报错退出。这样能保证包内所有可执行代码出自同一 Team ID避免混合签名导致的运行期问题。对开发构建而言常见的失败场景是Sparkle 框架的 Team ID 与应用不匹配例如嵌入式 Sparkle 由不同 Team ID 构建此时可设置DISABLE_LIBRARY_VALIDATION1同时需要配套的 disable-library-validation entitlement作为开发期绕行方案若确需跳过审计可设置SKIP_TEAM_ID_CHECK1脚本会打印提示并跳过。关于面板的构建元数据package-mac-app.sh会在打包时向 Info.plist 注入两项构建元数据Info.plist 键值来源OpenClawBuildTimestampISO8601 UTC 时间date -u %Y-%m-%dT%H:%M:%SZ打包时刻OpenClawGitCommit短 git 哈希git rev-parse --short HEAD不可用时为unknown当前提交此外还会写入CFBundleShortVersionString取自package.json版本可被APP_VERSION覆盖、CFBundleVersion默认取 git 提交计数GIT_BUILD_NUMBER可被APP_BUILD覆盖以及 Sparkle 相关的SUFeedURL、SUPublicEDKey、SUEnableAutomaticChecks。关于面板apps/macos/Sources/OpenClaw/AboutSettings.swift通过Bundle.main.object(forInfoDictionaryKey:)读取这些键展示版本号与构建号CFBundleShortVersionStringCFBundleVersion构建日期OpenClawBuildTimestamp经 ISO8601 解析后用本地化格式显示git 提交哈希OpenClawGitCommit未知时显示unknown是否为调试构建buildSuffix中通过#if DEBUG追加DEBUG后缀从而在界面上区分调试/发布渠道。因此每次修改代码后都应重新运行打包脚本以刷新这些元数据否则关于面板会显示过期信息。权限丢失 / 提示消失的恢复清单如果你使用了临时签名构建、更改了 Bundle ID 或应用路径导致权限提示消失可按以下步骤恢复完整说明见 macOS 权限退出应用在系统设置 → 隐私与安全性中移除该应用的条目从相同路径dist/OpenClaw.app重新启动应用并重新授予权限如果提示仍未出现用tccutil重置 TCC 条目后重试某些权限仅在完全重启 macOS 后才会重新出现。重置示例Bundle ID 按实际情况替换sudo tccutil reset Accessibility ai.openclaw.mac.debug sudo tccutil reset ScreenCapture ai.openclaw.mac.debug sudo tccutil reset AppleEvents保持权限稳定的三个要点固定路径运行、固定 Bundle ID、使用真实证书一致签名——这正是package-mac-app.sh默认配置所保证的。常见问题排查构建失败工具链或 SDK 不匹配macOS 应用构建依赖最新的 macOS SDK 与 Swift 6.2 工具链先检查xcodebuild -version与xcrun swift --version版本不符时更新 macOS/Xcode 后重新构建见 macOS 开发者设置。授权权限时应用崩溃多为 TCC 缓存损坏或签名不匹配导致可先tccutil reset All ai.openclaw.mac.debug仍不行时可临时更换BUNDLE_ID强制 macOS 以全新状态开始。临时签名应用启动即崩溃如 Abort trap 6检查是否因加载了 Team ID 不匹配的嵌入式框架如 Sparkle按上文 Team ID 审计一节处理。调试构建意外触发更新检查确认 Bundle ID 是否以.debug结尾以.debug结尾时脚本会自动关闭 Sparkle 订阅源与自动更新检查。与发布构建的关系本文介绍的是调试构建的签名流程scripts/package-mac-app.sh 默认BUILD_CONFIGdebug。正式发布时项目走独立的发布流水线使用 Developer ID Application 证书签名、BUILD_CONFIGrelease、universal 架构BUILD_ARCHSall、公证notarytool与 Sparkle appcast 发布详见 macOS 发布文档。调试签名与发布签名共用同一套签名脚本与 Team ID 审计机制理解了本文的调试签名流程也就理解了发布签名的大部分基础。赞分享人工智能大模型LLM 网关AI Agent即时通讯【免费下载链接】openclaw-zero-tokenOpenClaw: Use All Major AI Models NO API Token! Claude/ChatGPT/Gemini/DeepSeek/Doubao/Grok/Qwen/Manus/Kimi项目地址https://gitcode.com/gh_mirrors/op/openclaw-zero-token点击查看免费下载相关推荐OpenClaw macOS 调试构建签名指南稳定 TCC 权限的打包与 codesign 实践OpenClaw macOS 调试构建签名指南稳定 TCC 权限的打包与 codesign 实践 OpenClaw 的 macOS 菜单栏伴生应用管理通知、人工智能大模型LLM 网关AI Agent即时通讯OpenClaw macOS 调试构建签名指南稳定 Bundle ID、代码签名与 TCC 权限持久化OpenClaw macOS 调试构建签名指南稳定 Bundle ID、代码签名与 TCC 权限持久化 本文围绕 OpenClawmacOS 菜单栏个人 A人工智能AI Agent即时通讯后端本地部署语音OpenClaw macOS 权限TCC持久化指南签名、Bundle ID 与权限丢失恢复OpenClaw macOS 权限TCC持久化指南签名、Bundle ID 与权限丢失恢复 macOS 通过 TCCTransparency, Cons人工智能大模型LLM 网关AI Agent即时通讯上一篇在PC上解锁Switch游戏世界yuzu模拟器的魔法之旅下一篇Fast-GitHub终极指南10倍速下载GitHub资源的完整解决方案创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考