ce-test-xcode

ce-test-xcode

热门

使用 XcodeBuildMCP 在模拟器上构建并测试 iOS 应用。

2.4万Star
1943Fork
更新于 2026/8/3
SKILL.md
只读
名称
ce-test-xcode
描述

使用 XcodeBuildMCP 在模拟器上构建并测试 iOS 应用。

Xcode 测试 Skill

使用 XcodeBuildMCP 在模拟器上构建、安装并测试 iOS 应用,截取屏幕截图、抓取日志并验证应用行为。

Prerequisites

  • 已安装 Xcode 及命令行工具 (command-line tools)
  • 已连接 XcodeBuildMCP MCP 服务
  • 有效的 Xcode 项目或工作区 (workspace)
  • 至少有一个可用 iOS 模拟器

Workflow

0. Verify XcodeBuildMCP is Available

调用 XcodeBuildMCP 的 list_simulators 工具,确认 XcodeBuildMCP MCP 服务已正常连接。

不同平台的 MCP 工具名称会有所不同:

  • Claude Code: mcp__xcodebuildmcp__list_simulators
  • 其他平台:使用 XcodeBuildMCP 服务的 list_simulators 方法对应的 MCP 工具调用

如果未找到该工具或报错,提示用户添加 XcodeBuildMCP MCP 服务:

XcodeBuildMCP 未安装

通过 Homebrew 安装:
  brew tap getsentry/xcodebuildmcp && brew install xcodebuildmcp

或通过 npx(无需全局安装):
  npx -y xcodebuildmcp@latest mcp

然后将 "XcodeBuildMCP" 添加为 Agent 配置中的 MCP 服务,并重启 Agent。

在确认 XcodeBuildMCP 正常工作之前,切勿继续后续步骤。

1. Discover Project and Scheme

调用 XcodeBuildMCP 的 discover_projs 工具查找可用项目,再传入项目路径调用 list_schemes 获取可用 Scheme。

如果传入了参数,则使用该 Scheme 名称;如果参数为 "current",则使用默认/上次使用的 Scheme。

2. Boot Simulator

调用 list_simulators 查找可用模拟器。传入模拟器的 UUID 调用 boot_simulator 启动首选模拟器(推荐 iPhone 15 Pro)。

等待模拟器就绪后再继续后续操作。

3. Build the App

传入项目路径和 Scheme 名称调用 build_ios_sim_app

构建失败时:

  • 捕获构建错误
  • 向用户汇报具体的错误详情

构建成功时:

  • 记录构建好的 App 路径以供后续安装
  • 进入第 4 步

4. Install and Launch

  1. 传入构建好的 App 路径和模拟器 UUID 调用 install_app_on_simulator
  2. 传入 Bundle ID 和模拟器 UUID 调用 launch_app_on_simulator
  3. 传入模拟器 UUID 和 Bundle ID 调用 capture_sim_logs 开始抓取日志

5. Test Key Screens

针对应用中的每个核心界面:

截取屏幕截图:
传入模拟器 UUID 和具名文件名(如 screen-home.png)调用 take_screenshot

审查截图内容:

  • UI 元素渲染正常
  • 无可见的错误信息
  • 预期内容展示完整
  • 布局结构正确

检查日志寻找异常:
传入模拟器 UUID 调用 get_sim_logs。重点排查:

  • 崩溃 (Crash)
  • 异常 (Exception)
  • Error 级别的日志信息
  • 失败的网络请求

已知自动化限制 —— SwiftUI Text 链接:
通过 XcodeBuildMCP 或任何模拟器自动化工具模拟点击时,无法触发带有内联 AttributedString 链接的 SwiftUI Text 视图的手势识别器。点击操作虽提示成功,但实际上没有任何效果。这是系统平台的底层限制 —— 内联链接不会作为独立元素暴露在无障碍树 (Accessibility Tree) 中。当点击 Text 链接无可见响应时,提示用户在模拟器中手动点击。如果已知目标 URL,也可以使用 xcrun simctl openurl <device> <URL> 直接打开该链接作为兜底方案。

6. Human Verification (When Required)

当测试涉及需要设备交互的流程时,暂停并等待人工介入。

流程类型 询问内容
Sign in with Apple "请在模拟器上完成 Sign in with Apple"
推送通知 "请发送测试推送并确认是否展示"
应用内购买 (IAP) "请完成 Sandbox 内购"
相机/相册 "请授予权限并确认相机功能正常"
定位 "请允许定位权限并确认地图信息更新"
SwiftUI Text 链接 "请手动点击 [元素描述] —— 自动化点击无法触发内联文本链接"

使用当前平台的中断式提问工具向用户询问:Claude Code 中使用 AskUserQuestion(若 schema 未加载,先调用 ToolSearch 配合 select:AskUserQuestion);Codex 中使用 request_user_input;Antigravity CLI (agy) 中使用 ask_question;Pi 中使用 ask_user(需安装 pi-ask-user 扩展)。只有当 Harness 环境中不存在中断式工具或调用报错(例如 Codex 编辑模式)时,才回退到在聊天中输出数字选项 —— 绝不能仅仅因为需要加载 schema 就回退到聊天文本。切勿静默跳过提问:

需要人工验证

当前测试需要 [流程类型]。请完成以下操作:
1. [在模拟器上的操作]
2. [需要验证的内容]

功能是否正常?
1. 是 - 继续测试
2. 否 - 描述问题所在

7. Handle Failures

当测试失败时:

  1. 记录失败信息:

    • 截取错误状态的截图
    • 抓取控制台日志
    • 记录复现步骤
  2. 询问用户如何继续:

    测试失败:[界面/功能]
    
    问题:[描述]
    日志:[相关错误信息]
    
    下一步怎么做?
    1. 立即修复 - 排查问题、提出修复方案、重新构建并测试
    2. 跳过 - 继续测试其他界面
    
  3. 若选择“立即修复”: 排查问题、提出修复方案、重新构建并测试

  4. 若选择“跳过”: 标记为已跳过,继续后续测试

8. Test Summary

所有测试完成后,展示汇总信息:

## Xcode 测试结果

**项目:** [项目名称]
**Scheme:** [Scheme 名称]
**模拟器:** [模拟器名称]

### 构建结果:成功 / 失败

### 已测试界面:[数量]

| 界面 | 状态 | 备注 |
|--------|--------|-------|
| 启动页 | 通过 | |
| 首页 | 通过 | |
| 设置 | 失败 | 点击时崩溃 |
| 个人页 | 跳过 | 需要登录 |

### 控制台错误:[数量]
- [列出所有发现的错误]

### 人工验证项:[数量]
- Sign in with Apple:已确认
- 推送通知:已确认

### 失败项:[数量]
- 设置界面 - 页面跳转时崩溃

### 测试结论:[通过 / 失败 / 部分通过]

9. Cleanup

测试结束后:

  1. 传入模拟器 UUID 调用 stop_log_capture
  2. 可选:传入模拟器 UUID 调用 shutdown_simulator

Quick Usage Examples

# 使用默认 Scheme 测试
/ce-test-xcode

# 指定 Scheme 测试
/ce-test-xcode MyApp-Debug

# 修改代码后测试
/ce-test-xcode current

Integration with ce-code-review

当审查涉及 iOS 代码的 PR 时,ce-code-review 工作流可启动一个 Agent 来运行本 Skill,在模拟器上构建应用、测试关键界面并检查是否存在崩溃。