ce-test-xcode

ce-test-xcode

熱門

使用 XcodeBuildMCP 在模擬器上建置與測試 iOS 應用程式。

2.4萬星標
1943分支
更新於 2026/8/3
SKILL.md
唯讀
名稱
ce-test-xcode
描述

使用 XcodeBuildMCP 在模擬器上建置與測試 iOS 應用程式。

Xcode 測試 Skill

使用 XcodeBuildMCP 在模擬器上建置、安裝與測試 iOS 應用程式,並支援截圖、擷取日誌以及驗證應用程式行為。

前置需求

  • 已安裝 Xcode 及其命令列工具(command-line tools)
  • 已連接 XcodeBuildMCP MCP 伺服器
  • 有效的 Xcode 專案(project)或工作區(workspace)
  • 至少一台可用的 iOS 模擬器

工作流程

0. 驗證 XcodeBuildMCP 是否可用

透過呼叫 XcodeBuildMCP MCP 伺服器的 list_simulators 工具,檢查伺服器是否已成功連接。

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

接著在 Agent 設定檔中將 "XcodeBuildMCP" 新增為 MCP 伺服器,並重啟 Agent。

在確認 XcodeBuildMCP 能正常運作前,請繼續執行後續步驟。

1. 探索專案與 Scheme

呼叫 XcodeBuildMCP 的 discover_projs 工具尋找可用的專案,接著傳入專案路徑呼叫 list_schemes 以取得可用的 scheme。

若使用者有提供參數,請使用該 scheme 名稱;若參數為 "current",則使用預設或上次使用的 scheme。

2. 啟動模擬器

呼叫 list_simulators 尋找可用的模擬器。傳入模擬器的 UUID 並透過 boot_simulator 啟動偏好的模擬器(建議使用 iPhone 15 Pro)。

請等待模擬器完全啟動完成後再繼續。

3. 建置應用程式

傳入專案路徑與 scheme 名稱並呼叫 build_ios_sim_app

若建置失敗:

  • 擷取建置錯誤訊息
  • 將詳細的錯誤資訊回報給使用者

若建置成功:

  • 記錄建置好的應用程式路徑以供後續安裝
  • 繼續進行步驟 4

4. 安裝與啟動

  1. 傳入建置好的應用程式路徑與模擬器 UUID,呼叫 install_app_on_simulator
  2. 傳入 bundle ID 與模擬器 UUID,呼叫 launch_app_on_simulator
  3. 傳入模擬器 UUID 與 bundle ID,呼叫 capture_sim_logs 開始擷取日誌

5. 測試主要畫面

針對應用程式中的每個主要畫面:

擷取螢幕截圖:
傳入模擬器 UUID 及具有描述性的檔名(例如 screen-home.png),呼叫 take_screenshot

檢查螢幕截圖:

  • UI 元件是否正確繪製
  • 未顯示任何錯誤訊息
  • 是否展示了預期的內容
  • 版面配置(Layout)是否正確

檢查日誌是否有錯誤:
傳入模擬器 UUID 呼叫 get_sim_logs。檢查是否有以下狀況:

  • 應用程式閃退(Crash)
  • 異常(Exception)
  • Error 層級的日誌訊息
  • 失敗的網路請求

已知的自動化限制 — SwiftUI Text 連結:
模擬點擊(無論是透過 XcodeBuildMCP 或其他模擬器自動化工具)無法觸發含有內嵌 AttributedString 連結的 SwiftUI Text 視圖手勢辨識器。點擊操作會回報成功,但不會產生任何效果。這是平台本身的限制 — 內嵌連結並未作為獨立元件暴露在無障礙功能樹(accessibility tree)中。當點擊 Text 連結沒有產生任何視覺回應時,請提示使用者在模擬器中手動點擊。若已知目標 URL,可使用 xcrun simctl openurl <device> <URL> 直接開啟作為替代方案。

6. 人工驗證(必要時)

當測試流程涉及需要實體/裝置互動的操作時,請暫停並等待人工輸入。

流程類型 請詢問事項
使用 Apple 帳號登入 "請在模擬器上完成「使用 Apple 帳號登入」"
推播通知 "請發送測試推播並確認其正常顯示"
應用程式內購買 "請完成沙盒(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. 處理測試失敗

當測試失敗時:

  1. 記錄失敗資訊:

    • 截取錯誤狀態的螢幕截圖
    • 擷取主控台日誌(console logs)
    • 記錄重現步驟
  2. 詢問使用者如何處理:

    測試失敗:[畫面 / 功能]
    
    問題:[描述]
    日誌:[相關錯誤訊息]
    
    要如何繼續?
    1. 立即修復 - 進行除錯、提出修復方案,重新建置並重新測試
    2. 跳過 - 繼續測試其他畫面
    
  3. 若選擇「立即修復」: 排查原因、提出修復建議、重新建置並重新測試

  4. 若選擇「跳過」: 標記為跳過並繼續執行

8. 測試摘要

所有測試完成後,呈報測試摘要:

## Xcode 測試結果

**專案:** [專案名稱]
**Scheme:** [scheme 名稱]
**模擬器:** [模擬器名稱]

### 建置狀態:成功 / 失敗

### 已測試畫面數:[數量]

| 畫面 | 狀態 | 備註 |
|--------|--------|-------|
| 啟動頁 | 通過 | |
| 首頁 | 通過 | |
| 設定 | 失敗 | 點擊時閃退 |
| 個人檔案 | 跳過 | 需要先登入 |

### 主控台錯誤數:[數量]
- [列出所有找到的錯誤訊息]

### 人工驗證項目:[數量]
- 使用 Apple 帳號登入:已確認
- 推播通知:已確認

### 失敗項目:[數量]
- 設定畫面 - 切換頁面時閃退

### 最終結果:[PASS / FAIL / PARTIAL]

9. 清理善後

測試結束後:

  1. 傳入模擬器 UUID 並呼叫 stop_log_capture
  2. (可選)傳入模擬器 UUID 並呼叫 shutdown_simulator

快速使用範例

# 使用預設 scheme 進行測試
/ce-test-xcode

# 指定特定的 scheme 進行測試
/ce-test-xcode MyApp-Debug

# 在修改程式碼後進行測試
/ce-test-xcode current

與 ce-code-review 整合

在審查涉及 iOS 程式碼的 PR 時,ce-code-review 工作流程可派生一個 Agent 來執行此 Skill,在模擬器上建置、測試主要畫面,並檢查是否有閃退情況。