现象
用户从旧版本通过自动更新(plugin-updater)安装新版本后,macOS TCC 权限(Accessibility / Microphone)没有被自动重置:
- System Settings → 隐私与安全 中仍显示「已授权」
- 但 OpenLess 实际无法使用全局热键(Accessibility 失效)和麦克风(Microphone 失效)
- 用户必须手动从隐私设置里删除 OpenLess 条目,再重新授权一次才能正常使用
根因推测
macOS TCC 在以下情况会让「已授权」状态实际失效:
- 二进制签名 hash 变了但 bundle ID 一致 —— 系统认为是"同一个 app 的不同实例",授权挂在原 hash 上不再生效
- ad-hoc 签名(无 Apple Developer ID)每次 build 都是新 hash,最容易触发
仓库当前 scripts/build-mac.sh 走 ad-hoc 签名(无 APPLE_CERTIFICATE env),release-tauri.yml 在有 Apple secrets 时走 Developer ID 公证、没 secrets 时也回落 ad-hoc。如果发布 Beta 用 ad-hoc,每次更新都触发这个问题。
期望
任一方案:
- 方案 A(最干净):发版用真 Apple Developer ID 签名 + 公证,TCC 视作"同一 app"权限继承
- 方案 B(应用内引导):启动时检测 TCC 状态,若 ABTesting/HID API 返回失败但
tccutil 显示已授权 → 弹窗引导用户「重置权限」(提供一键 tccutil reset Accessibility com.openless.app && tccutil reset Microphone com.openless.app 按钮)
- 方案 C(release notes 文案兜底):每个 Beta release notes 都加一条「如果升级后快捷键失灵,请到隐私设置删除 OpenLess 并重新授权」
上下文
- 反馈来源:维护者本人测试 1.3.2-2 Beta 升级时遇到
- 优先级:影响所有 Beta 升级用户的可用性,但有简单 workaround(手动删权限)
现象
用户从旧版本通过自动更新(plugin-updater)安装新版本后,macOS TCC 权限(Accessibility / Microphone)没有被自动重置:
根因推测
macOS TCC 在以下情况会让「已授权」状态实际失效:
仓库当前
scripts/build-mac.sh走 ad-hoc 签名(无APPLE_CERTIFICATEenv),release-tauri.yml在有 Apple secrets 时走 Developer ID 公证、没 secrets 时也回落 ad-hoc。如果发布 Beta 用 ad-hoc,每次更新都触发这个问题。期望
任一方案:
tccutil显示已授权 → 弹窗引导用户「重置权限」(提供一键tccutil reset Accessibility com.openless.app && tccutil reset Microphone com.openless.app按钮)上下文