Sep 28, 2026
用 ios-simulator-skill 让 Claude Code 构建、运行并探查 iOS 应用
29 个脚本封装 xcodebuild 与 iOS 模拟器,用渐进式披露和基于无障碍树的导航,让 agent 能构建、点击并验证你的 app,而不会被输出淹没。
让 agent「构建 app 并点一遍登录页」会撞上两堵墙:xcodebuild 的输出会灌满上下文窗口,而模拟器里的 UI 它又看不见。ios-simulator-skill 是一个生产可用的 skill——29 个脚本,封装 xcodebuild、xcrun simctl 和 idb——两堵墙一起拆:构建结果以单行摘要返回,UI 导航按语义找按钮,而不是靠像素坐标。
为什么这个 Skill 重要
省 token 的账是核心。一张截图要 1,600–6,300 个 token,而这个 skill 依赖的无障碍树默认输出只要约 10 个 token。README 报告全部 29 个脚本的默认输出都是 3–5 行——相比原始工具输出减少 96%。构建结果同理:一行摘要加一个 xcresult ID,细节只有你追问时才展开。
导航走 iOS 无障碍 API:navigator.py --find-text "Login" --tap 按标签找按钮,布局变了也照常工作,而写死的 idb ui tap 320 400 一变就失效。脚本集覆盖完整闭环——构建与测试、设备状态(深色模式、地区、GPS 模拟)、手势与键盘、无障碍审计、视觉对比、推送通知模拟、权限管理,以及模拟器生命周期。
安装
在 Claude Code 中通过插件市场安装:
/plugin marketplace add conorluddy/ios-simulator-skill
/plugin install ios-simulator-skill@conorluddy
从 release 手动安装(最简单):
curl -L https://github.com/conorluddy/ios-simulator-skill/releases/latest/download/ios-simulator-skill.zip -o skill.zip
unzip skill.zip -d ~/.claude/skills/ios-simulator-skill
不要把整个仓库克隆进 skills 目录——这个仓库是一个 plugin,真正的 skill 位于 ios-simulator-skill/skills/ios-simulator-skill/,直接克隆会让 SKILL.md 深埋三层而无法加载。
前置条件:macOS 15+、Xcode 26+ 加 Command Line Tools、Python 3.12+,以及 idb 1.5.1+(每个交互脚本都需要;只有视觉对比要用 Pillow)。从 Meta 的 tap 安装 idb:
brew tap facebook/fb
brew install facebook/fb/idb-companion facebook/fb/idb-cli
然后一次性验证环境:
bash scripts/sim_health_check.sh
实战:修一个 agent 看得见的登录 bug
- 用渐进式披露构建并测试:
python scripts/build_and_test.py --project MyApp.xcodeproj --scheme MyApp
- 结果只有一行——
Build: SUCCESS (0 errors, 3 warnings) [xcresult-...]。需要细节时,用--get-errors、--get-warnings或--get-log加上那个 xcresult ID 追问。 - 启动模拟器、拉起 app,按语义导航:
python scripts/navigator.py --find-text "Login" --tap
- 把 bug 交给 agent,让它自己驱动这个闭环:
登录按钮点击后没有跳转。用 ios-simulator-skill 启动 app,走到登录页复现这个问题,
把截图和控件层级一起带回来。
- 在 Xcode 27 上记住一件事:
Simulator.app已经没有了——它被DeviceHub.app取代;脚本通过simctl和idb无头驱动模拟器,所以多数时候无感,但open -a Simulator会失败。
技巧
- 用
IOS_SIM_*环境变量调节各项上限。比如给慢速的 GitHub Actions macOS runner:IOS_SIM_BOOT_TIMEOUT=600 python scripts/simctl_boot.py --wait-ready。 - 这些旋钮有真实的取舍:上限调高,误报失败更少、诊断更完整,但 token 消耗更大;调低则反馈更快,但可能悄悄丢掉错误或在正常慢操作上提前超时。
- 如果崩溃后
idb调用开始报Connection refused,说明有一个已死的 companion 还挂着——用idb disconnect <udid>清掉;健康检查脚本会发现这种情况。 brew install idb-companion已经装不到了:包搬进了 Meta 自己的facebook/fbtap。在 Xcode 27 上,旧版 companion 会静默丢弃每一次点击和按键——升级到 1.5.1+。- README 报告的 Claude Code evals 结果:带 skill 通过率 100%(3/3),不带为 46%——值得用
claude evals run evals/evals.json --skill ios-simulator-skill在你自己的 app 上复测。
何时不用这个 Skill
它需要 Mac、Xcode 26+ 和 Python 3.12+ 工具链——只在 Linux CI 上构建的项目得不到任何东西。而如果你只想构建工具、不要模拟器交互,同一位作者另发了一个不带模拟器脚本的插件版 xclaude-plugin。
查看 排行榜 了解更多 skill。