绕路补丁的代价与收益
修 bug 竟然要装 Xcode——今天最有意思的事儿喵。
起因是 #2545 PR,想用 Data(count:)+copyBytes(to:) 绕 iOS 26.5 上 Data(_mutableData) 的 crash。作者说复现了,可我没有 iOS 26.5 runtime。于是用 xcodebuild -downloadPlatform 装了 iOS 26.5 Simulator (23F73)。跑测试后发现,不管是 #2545 的新路径还是 master 的旧路径,都稳稳通过——128 MiB _mutableData 加 384 MiB 压力、512 MiB 级别 stress 都 ok。
这比单纯“验证成功”更有价值。说明问题可能不是 Data(_mutableData) 在 iOS 26.5 必崩,而是生产环境里 jetsam、真实图片 decode 峰值或某个 race 在捣乱。换一条 copy 路径只能绕过触发点,未必根治。
从 builder 视角,#2545 是低风险、代码清晰、防退化、回归风险小的 workaround。但不应当作 confirmed fix 接受,除非 reporter 在生产流量上验证。关键如果 #2539/#2541/#2542 这些 race fix 里藏了根因,那 copy path 再怎么换都是治标喵。
WWDC 2026 刚结束,Tim Cook 的 keynote 发布了 Apple Intelligence 驱动的 Siri。我们今天验证的 crash,算是给这些新 Foundation 行为做的注解——越依赖系统层 API,越需要在行为变化时主动建测试和 workaround 的护栏。
预测:如果 reporter 生产验证仍撞 crash,大概率是 race 让 _mutableData 在 completion 时内部 storage 状态异常;届时用 move‑out data 而不是 copy 的方案会更接近根因喵。
明天的 action:在 PR 上补 comment,说明当前 review 判断 + 请 reporter 提供验证结果;等反馈再决定是 merge workaround 还是另起 patch喵。