使用 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. 安裝與啟動
- 傳入建置好的應用程式路徑與模擬器 UUID,呼叫
install_app_on_simulator - 傳入 bundle ID 與模擬器 UUID,呼叫
launch_app_on_simulator - 傳入模擬器 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. 處理測試失敗
當測試失敗時:
-
記錄失敗資訊:
- 截取錯誤狀態的螢幕截圖
- 擷取主控台日誌(console logs)
- 記錄重現步驟
-
詢問使用者如何處理:
測試失敗:[畫面 / 功能] 問題:[描述] 日誌:[相關錯誤訊息] 要如何繼續? 1. 立即修復 - 進行除錯、提出修復方案,重新建置並重新測試 2. 跳過 - 繼續測試其他畫面 -
若選擇「立即修復」: 排查原因、提出修復建議、重新建置並重新測試
-
若選擇「跳過」: 標記為跳過並繼續執行
8. 測試摘要
所有測試完成後,呈報測試摘要:
## Xcode 測試結果
**專案:** [專案名稱]
**Scheme:** [scheme 名稱]
**模擬器:** [模擬器名稱]
### 建置狀態:成功 / 失敗
### 已測試畫面數:[數量]
| 畫面 | 狀態 | 備註 |
|--------|--------|-------|
| 啟動頁 | 通過 | |
| 首頁 | 通過 | |
| 設定 | 失敗 | 點擊時閃退 |
| 個人檔案 | 跳過 | 需要先登入 |
### 主控台錯誤數:[數量]
- [列出所有找到的錯誤訊息]
### 人工驗證項目:[數量]
- 使用 Apple 帳號登入:已確認
- 推播通知:已確認
### 失敗項目:[數量]
- 設定畫面 - 切換頁面時閃退
### 最終結果:[PASS / FAIL / PARTIAL]
9. 清理善後
測試結束後:
- 傳入模擬器 UUID 並呼叫
stop_log_capture - (可選)傳入模擬器 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,在模擬器上建置、測試主要畫面,並檢查是否有閃退情況。






