news 2026/9/5 2:52:33

Orca macOS 权限与签名:entitlements 验证与发布签名完整指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Orca macOS 权限与签名:entitlements 验证与发布签名完整指南

Orca macOS 权限与签名:entitlements 验证与发布签名完整指南

【免费下载链接】orcaOrca is the ADE for working with a fleet of parallel agents. Run any coding agent with your own subscription. Available on desktop, mobile and VPS.项目地址: https://gitcode.com/GitHub_Trending/orca48/orca

Orca 是一个用于并行运行多 Agent 的 ADE(Agent 开发环境),支持桌面端、移动端和 VPS 部署。本文带你完整看懂 Orca 在 macOS 上的权限声明(entitlements)与发布签名机制:从权限清单到 hardened runtime、公证(Notarization),再到自动化校验脚本,帮助你快速理解它的构建与发布安全体系。

为什么 macOS 权限与签名这么重要

macOS 对第三方应用有三道"关卡",任何一道没过,用户要么无法打开应用,要么权限反复失效:

  1. 权限声明(Entitlements):应用要使用麦克风、摄像头、蓝牙等能力,必须先在清单里"报备",系统弹窗才可能合法弹出;
  2. 代码签名(Code Signing):发布版必须使用 Developer ID 证书签名并开启 Hardened Runtime,否则系统直接拒跑;
  3. 公证(Notarization):Apple 公证票据让权限授权(TCC)与"应用身份"稳定绑定——换一次构建,用户之前授予的文件夹访问权限不会莫名失效。

Orca 恰好把这三件事都做成了可验证的工程化流程。

两个 entitlements 文件:主应用与辅助应用

Orca 在resources/build/目录下维护了两份 macOS 权限清单:

文件用途
entitlements.mac.plist主应用 Orca.app 使用的权限清单
entitlements.computer-use.mac.plist"Orca Computer Use" 辅助应用使用的权限清单

主清单中声明了 9 项能力,每一项都对应一个具体的产品功能:

  • com.apple.security.automation.apple-events:允许终端启动的开发者工具自动化本地应用;
  • com.apple.security.device.audio-input:桌面语音捕获(语音输入);
  • com.apple.security.device.bluetooth/camera/usb:连接开发设备与模拟器;
  • com.apple.security.personal-information.location:位置信息;
  • com.apple.security.cs.allow-jitallow-unsigned-executable-memory:Electron / Chromium 运行所需;
  • com.apple.security.cs.allow-dyld-environment-variables:打包后二进制加载所需。

配套的用户可见说明(比如"为什么 Orca 要访问麦克风")写在打包配置的extendInfo里,见 config/electron-builder.config.cjs 中的NSMicrophoneUsageDescription等字段——用户看到弹窗时,文案来自这里。

自动化校验:为什么重复的权限键名是个坑

一个隐蔽的坑:plist 里出现重复的 key,plutil -lint能通过,但发布签名时codesign会直接拒绝

为此 Orca 编写了专门的校验脚本 verify-macos-entitlements.mjs,它逐行扫描 XML,按<dict>层级检查 key 是否重复,并报告"首次出现行号 / 重复行号":

pnpm verify:macos-entitlements

该命令已在 package.json 中注册。脚本只校验、不修改文件——一旦发现重复键就报错退出,确保问题在进入签名阶段前被拦下。

发布签名:三道硬性开关

打包行为集中在 config/electron-builder.config.cjs 中,由环境变量ORCA_MAC_RELEASE=1等开关控制(见 第22-43行)。正式发布时同时打开三个开关:

开关配置项作用
强制签名forceCodeSigning没有签名证书时构建直接失败,而不是悄悄降级成 ad-hoc 包
强化运行时hardenedRuntime开启 Hardened Runtime,是公证的前提
自动公证notarize签名后自动向 Apple 提交公证

对应的关键配置位于 macos 打包段:

  • entitlementsentitlementsInherit都指向 entitlements.mac.plist,保证主应用和所有子进程继承同一份权限;
  • 注释中特别解释了为什么开发渠道构建也要公证:TCC 把授权锚定在"标识符 + 团队"上,与代码哈希无关;没有公证票据,每 24 小时一次的构建都会让用户已授予的 Documents/Desktop/Downloads 访问权限静默失效。

签名前必须先签"内嵌应用"

Orca 的 macOS 包里还嵌套了几个独立可执行体(Orca Computer Use.apporca-notification-statusorca-keyboard-layout)。构建脚本在打包前先用codesign --force --deep --sign <identity> --options runtime --timestamp为它们签名并立即--verify --strict校验,再让外层 Orca.app 封存。相关实现见 signMacComputerUseHelper 与 codesignArgs。

签名身份的选择逻辑见 findInstalledMacSigningIdentity:发布构建只接受Developer ID ApplicationApple Distribution;本地开发才允许Apple Development,且回退到 ad-hoc(-)签名。

一键发布构建与所需凭据

发布入口是一条命令(见 package.json):

pnpm build:mac:release

