← 所有文章

两个 MCP 服务器将 Claude Code 变成了 iOS 构建系统

我使用 Claude Code 开发 11 款 iOS 应用。我有守护 Git 安全的 hooks强制执行代码质量的规则,以及编码了团队模式的代理定义。但在昨天之前,每次构建错误都意味着复制终端输出、粘贴回去,然后祈祷代理能理解上下文。模拟器管理靠的是原始的 xcrun simctl 命令。测试结果则是一堵堵无结构的文本墙。

两条 claude mcp add 命令改变了这一切。

摘要

XcodeBuildMCP(76 个工具,开源)处理构建、测试、模拟器、真机部署和 LLDB 调试——全程无需运行 Xcode。Apple 原生 Xcode MCP(20 个工具,随 Xcode 26.3 发布)通过 XPC 桥接到运行中的 Xcode 进程,提供文件操作、实时诊断、文档搜索、Swift REPL 和 SwiftUI 预览。两者结合,赋予 Claude Code 对 iOS 开发工具链的完整编程访问能力——结构化 JSON 取代日志解析,工具调用取代 shell 命令。设置不到 2 分钟。


缺口

Claude Code 在读写 Swift 方面表现出色。它理解 SwiftUI 模式、SwiftData 关系和 Swift 6 并发。但它对构建系统一无所知。

当构建失败时,代理必须:

  1. 通过 Bash 运行 xcodebuild
  2. 解析数千行无结构的输出
  3. 期望能在噪音中找到真正的错误
  4. 猜测是哪个文件的哪一行导致了失败

当我想运行测试时:

  1. 代理凭记忆构造完整的 xcodebuild test 命令
  2. 解析 xcresult 包(或更可能是原始 stdout)
  3. 试图弄清哪些测试通过了、哪些失败了

这相当于让开发者通过钥匙孔阅读编译器输出来编写代码。信息在技术上确实存在,但接口是错误的。

解决方案:两个互补的 MCP 服务器

XcodeBuildMCP(社区版,开源)

XcodeBuildMCPxcodebuild 及相关工具封装为 76 个结构化 MCP 工具。代理调用 xcode_build 后获得的是包含分类错误、警告和文件位置的 JSON——而非 3,000 行构建日志。

关键工具:

工具 功能
build_sim / build_device 针对模拟器或真机构建,带结构化错误输出
test_sim 运行测试,按测试方法返回通过/失败结果
list_sims / boot_sim 模拟器生命周期管理
discover_projs / list_schemes 项目内省
debug_attach_sim / debug_stack LLDB 调试,支持断点和变量检查
snapshot_ui / screenshot UI 自动化和视觉截图

安装:

claude mcp add XcodeBuildMCP \
  -s user \
  -e XCODEBUILDMCP_SENTRY_DISABLED=true \
  -- npx -y xcodebuildmcp@latest mcp

-s user 标志使其全局生效——在每个项目中都可用,无需逐项目配置。环境变量禁用遥测(默认会向 Sentry 发送崩溃报告;我选择退出)。1

Apple Xcode MCP(原生版,随 Xcode 26.3 发布)

Apple 在 Xcode 26.3 中通过 xcrun mcpbridge 发布了自己的 MCP 服务器。它暴露了 20 个工具,通过 XPC 直接桥接到 Xcode 进程:

类别 关键工具
文件操作 XcodeReadXcodeWriteXcodeUpdateXcodeGlobXcodeGrep
构建与测试 BuildProjectGetBuildLogRunAllTestsRunSomeTests
诊断 XcodeListNavigatorIssuesXcodeRefreshCodeIssuesInFile
代码与文档 ExecuteSnippet(Swift REPL)、DocumentationSearchRenderPreview

安装:

claude mcp add --transport stdio xcode -s user -- xcrun mcpbridge

需要 Xcode 26.3+(目前为候选发布版,即将正式发布)。

为什么需要两者?

