/ 目录 / 演练场 / iOS Simulator MCP
● 社区 joshuayoes ⚡ 即开即用

iOS Simulator MCP

作者 joshuayoes · joshuayoes/ios-simulator-mcp

让 Claude 驱动 xcrun simctl + idb——启动模拟器、安装 .app、点击、输入、截图、录屏,无需切换到 Xcode。

iOS Simulator MCP 封装了 Apple 的 xcrun simctl 和 Facebook 的 idb,让 Claude 能操作 iOS 模拟器。非常适合 UI 测试循环、bug 复现以及截图/录屏捕获——正是那种在 Xcode 和对话之间来回切换令人厌烦的工作。

为什么要用

核心特性

实时演示

实际使用效果

ios-simulator-mcp.replay ▶ 就绪
0/0

安装

选择你的客户端

~/Library/Application Support/Claude/claude_desktop_config.json  · Windows: %APPDATA%\Claude\claude_desktop_config.json
{
  "mcpServers": {
    "ios-simulator-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "ios-simulator-mcp"
      ]
    }
  }
}

打开 Claude Desktop → Settings → Developer → Edit Config。保存后重启应用。

~/.cursor/mcp.json · .cursor/mcp.json
{
  "mcpServers": {
    "ios-simulator-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "ios-simulator-mcp"
      ]
    }
  }
}

Cursor 使用与 Claude Desktop 相同的 mcpServers 格式。项目级配置优先于全局。

VS Code → Cline → MCP Servers → Edit
{
  "mcpServers": {
    "ios-simulator-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "ios-simulator-mcp"
      ]
    }
  }
}

点击 Cline 侧栏中的 MCP Servers 图标,然后选 "Edit Configuration"。

~/.codeium/windsurf/mcp_config.json
{
  "mcpServers": {
    "ios-simulator-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "ios-simulator-mcp"
      ]
    }
  }
}

格式与 Claude Desktop 相同。重启 Windsurf 生效。

~/.continue/config.json
{
  "mcpServers": [
    {
      "name": "ios-simulator-mcp",
      "command": "npx",
      "args": [
        "-y",
        "ios-simulator-mcp"
      ]
    }
  ]
}

Continue 使用服务器对象数组,而非映射。

~/.config/zed/settings.json
{
  "context_servers": {
    "ios-simulator-mcp": {
      "command": {
        "path": "npx",
        "args": [
          "-y",
          "ios-simulator-mcp"
        ]
      }
    }
  }
}

加入 context_servers。Zed 保存后热重载。

claude mcp add ios-simulator-mcp -- npx -y ios-simulator-mcp

一行命令搞定。用 claude mcp list 验证,claude mcp remove 卸载。

使用场景

实战用法: iOS Simulator MCP

跨设备生成 App Store 截图

👤 准备发版的 iOS 开发者 ⏱ ~25 min intermediate

何时使用: 你需要在 6.5 英寸、6.7 英寸、iPad 上分别生成浅色和深色模式截图,且要快速完成。

前置条件
  • Xcode + simctl — 标准 Xcode 安装
  • 已安装 idbbrew tap facebook/fb && brew install idb-companion
  • 已构建 .app bundlexcodebuild -scheme YourApp -destination 'platform=iOS Simulator' build
步骤
  1. 初始化设备
    启动 iPhone 15 Pro Max 和 iPad Pro 13 英寸模拟器,准备好后列出它们。✓ 已复制
    → list_simulators 显示两者均为 Booted 状态
  2. 设置状态栏
    将两个设备的状态栏设为 9:41、满格电量、满格信号,App Store 风格。✓ 已复制
    → status_bar_set 成功;外观干净
  3. 安装并截图
    在两个设备上安装 MyApp.app,启动后依次导航到主页 → 个人资料 → 设置,分别在浅色和深色模式下截图,保存到 /screenshots/<device>/<mode>/。✓ 已复制
    → 每个设备下有对应文件夹,包含浅色和深色两套截图

结果: 约 10 分钟完成完整的 App Store 截图包,无需手动操作。

注意事项
  • 模拟器已启动但 app 启动时崩溃 — 查看 simctl 日志;检查是否缺少 entitlements
  • 灵动岛内容遮挡状态栏调整效果 — 在 Pro Max 上,status_bar_set 仍在灵动岛下方生效
搭配使用: filesystem

录制 UI bug 的干净复现视频

👤 iOS 开发者/QA ⏱ ~10 min beginner

