Surge Shallow 2.2.1
关键修复
- 修复点击“立即更新并重启”后一直卡在“即将重新启动”的问题。更新器现在会先关闭更新日志 Sheet,确认窗口不再挂载 modal sheet,再请求 AppKit 退出。
- 如果旧版本仍未退出,安装 helper 会先给应用 5 秒优雅退出时间,再只针对已经核验实际可执行路径的精确 PID 依次使用 SIGTERM 和 SIGKILL 兜底。
- 新增进程身份保护:PID 对应的可执行文件发生变化、lsof 枚举异常或身份无法确认时,更新会失败关闭,不会继续替换 App。
- 新增多实例保护:普通路径、带参数或符号链接启动的第二实例都会被识别;目标 App 移到备份后还会持续复扫,并在复制前进行最终扫描。发现竞态实例时会原样回滚旧 App,绝不开始覆盖。
- 加固软件更新测试隔离,临时目录、Application Support、UserDefaults 和网络桩均使用独立测试范围,不会启动真实 App 或修改用户的 Surge 配置。
安装提示
v2.2.0 自身仍包含本次修复前的更新器,因此从 v2.2.0 点击更新可能停在“即将重新启动”。请手动下载本次 ZIP,退出 Surge Shallow 后将 App 替换到 /Applications。完成这一次手动升级后,从 v2.2.1 开始后续应用内更新可正常使用。v2.1.0 及更早版本同样需要手动安装。
验证
- swift test:120 项测试完成,默认跳过 1 项正式 GitHub Release 联网测试,0 失败;Release 发布后该联网测试已单独运行并通过。
- 软件更新专项 6 条真实进程回归通过,包括 modal Sheet 状态、TERM 到 SIGKILL、符号链接实例、枚举失败关闭、移动后竞态回滚和复制前最终扫描。
- Release 构建通过 warnings-as-errors。
- 打包应用与 ZIP 解压后的应用均为 2.2.1 (18),并通过 codesign 深度严格校验。
- /Applications 中的最终 App 已使用 --verification-mode 实际启动,设置页显示 2.2.1 (18),Command-Q 正常退出。
- relay.json、modules.json、settings.json、script-hub-state.json 和 update-history.json 在 GUI 验收前后哈希完全一致。
- 已从公开 Latest Release 重新下载资产;远端大小与 GitHub digest 均和本地 ZIP 完全一致。
下载与校验
下载 Surge-Shallow-2.2.1-macOS.zip,解压后将 Surge Shallow.app 移入 /Applications。
SHA-256:726ca1f6e5408c302fecab4c4d0aafc30ebc40f2619cabe19ea7f8beff73ec14
文件大小:25,149,859 字节。