/ 目錄 / 演練場 / XcodeBuild
● 官方 getsentry ⚡ 即開即用

XcodeBuild

作者 getsentry · getsentry/XcodeBuildMCP

在聊天中完成 iOS/macOS AI 編碼的整個循環 — 編譯、測試、在模擬器上執行、擷取日誌和螢幕截圖,全部都可以在聊天中完成。

XcodeBuildMCP(由 Sentry 貢獻者 Cameron 開發)封裝了 xcodebuild、xcrun simctl 和模擬器執行時。讓 agent 能夠編譯專案、執行測試、啟動模擬器、安裝應用程式、驅動應用程式,並讀取日誌或螢幕截圖 — 為 AI 編寫的 iOS 程式碼補上了缺失的反饋循環。

為什麼要用

核心特性

即時演示

實際使用效果

xcodebuild.replay ▶ 就緒
0/0

安裝

選擇你的客戶端

~/Library/Application Support/Claude/claude_desktop_config.json  · Windows: %APPDATA%\Claude\claude_desktop_config.json
{
  "mcpServers": {
    "xcodebuild": {
      "command": "npx",
      "args": [
        "-y",
        "xcodebuildmcp@latest"
      ]
    }
  }
}

開啟 Claude Desktop → Settings → Developer → Edit Config。儲存後重啟應用。

~/.cursor/mcp.json · .cursor/mcp.json
{
  "mcpServers": {
    "xcodebuild": {
      "command": "npx",
      "args": [
        "-y",
        "xcodebuildmcp@latest"
      ]
    }
  }
}

Cursor 使用與 Claude Desktop 相同的 mcpServers 格式。專案級設定優先於全域。

VS Code → Cline → MCP Servers → Edit
{
  "mcpServers": {
    "xcodebuild": {
      "command": "npx",
      "args": [
        "-y",
        "xcodebuildmcp@latest"
      ]
    }
  }
}

點擊 Cline 側欄中的 MCP Servers 圖示,然後選 "Edit Configuration"。

~/.codeium/windsurf/mcp_config.json
{
  "mcpServers": {
    "xcodebuild": {
      "command": "npx",
      "args": [
        "-y",
        "xcodebuildmcp@latest"
      ]
    }
  }
}

格式與 Claude Desktop 相同。重啟 Windsurf 生效。

~/.continue/config.json
{
  "mcpServers": [
    {
      "name": "xcodebuild",
      "command": "npx",
      "args": [
        "-y",
        "xcodebuildmcp@latest"
      ]
    }
  ]
}

Continue 使用伺服器物件陣列,而非映射。

~/.config/zed/settings.json
{
  "context_servers": {
    "xcodebuild": {
      "command": {
        "path": "npx",
        "args": [
          "-y",
          "xcodebuildmcp@latest"
        ]
      }
    }
  }
}

加入 context_servers。Zed 儲存後熱重載。

claude mcp add xcodebuild -- npx -y xcodebuildmcp@latest

一行命令搞定。用 claude mcp list 驗證,claude mcp remove 移除。

使用場景

實戰用法: XcodeBuild

驗證 AI 生成的 iOS 程式碼真的能編譯並在模擬器上執行

👤 使用 Claude 進行功能開發和 SwiftUI 原型製作的 iOS 開發者 ⏱ ~15 min intermediate

何時使用: Claude 剛寫完或編輯了 SwiftUI 視圖。在說『完成』前,你想先編譯、在模擬器上執行,並擷取螢幕截圖。

前置條件
  • 安裝 Xcode — 從 Mac App Store 安裝 Xcode 15+;用 xcodebuild -version 確認
  • 可啟動的模擬器 — Xcode → Settings → Platforms → 下載 iOS Simulator
步驟
  1. 探索專案並編譯
    找到 /Users/me/Projects/MyApp 中的 Xcode 專案。為 iOS Simulator destination 'iPhone 16' 編譯 scheme 'MyApp'。回報任何錯誤或警告。✓ 已複製
    → 編譯成功,或具體的錯誤信息(含檔案:行號)
  2. 啟動模擬器、安裝、啟動應用程式
    啟動 iPhone 16 模擬器(如果還沒啟動)。安裝編譯好的應用程式並啟動它。3 秒後擷取螢幕截圖。✓ 已複製
    → 應用程式執行中;螢幕截圖已擷取
  3. 操作功能
    點擊『註冊』按鈕、在信箱欄位輸入 '[email protected]'、點擊提交。每一步後擷取螢幕截圖。✓ 已複製
    → 顯示操作流程的一系列螢幕截圖;或清晰的點擊失敗錯誤

