Skip to content

v2.9.1

Choose a tag to compare

@bcblr1993 bcblr1993 released this 10 Nov 09:02
· 1 commit to main since this release

AetherRoute v2.9.1 (Build 2026111002)

Highlights / 核心更新

  • Uninstall Completion Sheet Freeze & .terminateLater Deadlock Fix (TunnelManager, AppUninstallPerformer, AppUninstaller): Added TunnelManager.tearDownForUninstall() to cleanly stop any active tunnel/proxy, remove configuration/status observers, cancel reconnects/watchdogs/telemetry/LAN proxy, clear hasUnsavedTrafficSamples, and invalidate the cached NEVPNManager before deleting network extension configurations; replaced AppTermination.request() (NSApplication.terminate(_:)) with direct process exit (Darwin.exit(EXIT_SUCCESS)) inside AppUninstaller.finalizeUninstall(...), eliminating the 30-second .terminateLater modal freeze and termination cancellation on the completion sheet.
    • 彻底修复卸载完成弹窗卡死与退出取消:新增 TunnelManager.tearDownForUninstall() 专用隧道拆解流程并在 AppUninstaller.finalizeUninstall(...) 中采用直接进程退出(Darwin.exit(EXIT_SUCCESS)),消除已删除的网络扩展配置触发 applicationShouldTerminate .terminateLater 导致的 30 秒模态冻结与退出取消。
  • App Sandbox Direct Bundle Removal Fallback & Deferred Self-Container Cleanup (AppUninstaller, AppUninstallPerformer, AppUninstallView): When FileManager.default.trashItem is denied in App Sandbox due to lack of ~/.Trash/ access, AppUninstaller.finalizeUninstall now automatically falls back to direct bundle deletion (removeItem) via the /Applications/ read-write entitlement, backed by a detached /bin/sh post-exit cleanup helper; self-container preference removal (cleanHostResiduals()) is deferred until all windows are ordered out, window focus is restored after SecurityAgent prompts close, and the app automatically closes and deletes itself 800ms after completion.
    • 沙盒环境应用包直接清理回退与自动收尾退出:当沙盒限制直接移入废纸篓时自动回退使用 /Applications/ 权限直接删除应用包并配合脱离父进程的后台脚本兜底;将当前容器偏好清理推迟到隐藏窗口后执行,恢复系统扩展授权弹窗后的窗口焦点,并在卸载完成后 0.8 秒自动关闭与删除软件。

Verification & Release Qualification / 全量验收结论

  • 6-Dimension Tart VM Matrix (vm:macos27): 160 PASS / 0 FAIL / 50 SKIP across tun/rule, tun/global, tun/direct, transparent/rule, transparent/global, transparent/direct.
  • UI Responsiveness & Memory Budget Gate (vm:macos27, 300s showcase + 300s large):
    • showcase: p50 = 81.1 ms, p95 = 115.6 ms (<= 180 ms), max = 129.7 ms (<= 300 ms), memory median 67 MB / max 82 MB / growth +1 MB (<= 90 / 110 / +8 MB).
    • large (500 nodes / 10,000 rules / 2,000 connections): p50 = 82.2 ms, p95 = 115.6 ms (<= 180 ms), max = 127.9 ms (<= 300 ms), memory median 65 MB / max 80 MB / growth +2 MB (<= 90 / 110 / +8 MB).
  • Isolated Runtime Evidence (vm:macos27):
    • 50s TLS idle keep-alive reuse: PASS (TUN & Transparent Proxy).
    • 2 MiB large upload: PASS (TUN 2.836697s, Transparent Proxy 2.891221s).
    • 3-cycle / 6-phase NIC uplink switch recovery: PASS (TUN 1/2/0/0/1/1 s, Transparent Proxy 2/1/1/1/2/0 s, deadline 15s, zero manual reconnects).

Checksums / 校验信息

  • AetherRoute-2.9.1-build-2026111002-arm64.dmg:
    • SHA-256: c31cacdf3a3c65930e0616f8db8113df8097813576fa8063c1fa6efbe8e59463
    • Size: 29,950,139 bytes