它们在构建和测试上有重叠,但架构不同:

  • XcodeBuildMCP 通过 xcodebuild CLI 独立工作——无需 Xcode 进程。它提供 76 个工具,涵盖模拟器、真机、LLDB 调试、UI 自动化和项目脚手架。适用于无头工作流和类 CI 开发。
  • Apple Xcode MCP 需要运行中的 Xcode 实例,通过 XPC 通信。它在 Xcode 项目上下文中提供文件操作、实时代码诊断(不仅是构建输出),以及包含 WWDC 会议在内的原生文档搜索。

我同时使用两者:XcodeBuildMCP 用于构建-测试-调试循环(无需打开 Xcode 即可工作),Apple 的 MCP 用于文档查询、Swift REPL 验证或 SwiftUI 预览渲染。


真实场景测试

我对 Water 应用(SwiftUI + Metal 流体模拟 + HealthKit)进行了完整的健康检查,使用了以下提示词:

Use the XcodeBuildMCP and Apple Xcode MCP tools to do a full
health check of this project:

1. List available simulators and boot an iPhone 16 Pro
2. Build the project for that simulator
3. Run existing tests and report pass/fail results
4. Search Apple docs for "HealthKit water intake"
5. Use the Swift REPL to verify HKQuantityType(.dietaryWater)

发生了什么

模拟器设置使用了 list_simssession_set_defaultsboot_sim。代理发现 iOS 26 运行时中不存在 iPhone 16 Pro(已停产),因此自动切换到 iPhone 17 Pro。这种自适应行为在硬编码的 xcodebuild 命令中是不可能实现的。

构建最初失败了——新 Xcode 安装尚未下载 Metal Toolchain。代理从结构化错误输出中检测到这一点,并运行 xcodebuild -downloadComponent MetalToolchain 来修复。构建随后成功,带有 3 个警告:

HomeView.swift:132    UIScreen.main deprecated in iOS 26.0
LogWaterIntent.swift:61   Result of try? is unused

结构化输出意味着这些警告以分类形式返回,带有精确的文件:行号引用,而非淹没在日志中。

测试失败了——但失败信息很有价值。结构化输出显示 5 个测试方法引用了 injectTapRipple(atNormalizedX:),这是我在之前的提交中已删除的方法。代理精确定位了相关提交(7657068 — "remove tap ripple interaction entirely"),并列出了哪些测试需要更新。零歧义。

文档搜索Swift REPL 确认 HKQuantityType(.dietaryWater) 有效,返回标识符 HKQuantityTypeIdentifierDietaryWater

结果汇总

步骤 状态 使用的 MCP 工具
模拟器启动 iPhone 17 Pro(iOS 26.2) list_simssession_set_defaultsboot_sim
构建 通过(3 个警告) build_simdiscover_projslist_schemes
测试 失败(过期测试引用) test_sim
HealthKit 文档 已检索 DocumentationSearch
Swift REPL 已验证 ExecuteSnippet

整个健康检查自主运行。我没有打开 Xcode,没有复制任何错误消息,没有构造任何 xcodebuild 命令。


教会代理

安装 MCP 服务器还不够。代理需要知道这些工具的存在,以及何时优先于原始 shell 命令使用它们。我更新了 ios-developer 代理定义,加入了明确的指导:

## Build & Test Tools (XcodeBuildMCP)

Prefer MCP tools over raw xcodebuild commands:

- **Build**: Use `build_sim` / `build_device` for structured errors
- **Test**: Use `test_sim` / `test_device` for pass/fail results
- **Simulators**: Use `list_sims`, `boot_sim`, `open_sim`
- **Debug**: Use `debug_attach_sim`, `debug_stack`, `debug_variables`

## Apple Xcode MCP (mcpbridge)

- **Documentation**: Use `DocumentationSearch` for Apple docs
- **Swift REPL**: Use `ExecuteSnippet` for API verification
- **Previews**: Use `RenderPreview` for headless SwiftUI rendering

Prefer these over WebSearch for Apple API questions
and over Bash `swift` for REPL tasks.