結果: 展示功能運作的前/後螢幕截圖,與程式碼一起提交。

注意事項
  • 按座標點擊在不同裝置尺寸上較脆弱 — 如果 MCP 支援,優先使用無障礙標籤的點擊;只在必要時才用座標作為備選方案
  • 模擬器編譯使用不同的架構,與真實裝置不同 — 對於架構敏感的程式碼,合併前至少要針對實體裝置編譯一次
搭配使用: filesystem · github

在聊天中執行你的 Xcode 單元測試和 UI 測試,並分類故障

👤 想要快速測試反饋且不想切換到 Xcode 的 iOS 開發者 ⏱ ~10 min beginner

何時使用: 你做了修改,想執行 ⌘U 的等效操作,並讓 Claude 解析失敗。

步驟
  1. 執行測試
    執行 'MyApp' scheme 在 'iPhone 16' destination 上的所有測試。顯示任何失敗,包括檔案、行號和預期。✓ 已複製
    → 通過計數加上帶位置的失敗清單
  2. 專注於一個失敗
    對於第一個失敗,讀取原始檔案並告訴我是測試錯誤還是程式碼錯誤。要具體。✓ 已複製
    → 明確的診斷,而不是『可能其中之一』
  3. 修復並重新執行
    應用修復。只重新執行失敗的測試以確認成功。✓ 已複製
    → 重新執行成功

結果: 測試恢復正常,進行聚焦式重新執行,而非整個測試套件的重新執行。

注意事項
  • xcodebuild test 在冷快取上速度很慢 — 使用 -only-testing: 旗標來縮小範圍;MCP 透過 test-by-identifier 暴露這個
搭配使用: github

診斷難解的 Xcode 編譯錯誤

👤 遇到『連結器錯誤/缺少框架/簽署』問題的 iOS 開發者 ⏱ ~20 min intermediate

何時使用: xcodebuild 失敗,錯誤輸出有 4000 行雜訊。

步驟
  1. 編譯並捕獲原始失敗
    編譯 'MyApp' scheme,只返回包含 'error:' 或 'warning:' 的行,加上每個周圍的 3 行上下文。✓ 已複製
    → 聚焦的錯誤清單,無雜訊
  2. 解釋第一個錯誤
    用人類語言解釋第一個錯誤。Xcode 實際上在抱怨什麼,最可能的 3 個原因是什麼?✓ 已複製
    → 簡潔的診斷,附上可能的原因
  3. 應用修復並重新編譯
    應用最可能的修復(視需要檢查 Info.plist/entitlements/Package.swift),重新編譯,並確認錯誤消失。✓ 已複製
    → 乾淨的編譯

結果: 不用花 2 小時在 Stack Overflow 上兜圈子,就能解決編譯問題。

注意事項
  • 某些錯誤是 DerivedData 過期 — 當所有其他方法都失敗時:透過 MCP 的清理工具清除 DerivedData,然後重新編譯
搭配使用: filesystem

在模擬器上捕獲應用程式崩潰並找到根本原因

👤 追蹤可重現崩潰的 iOS 開發者 ⏱ ~20 min advanced

何時使用: 你的應用程式在模擬器的特定操作流上崩潰,你想讓 Claude 讀取崩潰日誌。

步驟
  1. 以日誌捕獲方式重現
    在 iPhone 16 模擬器上啟動 MyApp。開始日誌捕獲。執行此操作流:開啟設定、點擊『清除快取』。應用程式崩潰時停止日誌捕獲。✓ 已複製
    → 崩潰已重現,日誌已保存
  2. 解析崩潰
    在捕獲的日誌中找到崩潰。如需要進行符號化。告訴我失敗的執行緒、前 5 個堆疊框架,以及我們程式碼中可能的行。✓ 已複製
    → 指向特定原始檔的符號化堆疊追蹤
  3. 提議修復
    根據堆疊追蹤和周圍的程式碼,修復它的最小變化是什麼?應用它。✓ 已複製
    → 有針對性的修復,而不是大規模重構

結果: 已修復的崩潰,附上符號化的證據,你可以貼到 PR 中。

注意事項
  • Release 組態的崩潰如果沒有 dSYM 無法符號化 — 用 Debug 組態重現;分別測試 Release 來確認修復
搭配使用: sentry · github

組合

與其他 MCP 搭配,撬動十倍槓桿

xcodebuild + filesystem

編輯 Swift → 編譯 → 擷取螢幕截圖 → 反覆迭代,完全在一次聊天中完成

