用途
该技能用于 SwiftUI 视图调试需要系统性调查的场景:在完成基础排查后问题仍然存在、出现间歇性 UI 问题(“heisenbug”)、需要追踪多个视图与模型之间的复杂依赖链、进行性能调查(视图更新过于频繁或耗时过长),以及排查预览崩溃或难以直接定位的失败原因。它的定位不是常规快速修复,而是诊断式排查。
主要能力
技能提供一套诊断决策树与五个诊断模式:
- 决策树:区分“视图不更新”“视图更新过于频繁”“间歇性问题”“预览崩溃”等情形,并指向对应诊断模式。
- 模式 D1:使用
Self._printChanges()分析视图 body 为何运行,解释@self changed、具体@State属性变化、环境值变化或完全无日志等输出含义。 - 模式 D2:使用 Instruments(Xcode 26 及以上的 SwiftUI 模板)录制 trace,分析 Long View Body Updates 与 Cause & Effect Graph,定位昂贵视图与过宽的依赖。
- 模式 D3:视图 identity 排查,检查条件分支中的视图、
.id()修饰符与ForEach标识符,处理@State意外重置、动画失效、输入框失焦等问题。 - 模式 D4:环境依赖检查,通过搜索
.environment(写入并结合 Instruments 判断频繁变化的环境值与过多的环境读取者。 - 模式 D5:Xcode 26 预览诊断,使用 Preview Diagnostics 按钮、崩溃日志与最小预览隔离问题。
技能还明确列出禁止行为,例如随机尝试属性包装器、用 .id(UUID()) 强制刷新掩盖根因、把间歇性问题当作偶然,以及在未理解原因的情况下交付。
使用方式
先建立基线环境:确认 xcodebuild -version 满足 Xcode 26+(SwiftUI Instrument 需要)、以 Release 配置构建、在排查预览问题时清理 DerivedData。随后按决策树进入对应诊断模式,使用 Self._printChanges() 做临时插桩(验证后必须移除,不得进入生产),或使用 Instruments 录制并分析 Cause & Effect Graph。
对于生产紧急情况,技能给出 90 分钟的分阶段协议:复现、用模式 D2 诊断、应用针对性修复、验证、带证据部署,并强调在用户报告真实存在时不要以“本地无法复现”或“大概是系统 bug”为由跳过排查。
适用场景
适用于 iOS/macOS 上的 SwiftUI 视图更新异常、间歇性 UI 问题、复杂数据流追踪、性能问题定位与预览崩溃排查,尤其是基础调试技能已应用但问题未解决的情况。
限制
Instruments 工作流要求 Xcode 26+ 与对应设备系统版本,且需 Release 模式构建才能获得可靠的性能数据,因此诊断存在环境前提。技能中的时间成本为流程预估,并非效果承诺。关于定价、收费、平台支持范围等事实暂未提供。