feat(macos): add verified update download handoff - #355
Conversation
|
复核意见:方向正确,应该推进,但需要先 rebase。 现状确认:菜单里的更新入口最终就是 你在描述里给的理由是:当前 macOS 产物是 ad-hoc 签名的,digest 和 checksum 与 Release 共享同一个信任域,不构成独立的发布者签名,所以只做引导式交接而不是静默自更新。这个判断是对的,我同意保留手动替换那一步。 需要调整三点: 1. 基线过时,而且会带回一个刚修掉的 bug。 本 PR 基于 v1.5.14,main 已经是 v1.5.16,并且 #387 修了更新检查的一处真问题:客户端此前优先执行已部署引擎里的 2. 和 #279 绑定看。 有了 Developer ID 签名 + 公证之后,「静默自更新」的安全前提才成立;在那之前引导式交接就是正确的上限。其中 GitHub 的 3. Windows 记一笔。 你标了 out of scope,同意,但 Windows 的更新入口同样���是打开 Releases 页,而且 顺带一个刚落地的东西对你有用:CI 现在会把 Setup.exe 和 DMG 一起作为 artifact 上传(此前只有 DMG)。你的验收里提到「没有比分支版本更新的公开 release,所以真实的菜单→下载路径无法冒烟」——artifact 至少能让你拿到可安装产物做半程验证。 请 rebase 到 #387 之后,我再做完整复核。 |
Summary
SHA256SUMS.txt, DMG integrity, mounted app bundle identity/version, embedded engine version, and code-signature integrity before opening the DMG/Applications, removes quarantine, or silently installs an unsigned packageContext and scope
This builds on #348, which added the background update check and notification but only opened GitHub Releases. The background check remains metadata-only; downloading starts only after the user confirms.
The branch is synced with
mainat public v1.5.14 through a regular merge commit; no published branch history was rewritten.Windows is deliberately out of scope. This PR does not close #276 or #237; the PowerShell 5.1 parsing and Setup handoff need a separate review surface.
The current public macOS artifacts are ad-hoc signed. The API digest and checksum asset protect integrity and wrong-package handling, but they share the GitHub Release trust domain and are not an independent publisher signature. For that reason this is a verified guided handoff, not a silent self-updater.
Validation
v1.5.14)git diff --check1.5.14Remaining CI / smoke evidence
This Mac has Command Line Tools but not a full matching Xcode platform, so SwiftPM/XCTest and the packaged DMG build remain CI requirements. Signed-runtime integration and Doctor were also intentionally skipped locally. There is no newer public release than the branch version, so the real menu-to-newer-release download/open path must be smoke-tested when such a release exists. Automated tests intentionally never launch an installer.