如果没有这些指导,代理有时会退回到通过 Bash 使用 xcodebuild,或者使用 WebSearch 搜索 Apple 文档而非原生搜索。代理定义弥补了这一差距。2


实际工作流的变化

引入 MCP 之前,我使用 Claude Code 的 iOS 工作流是:

  1. 用 Claude 编写代码
  2. 在 Xcode 中手动构建(或在终端中使用 xcodebuild)
  3. 将错误复制回 Claude
  4. 重复

引入 MCP 之后:

  1. 描述我想要的功能
  2. Claude 编写代码、构建、读取错误、修复、运行测试、验证 API 行为
  3. 我审查最终结果

过去需要我主动参与的构建-报错-修复循环,现在可以自主完成。代理不再从原始文本中猜测哪里出了问题——它读取的是结构化数据,精确告诉它什么失败了、在哪里、为什么。

这是我在 AI 工具中反复看到的模式:突破点不在于让 AI 更聪明,而在于赋予它对开发者已有工具的结构化访问。 MCP 是实现这一点的协议——正如 hooks 为 Claude Code 提供了确定性护栏,MCP 为它提供了确定性工具接口。Xcode 不是第一个,也不会是最后一个通过 MCP 暴露自身能力的开发工具。3


设置清单

适用于使用 Claude Code 开发 iOS 项目的所有人:

  1. 安装 XcodeBuildMCP(需要 Xcode 26.3+): bash claude mcp add XcodeBuildMCP -s user \ -e XCODEBUILDMCP_SENTRY_DISABLED=true \ -- npx -y xcodebuildmcp@latest mcp

  2. 安装 Apple Xcode MCP(需要 Xcode 26.3+): bash claude mcp add --transport stdio xcode \ -s user -- xcrun mcpbridge

  3. 验证两者已连接: bash claude mcp list # XcodeBuildMCP: ... - Connected # xcode: xcrun mcpbridge - Connected

  4. 更新您的代理定义以引用新工具(否则代理有时会退回到 shell 命令)。

  5. 启动新的 Claude Code 会话——会话中途注册的 MCP 工具在重启前不会出现在工具搜索中。

就是这样。两条命令,完整的 iOS 构建系统访问。


常见问题

我还需要安装 Xcode 吗?

是的。两个 MCP 服务器都是 Xcode 工具链(xcodebuildxcrunsimctl)的封装。必须安装并配置好 Xcode。MCP 服务器为 Claude Code 提供对这些工具的结构化访问——而非替代它们。

XcodeBuildMCP 是否支持纯 SwiftPM 项目?

是的。XcodeBuildMCP 同时支持 .xcodeproj/.xcworkspace 和 Swift Package Manager 项目。使用 discover_projs 查找可用的项目类型,然后使用 build_simbuild_device 配合相应的 scheme。

CI/CD 管道怎么办?

MCP 服务器在本地与 Claude Code 一起运行。对于 CI/CD,您仍然应该直接使用 xcodebuild 或 Fastlane 等工具。MCP 方案专门用于交互式开发循环,即 AI 代理在代码-构建-测试周期中需要结构化反馈的场景。



  1. XcodeBuildMCP 默认包含 Sentry 遥测。该项目的隐私文档详细说明了发送的内容:错误消息、堆栈跟踪,以及某些情况下的文件路径。XCODEBUILDMCP_SENTRY_DISABLED=true 环境变量可完全退出。 

  2. Claude Code 在总工具数量较多时使用 Tool Search 延迟加载 MCP 工具。仅 XcodeBuildMCP 就有 76 个工具,明确的代理指导帮助代理在第一次尝试时就找到正确的工具,而非退回到 shell 命令。 

  3. 这呼应了我在 Claude Code hooks 文章中提到的模式:在概率性 AI 之上建立确定性基础设施。MCP 服务器提供结构化、可靠的接口。AI 提供关于何时以及如何使用它们的判断。两者缺一不可。