Xcode Test Skill 用于在模拟器上构建、安装并测试 iOS 应用,依赖 XcodeBuildMCP 完成各项模拟器与构建操作,可截取屏幕截图、采集日志并验证应用行为。
用途 该技能面向 iOS 应用的构建与模拟器测试环节,帮助按固定流程检查应用在模拟器上的运行情况,包括界面渲染、错误信息、日志异常与崩溃等。
前置条件 使用前需要满足以下条件:已安装 Xcode 及命令行工具;已连接 XcodeBuildMCP MCP 服务器;存在有效的 Xcode 工程或 workspace;至少有一个可用的 iOS 模拟器。
工作流程 0. 验证 XcodeBuildMCP 可用性:调用其 list_simulators 工具确认 MCP 服务器已连接。不同平台的 MCP 工具名不同,例如 Claude Code 中为 mcp__xcodebuildmcp__list_simulators。若工具未找到或报错,需提示用户添加 XcodeBuildMCP MCP 服务器。安装方式:Homebrew 执行 brew tap getsentry/xcodebuildmcp && brew install xcodebuildmcp;或使用 npx(无需全局安装)执行 npx -y xcodebuildmcp@latest mcp。随后在 agent 配置中把 XcodeBuildMCP 添加为 MCP 服务器并重启 agent。在确认 XcodeBuildMCP 可用前不应继续。
-
发现工程与 scheme:调用 discover_projs 查找可用工程,再用 list_schemes 配合工程路径获取可用 scheme。若提供了参数则使用该 scheme 名;若为 current 则使用默认/上次使用的 scheme。
-
启动模拟器:调用 list_simulators 查找可用模拟器,使用模拟器 UUID 通过 boot_simulator 启动首选模拟器(推荐 iPhone 15 Pro),并等待模拟器就绪后再继续。
-
构建应用:调用 build_ios_sim_app 并传入工程路径与 scheme 名。失败时捕获构建错误、为每个构建错误创建 P1 待办、向用户报告具体错误详情;成功时记录构建产物的应用路径,进入下一步。
-
安装与启动:调用 install_app_on_simulator 传入构建产物路径与模拟器 UUID;调用 launch_app_on_simulator 传入 bundle ID 与模拟器 UUID;调用 capture_sim_logs 传入模拟器 UUID 与 bundle ID 开始日志捕获。
-
测试关键页面:对每个关键页面调用 take_screenshot 截图(使用描述性文件名,如 screen-home.png),检查 UI 元素渲染是否正确、是否可见错误信息、内容是否符合预期、布局是否正常。同时调用 get_sim_logs 检查日志中的崩溃、异常、错误级日志与失败的网络请求。
已知自动化限制 — SwiftUI Text 链接:通过 XcodeBuildMCP 或任何模拟器自动化工具进行的模拟点击,不会触发带内联 AttributedString 链接的 SwiftUI Text 视图上的手势识别器。点击会报告成功但没有实际效果,这是平台限制——内联链接不会在无障碍树中作为独立元素暴露。当点击 Text 链接无可见效果时,应提示用户在模拟器中手动点击;若已知目标 URL,可用 xcrun simctl openurl <device> <URL> 作为回退直接打开。
-
人工验证(必要时):当测试涉及需要设备交互的流程时,暂停等待人工输入,并说明需要人工验证。需要人工验证的流程包括:Sign in with Apple(请在模拟器上完成登录)、推送通知(发送测试推送并确认出现)、内购(完成沙盒购买)、相机/相册(授权并验证相机可用)、定位(允许定位并验证地图更新)、SwiftUI Text 链接(请手动点击对应元素,自动点击无法触发内联文本链接)。可使用平台的问题工具(如 Claude Code 的 AskUserQuestion、Codex 的 request_user_input、Gemini 的 ask_user)或给出编号选项并等待用户回答。
-
处理失败:测试失败时先记录失败——截取错误状态截图、捕获控制台日志、记录复现步骤,然后询问用户如何处理:立即修复(协助调试并修复)、创建待办(使用 todo-create 技能创建优先级 p1、描述为 xcode-{description} 的待办后继续)、跳过(记录为已跳过并继续)。若选择立即修复,则调查、提出修复方案、重新构建并重测。
-
测试总结:全部测试完成后输出总结,包含项目名、scheme 名、模拟器名、构建成功或失败、已测页面数量及每页状态(Pass/Fail/Skip 及备注)、控制台错误数量与列表、人工验证数量与结果、失败数量与列表、创建的待办数量及文件名,以及最终结果(PASS / FAIL / PARTIAL)。
-
清理:测试结束后调用 stop_log_capture 传入模拟器 UUID;可选调用 shutdown_simulator 传入模拟器 UUID。
快速使用示例 /test-xcode(使用默认 scheme) /test-xcode MyApp-Debug(测试指定 scheme) /test-xcode current(在修改后测试)
与 ce:review 集成 在审查涉及 iOS 代码的 PR 时,ce:review 工作流可派生一个 agent 来运行此技能,在模拟器上构建、测试关键页面并检查崩溃。