Skip to content

fix(permissions): 补齐麦克风授权与 macOS 音频签名权限 - #822

Merged
yaojin3616 merged 1 commit into
mainfrom
fix-desktop-media-permissions
Oct 30, 2026
Merged

yaojin3616 merged 1 commit into
mainfrom
fix-desktop-media-permissions

Conversation

@yaojin3616

Copy link
Copy Markdown
Contributor

问题与改动

macOS 的语音输入需要同时具备 Electron 放行、系统麦克风授权和 Hardened Runtime 音频输入 entitlement。现有主分支虽然放行了 media,但没有限制媒体类型,也没有显式声明音频输入签名权限及麦克风用途。

对照官方 Desktop f3803c9 补齐:

  • 仅主应用窗口的可信主 frame 可请求 audio-only media;拒绝摄像头、混合/空/未知类型、外部来源和其他 loopback 端口。
  • macOS 检查系统麦克风授权,调用 askForMediaAccess,拒绝与异常均有失败出口;关闭/导航后的待决请求不会继续获准。
  • Session 只注册一次 handler,逐窗口记录权限;连接手机等辅助窗口不会覆盖主窗口策略,辅助窗口默认不能录音。
  • 主程序和 Helper 使用同一显式 entitlements 文件,新增 audio-input,保留原有 JIT/原生模块签名要求;声明 NSMicrophoneUsageDescription。
  • 公证前读取实际签名的主程序/Helper 和生成的 Info.plist,缺失麦克风能力则失败。
  • 保留 clipboard-sanitized-write / notifications 白名单;没有照搬上游对非 media 权限的全部放行,现有安全协议配置无需调整。

验证

  • 通过:7 个相关测试文件、134 个用例(window-permissions、macos-permissions、notarize-macos、runtime、harness-boot-bridge、release-ci-scheduling、release)。
  • 通过:npm run typecheck、npm run build、node scripts/verify-target.mjs darwin arm64、plutil -lint、git diff --check。
  • 通过:独立只读审查;锁定 Electron 43 的原生 mediaType/mediaTypes 映射已对照源码核验。
  • 完整 npm test 已执行但未通过:当前工具沙箱拒绝 posix_openpt、嵌套 sandbox-exec 等,另有原生子进程相关失败,未将其报告为全部通过;申请较宽权限重跑等待超时,未启动。仍需在正常原生 CI 环境完成全量回归。
  • 初次 npm ci 的 Electron 下载失败;使用官方锁定 checksums 的镜像恢复后,完整 postinstall(补丁、品牌资源、Electron 安装)成功,依赖版本及锁文件未变。

新增行为回归:媒体类型、窗口/frame/origin、OS 授权成功/拒绝/异常、窗口生命周期和共享 Session。macOS 夹具使用锁定 electron-builder 的实际 entitlement 选择逻辑和系统 codesign,对主程序/Helper 做真实 Hardened Runtime 签名,验证缺少 Helper 权限会被拦截。Windows 回归配置纳入窗口权限测试。

验收边界

没有替换本机已安装应用,也没有重置系统麦克风授权或生产 Profile。完整签名/公证安装包的首次授权、真实录音到转写及 Windows 麦克风隐私开关仍须原生验收;签名夹具与策略测试不替代这些验收。步骤已记录在 release runbook。

@yaojin3616
yaojin3616 merged commit 1a6212e into main Oct 30, 2026
6 of 7 checks passed
@yaojin3616
yaojin3616 deleted the fix-desktop-media-permissions branch October 30, 2026 09:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant