Skip to content

[bug] 升级后旧 TCC 权限未清除,用户需手动删除并重新授权 #441

@appergb

Description

@appergb

现象

用户从旧版本通过自动更新(plugin-updater)安装新版本后,macOS TCC 权限(Accessibility / Microphone)没有被自动重置

  • System Settings → 隐私与安全 中仍显示「已授权」
  • 但 OpenLess 实际无法使用全局热键(Accessibility 失效)和麦克风(Microphone 失效)
  • 用户必须手动从隐私设置里删除 OpenLess 条目,再重新授权一次才能正常使用

根因推测

macOS TCC 在以下情况会让「已授权」状态实际失效:

  1. 二进制签名 hash 变了但 bundle ID 一致 —— 系统认为是"同一个 app 的不同实例",授权挂在原 hash 上不再生效
  2. 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(手动删权限)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions