Skip to content

fix(macOS): release closed-window models despite retained SwiftUI hosts - #124

Merged
gewill merged 3 commits into
developfrom
codex/93-window-lifetime-fix
Sep 17, 2026
Merged

gewill merged 3 commits into
developfrom
codex/93-window-lifetime-fix

Conversation

@gewill

@gewill gewill commented Sep 17, 2026

Copy link
Copy Markdown
Owner

问题与修复

Refs #93。macOS 关闭原生窗口后,观察/录屏条件下 SwiftUI 宿主仍可能存活,连带保留窗口业务模型。另有可复现的应用引用链:原生 MainWindowReaderonAttach 回调 → SwiftUI 视图/StateObject → 模型。

  • 只在对应窗口关闭时移除 Router/RootView 业务子树,下一主队列回调通过弱宿主更新布局;保留原生 WindowGroup。
  • reader 拆除时释放回调,关闭时立即取消该窗口的转换与导入;不清空正文掩盖模型存活。
  • 新增模型释放门禁:协议完整但 +20s 对象未释放时返回 4,并保留原始证据。

同机真实运行对照

macOS 27.0 (26A428) / Xcode 27.0 (27A266a),Release,English / Light / 默认字号。单窗内容区 1024×768pt,录制画布 1280×720px;原生级联位置略有差异。只录目标应用,无音频。产品源码:基线 f4b71e5,最终修复 8228f4e;证据提交 f53a0e7

验证 修改前 修改后
三轮分别关闭两个新增窗口,+5/+20s 活模型数 3 / 5 / 7 1 / 1 / 1
最终零窗 +5/+20s 7 / 7 0 / 0
同阶段真实截图 before after
完整交互录像 before.mp4 after.mp4

媒体通过 gh api 上传并验证 Git blob SHA。界面没有视觉改版,截图不替代对象释放日志。

验证日志与边界

  • 最终候选完整 1/10 MiB 文稿、实际转换调用中关窗、保留窗口活动转换、五份导出逐字节校验、成功计次 6/最终预约 0、取消无迟到回写全部通过;最终模型为 0。
  • 原生组件刻意保留宿主及嵌套 reader,覆盖释放、隐藏恢复、无关/重复关闭通知和新窗创建;缺少 reader 清理时测试真实失败,修复后通过。
  • 70 项相关 Python 检查、项目解析、编辑器/滚动/输入法/undo、窗口几何、布局、额度回归与 actionlint 通过,Release 构建通过。
  • 完整报告、来源哈希、原始日志、失败候选与清理记录。初始候选最终仍保留首模型和一次录制启动失败均保留,没有挑选后改写结果。

GitHub 检查针对最终提交重新运行,另执行 macOS 15 原生文稿协议。最低系统、签名 Cloud 包及 #19 系统入口验收仍保留;本轮不发布。系统宿主本身仍可能存活,不宣称已确定其外部完整强持有链,也不据诊断轮的 RSS 或耗时宣称速度/内存降幅。用户主工作区修改保留,VoiceOver 未更改,隔离偏好已核对恢复。

@gewill
gewill marked this pull request as ready for review September 17, 2026 07:27
@gewill
gewill merged commit efd591d into develop Sep 17, 2026
16 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.

1 participant