它会先运行 verify-macos-release-env.mjs 做"凭据守门"——缺少任何一项都立即失败,避免 CI 日志看起来成功、实际产物却是未签名应用。所需环境变量:

变量用途
APPLE_ID/APPLE_APP_SPECIFIC_PASSWORD公证账户与专用密码
APPLE_TEAM_IDApple 开发者团队 ID
CSC_LINK/CSC_KEY_PASSWORDDeveloper ID 证书(p12 压缩包及密码)

本地调试则使用pnpm build:mac做 ad-hoc 构建,无需任何 Apple 凭据即可在开发机上启动验证。

快速上手:验证你的构建

在你自己的 Orca 工作副本中,按顺序执行以下检查,即可复现发布流水线的核心验证:

pnpm verify:macos-entitlements # 1. 检查 entitlements 无重复键 pnpm build:mac # 2. 本地 ad-hoc 构建 codesign --verify --deep --strict \ --verbose=2 dist/Orca.app # 3. 手动校验产物签名

如果你想进一步理解权限如何映射到产品功能,建议阅读以下资料:

  • 权限清单:resources/build/entitlements.mac.plist
  • 打包与签名配置:config/electron-builder.config.cjs
  • entitlements 校验脚本:config/scripts/verify-macos-entitlements.mjs
  • 发布环境守门脚本:config/scripts/verify-macos-release-env.mjs

常见问题(FAQ)

Q1:本地构建不签名能打开吗?可以。本地构建走 ad-hoc 路径,不启用 hardened runtime 和公证,适合快速验证。

Q2:为什么更新后文件夹权限有时会"失效"?macOS 的 TCC 授权绑定应用身份。Orca 通过公证票据让身份在版本间保持稳定(见 配置注释),这是它连开发渠道构建也坚持公证的原因。

Q3:发布构建为何"宁败勿降级"?forceCodeSigning保证签名不可用时构建直接报错,而不是生成一个"看起来能发"的 ad-hoc 产物混入发布日志。

总结

Orca 的 macOS 发布体系可以用三句话概括:权限清单集中管理并用自动化脚本拦截重复键错误;内嵌辅助应用先签后封、签后必验;发布构建强制 Developer ID 签名 + Hardened Runtime + 公证,缺一即失败。这套机制既保证了用户权限授权跨版本稳定,也让每一次发布都有可验证的安全底线。

【免费下载链接】orcaOrca is the ADE for working with a fleet of parallel agents. Run any coding agent with your own subscription. Available on desktop, mobile and VPS.项目地址: https://gitcode.com/GitHub_Trending/orca48/orca

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/31 23:01:37

事务方案选型看一致性代价

事务方案选型看一致性代价在微服务架构与跨库数据一致性的建设中&#xff0c;分布式事务选型永远是争议最多的工程话题之一。很多团队在评估开源分布式事务框架&#xff08;如 Seata、DTM 等&#xff09;时&#xff0c;常常被功能清单&#xff08;Feature List&#xff09;所吸…

作者头像 李华
网站建设 2026/9/5 2:52:24

Python实现模拟退火算法:原理、调优与TSP问题实战

1. 项目概述&#xff1a;当优化难题遇上“退火”智慧 如果你正被一个需要从成百上千个可能性中找出“最优解”的问题所困扰&#xff0c;比如规划一条走遍所有城市且总路程最短的旅行路线&#xff0c;或者为工厂里的机器安排最高效的生产顺序&#xff0c;那么“模拟退火算法”很…

作者头像 李华
网站建设 2026/8/31 14:03:37

Deep-Live-Cam 安装教程:一张照片,3 次点击跑通实时 AI 换脸

Deep-Live-Cam 安装教程&#xff1a;一张照片&#xff0c;3 次点击跑通实时 AI 换脸 【免费下载链接】Deep-Live-Cam real time face swap and one-click video deepfake with only a single image 项目地址: https://gitcode.com/GitHub_Trending/de/Deep-Live-Cam Dee…

作者头像 李华
网站建设 2026/9/2 7:45:09

STM32 ADC从原理到实战:多通道、DMA与滤波算法全解析

1. 项目概述&#xff1a;为什么ADC是嵌入式开发的“感官”核心&#xff1f; 玩过STM32的朋友都知道&#xff0c;光会点个灯、调个串口&#xff0c;那只是入门。想让你的单片机真正“感知”世界&#xff0c;ADC&#xff08;模数转换器&#xff09;是绕不开的一道坎。无论是测量电…

作者头像 李华
网站建设 2026/9/1 9:40:58

DeepSeek+Pi vs Claude Code:模型可替换性背后的工程逻辑

这段时间&#xff0c;开发者圈子里有一个组合被反复拿出来跟 Claude Code 对比&#xff1a;DeepSeek Pi。无论你是在技术群里看到“用这套组合写代码省下了不少预算”&#xff0c;还是在某个环境配置帖里搜到 DeepSeek harness、Pi agent、Claude Code 接入 DeepSeek 这样的关…

作者头像 李华