何时使用: bug 只在模拟器上复现,你需要一段视频附到 ticket。

步骤
  1. 开始录制
    启动 iPhone 15,安装 build.app,开始屏幕录制。✓ 已复制
    → record_video_start 返回 recording id
  2. 复现 bug
    打开应用,点击「个人资料」,再点击编辑铅笔图标,在姓名字段输入「Test」,点击保存,等待 2 秒。✓ 已复制
    → 操作序列已执行;如果 bug 能复现则在视频中可见
  3. 停止并附件
    停止录制,保存为 bug-1234.mov 到 /tickets/。✓ 已复制
    → MOV 文件已保存

结果: 复现视频已就绪,可附到 ticket。

注意事项
  • 因布局与预期不符导致点击没有命中 — 先用 describe_ui 获取当前元素坐标
搭配使用: filesystem · github

每次重新构建后执行冒烟测试

👤 快速构建/测试迭代中的 iOS 开发者 ⏱ ~15 min intermediate

何时使用: 你正在迭代某个界面,每次重新构建后希望跑 30 秒的冒烟测试。

步骤
  1. 重新构建并重新安装
    对 scheme MyApp Debug 执行 xcodebuild,然后重新安装到已启动的模拟器上。✓ 已复制
    → 安装成功,使用新 bundle
  2. 跑冒烟路径
    打开 app,用测试账号登录,导航到我正在开发的界面,截图。✓ 已复制
    → 截图显示正常;日志中无崩溃

结果: 更快的构建/测试循环,无需手动点击。

注意事项
  • 登录流程有验证码 — 使用跳过验证码的构建版本,或 stub 掉认证流程

组合

与其他 MCP 搭配,撬动十倍杠杆

ios-simulator-mcp + filesystem

将截图保存到仓库

捕获所有主要界面的截图,保存到 /design/screenshots/。✓ 已复制
ios-simulator-mcp + github

提附带复现视频的 bug issue

录制 bug 视频,然后提 GitHub issue,附上 MOV 文件和复现步骤。✓ 已复制
ios-simulator-mcp + xcodebuildmcp

构建后立即运行冒烟测试

XcodeBuild:构建 Debug 版本。Sim:安装 + 启动 + 截图。✓ 已复制

工具

此 MCP 暴露的能力

工具输入参数何时调用成本
list_simulators (无) 第一步 免费
boot_simulator device_id: str 开机启动模拟器 免费
install_app device_id, path: str (.app) 推送构建包 免费
launch_app device_id, bundle_id: str 打开应用 免费
tap device_id, x, y 点击某坐标 免费
type_text device_id, text: str 输入文本 免费
screenshot device_id, path? 捕获当前状态 免费
record_video_start device_id, path: str 开始录制视频 免费
record_video_stop recording_id 结束录制 免费
describe_ui device_id 获取点击坐标 免费
status_bar_set device_id, time, battery, signal 生成 App Store 截图时清理状态栏 免费

成本与限制

运行它的成本

API 配额
无——本地运行
每次调用 Token 数
100–800;截图通过路径引用,不嵌入正文
费用
开源免费
提示
用 describe_ui 一次性获取点击坐标,而不是反复猜测

安全

权限、密钥、影响范围

最小权限: 执行 simctl + idb
凭据存储: 无——但模拟器中的 app 数据是你的
数据出站: 仅限本地
切勿授予: root/内核访问

故障排查

常见错误与修复

找不到 idb

brew tap facebook/fb && brew install idb-companion;同时执行 pip install fb-idb

验证: idb list-targets
点击没有命中

使用 describe_ui;不同设备尺寸坐标有差异;元素可能在 sheet 里

模拟器已启动但屏幕全黑

关闭 + 重置模拟器;有时 Xcode runtime 需要重新下载

录制文件损坏

直接用 simctl io recordVideo;idb 的封装在 macOS 休眠后偶尔会失效

替代方案

iOS Simulator MCP 对比其他方案

替代方案何时用它替代权衡
XcodeBuildMCP(Sentry)想在一个 MCP 中同时完成构建和模拟器操作更重;功能更广
Maestro想用完整的 UI 测试 DSL默认不由 LLM 驱动
Xcode Cloud / Fastlane生产级 CI不同层面;不是交互式的

更多

资源

📖 阅读 GitHub 上的官方 README

🐙 查看未解决的 issue

🔍 浏览全部 400+ MCP 服务器和 Skills