Skip to content

fix(macos): 避免 Keychain 授权弹窗重复出现 - #990

Merged
H-Chris233 merged 1 commit into
Open-Less:betafrom
MarkShawn2020:fix/macos-keychain-single-prompt
Aug 23, 2026
Merged

fix(macos): 避免 Keychain 授权弹窗重复出现#990
H-Chris233 merged 1 commit into
Open-Less:betafrom
MarkShawn2020:fix/macos-keychain-single-prompt

Conversation

@MarkShawn2020

Copy link
Copy Markdown
Contributor

摘要

解决 macOS 启动读取安全凭据时,系统连续弹出两次 Keychain 授权的问题。

修复 / 新增 / 改进

  • macOS 将加密后的凭据直接保存为单个 credentials.v1 Keychain 条目,避免 manifest 与 chunk 分别触发一次系统授权。
  • 读取同时兼容单条目格式与旧版 chunk manifest;旧格式成功读取后先写入新条目,再清理旧 chunk。
  • 非 macOS 平台继续沿用 chunk 存储,保留 Windows 凭据长度兼容;未知 manifest 版本仍会拒绝读取。

兼容

  • 不包含:凭据明文格式、provider 配置或 UI 变更。
  • 对现有用户 / 本地环境 / 构建流程的影响:macOS 旧数据会在首次成功读取时自动迁移;迁移采用先写后删,失败时保留旧条目。

测试计划

  • 命令:CARGO_NET_GIT_FETCH_WITH_CLI=true CARGO_TARGET_DIR=/tmp/openless-keychain-pr-target cargo test --manifest-path openless-all/app/src-tauri/Cargo.toml --lib keyring_payload_ -- --nocapture
  • 结果:3 passed,0 failed,1228 filtered out。
  • 真实运行:开发版启动日志记录 migrated macOS credentials from manifest + 1 chunk(s) to one Keychain entry;主条目可读,credentials.v1.chunk.0 已不存在。
  • git diff --check 通过。
  • 全仓 cargo fmt -- --check:上游 beta 已存在与本 PR 无关的格式差异(包括 build.rs、Android 模块及 credentials.rs:3261);本 PR 未扩大这些差异。
  • 证据路径:~/Library/Logs/OpenLess/openless.log(2026-08-23 10:43:40.808969)。

@H-Chris233
H-Chris233 merged commit 2981bf2 into Open-Less:beta Aug 23, 2026
4 checks passed
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.

2 participants