編輯 ContentView.swift 以新增深色模式切換。為 iPhone 16 編譯 MyApp、執行它、在亮色和深色模式中都擷取螢幕截圖。✓ 已複製
xcodebuild + github

修復問題、在模擬器上驗證、用螢幕截圖開啟 PR

Issue #42 指出登入按鈕在橫向模式下未對齊。在 iPad 模擬器上重現、修復 SwiftUI 佈局、在 PR 中附加前/後螢幕截圖。✓ 已複製
xcodebuild + sentry

在模擬器上重現 Sentry 報告的崩潰,條件相同

Sentry 崩潰 iOS-113 發生在 iOS 18.1、使用者區域設定為 fr-FR。啟動匹配的模擬器、重現並修復。✓ 已複製

工具

此 MCP 暴露的能力

工具輸入參數何時呼叫成本
discover_projects directory: str 找到要在儲存庫中編譯的內容,無需輸入路徑 free
build_project project: str, scheme: str, destination: str, configuration?: 'Debug'|'Release' 為 destination 編譯 .xcodeproj 或 .xcworkspace free
build_spm_package path: str 編譯 Swift Package(沒有 .xcodeproj) free
test_project project, scheme, destination, only_testing?: str[] 執行測試套件;使用 only_testing 來縮小範圍 free
list_simulators none 查看有哪些模擬器以及哪些已啟動 free
boot_simulator simulator_id or name: str 在安裝應用程式前啟動模擬器 free
install_app simulator_id: str, app_path: str 在已啟動的模擬器上安裝編譯好的 .app free
launch_app simulator_id: str, bundle_id: str 啟動已安裝的應用程式 free
tap_at / type_text / send_url simulator params 驅動使用介面 free
screenshot simulator_id: str, path?: str 擷取視覺狀態 free
start_log_capture / stop_log_capture simulator_id 為工作階段擷取主控台/系統日誌 free
clean project, scheme? 當編譯出現問題時,清除該專案的 DerivedData free

成本與限制

運行它的成本

API 配額
無 — 一切都透過 xcodebuild/simctl 在本機執行
每次呼叫 Token 數
編譯日誌可能很大。優先過濾到錯誤/警告,而非完整日誌轉儲
費用
免費(需要安裝 Xcode 的 Mac,本身就有成本)
提示
預設執行增量編譯,而非乾淨編譯。只有在 DerivedData 出現問題時才清理。

安全

權限、密鑰、影響範圍

憑證儲存: MCP 層級沒有憑證。程式碼簽署憑證像往常一樣存放在你的 Mac Keychain 中。
資料出站: MCP 無資料流出。xcodebuild 可能會從通常的來源提取依賴項(SPM、CocoaPods)。
切勿授予: 不要讓 agent 在未確認的情況下修改程式碼簽署身份或佈建設定檔

故障排查

常見錯誤與修復

xcodebuild: 找不到命令

Xcode Command Line Tools 遺失或未選擇。執行 xcode-select --install,然後執行 sudo xcode-select -s /Applications/Xcode.app/Contents/Developer

驗證: xcodebuild -version
沒有這樣的 destination 'iPhone 16'

該名稱的模擬器未針對活躍 Xcode 下載。開啟 Xcode → Settings → Platforms → 下載 iOS runtime。或使用 list_simulators 並選擇現有的。

驗證: xcrun simctl list devices
編譯成功但應用程式無法啟動 — 'NSException'

在啟動前透過 start_log_capture 檢查應用程式日誌。通常是 Info.plist 缺少金鑰,或 entitlements 不匹配。

測試在 SwiftUI 預覽上掛起

SwiftUI 預覽在罕見情況下可能會導致 xcodebuild test 死鎖。在測試 scheme 中停用預覽輔助工具,或使用 -disable-concurrent-testing 執行。

替代方案

XcodeBuild 對比其他方案

替代方案何時用它替代權衡
直接執行 xcodebuild 的殼層 MCP你想要最大的靈活性並接受原始殼層 MCP 的安全交換沒有符合人體工程學的設計;Claude 必須知道每個 xcodebuild 旗標
JetBrains MCP(AppCode 已生命週期結束)你在 JetBrains IDE 中 — 不再適用於 iOS今天不是 iOS 的替代方案
透過殼層執行 Fastlane你需要簽署編譯和 TestFlight 上傳,而不只是模擬器驗證重得多;超出內迴圈開發的範圍

更多

資源

📖 閱讀 GitHub 上的官方 README

🐙 查看未解決的 issue

🔍 瀏覽全部 400+ MCP 伺服器和 Skills