这次调试的产物包含复现脚本、目标 Scheme、模拟器与系统版本、修复前截图、相关日志或回溯、最小代码改动和修复后证据。验收者在同一模拟器条件下重新构建,按脚本操作,应能先看到旧问题,再在修复版本中得到预期结果。只看到编译成功,不能证明界面或崩溃问题已经解决。
确认机器和工具条件
这条流程需要 macOS、Xcode、已安装的 iOS Simulator 运行时和能够构建的工程。XcodeBuildMCP 当前说明要求 macOS 14.5 或更高、Xcode 16 系列或更高,使用 npm 安装时还需要 Node.js 18 或更高。版本会变化,安装前应再看项目说明。真机工具另需 Xcode 签名配置,本篇只处理模拟器。
在 ChatGPT 桌面端的 Codex 或 Codex CLI 中安装 Build iOS Apps 插件,或把 XcodeBuildMCP 作为 MCP 服务接入。Codex IDE 扩展当前不支持插件,IDE 用户应手动配置 MCP。插件会携带所需配置;手动接入时,除了默认 simulator workflow,还要按本次任务启用 ui-automation 与 debugging,重启连接后检查工具列表。工程还应给出依赖安装方式、工作区或项目文件、可用 Scheme、测试账号和故障描述。若问题依赖相机、蓝牙、推送、真机芯片或生产服务,模拟器可能不适合复现。
把原始报告改成动作脚本,写明初始数据、启动入口、每次点击或输入、故障出现位置、预期和实际。先不要让 Codex 改代码,目标是建立稳定基线。
测试账号和样例数据要能恢复。记录应用安装状态、系统语言、地区、文字大小、权限和网络条件。必要时复制一台干净模拟器作为基线,但不要随意清除仍需保留的调试数据。所有重置动作都写进复现脚本。

发现目标并建立基线
让 Codex 先列出工程、Scheme 和可用模拟器,选择与报告一致的运行时。清理只在确有缓存问题且得到同意时执行。先构建并启动应用,记录构建命令、应用标识、模拟器名称与系统版本。可见结果是应用能打开到已知初始页面,日志采集也已经开始。
随后让 XcodeBuildMCP 检查界面树,并按脚本执行点击、输入、滑动和等待。优先使用当前 runtime snapshot 里的 accessibility label、identifier 或 ref;导航、弹窗、搜索结果或布局一旦变化,就使用动作返回的新快照,或重新执行 snapshot_ui,不要复用旧 ref 或坐标。每个检查点保存截图,故障出现时同时保留当时界面树与日志。进程仍在运行但挂起时,可以直接附加 LLDB 取得线程和回溯。已经崩溃时要重新启动,并在下一次复现前附加。需要完整系统 crash report 时,先让调试器 detach,再由进程完成崩溃。不要在没有复现的情况下根据一段旧描述猜代码位置。
若第一次没有出现问题,逐项核对账号数据、系统权限、区域设置、动态字体、键盘、网络和启动方式。一次只改变一个条件。最终基线要么稳定复现,要么清楚写出仍缺少的真实条件,不能把“模拟器没有出现”写成问题已不存在。
日志采集要先限定进程、时间段和关心的子系统,减少系统噪声。截图和回溯可能含用户名、文件路径或请求内容,进入报告前应脱敏。若日志不足以支持判断,就保留原始文件路径和采集命令,不用推测填空。
复现失败本身也要记录条件和次数。它能帮助后续判断问题是否依赖时序或环境。

从证据收束到最小改动
用日志时间点和界面状态定位最窄的代码路径。为每个假设写一个可推翻的检查,例如值是否为空、回调是否执行、状态更新是否在主线程、导航目标是否存在。先读相关调用者与已有测试,再选择能解释全部证据的假设。
改动只处理已证实路径,避免顺手重构相邻模块。能够抽成纯逻辑的问题先补测试,UI 时序或系统交互则保留模拟器复现作为验收。重新构建到同一模拟器,从相同初始数据开始按原脚本重走,比较截图、日志和回溯。还要执行一条邻近正常路径,确认修复没有破坏返回、保存或重新进入。
修复后停止日志采集,整理命令、代码差异、测试结果和前后证据。若问题只在某个系统版本消失,报告要保留该边界。需要真机确认的硬件或性能行为单独列出,不能用模拟器结果替代。
最后再关闭并重开应用,确认结果不依赖调试器附加状态或内存中的旧数据。崩溃问题要在调试器已按记录 detach 的条件下检查系统是否生成新的诊断记录,界面问题则在相同视口保存同一节点截图,避免用不同页面证明修复。

风险与限制
Simulator 的硬件、性能、通知、相机和后台行为与真机不同。调试器也会改变时序,偶发竞态可能在附加 LLDB 后消失。自动点击能重放给定路径,无法覆盖所有手势和系统状态。发布前仍要在目标真机和实际签名构建上复核关键问题。
交付清单
- macOS、Xcode、运行时和 XcodeBuildMCP 条件已记录
- Scheme、模拟器、应用版本和初始数据明确
- 修复前复现脚本、截图与日志可以重走
- 代码改动只覆盖证据支持的路径
- 同一脚本在修复后通过并检查邻近路径
- 真机仍需验证的限制已经列明