
Claude代码的iOS模拟器技能
具备构建、测试和自动化iOS应用程序的生产就绪技能。22个脚本针对人类开发人员和人工智能代理进行了优化。
Xcode构建+模拟器自动化
这项技能涵盖了iOS开发的两个方面:
- Xcode构建 通过
xcodebuild--编译、测试和解析结果,并逐步披露错误 - 模拟器交互 通过
xcrun simctl和idb--语义UI导航、可访问性测试、设备生命周期
如果你只需要Xcode构建工具而不需要模拟器脚本,请参阅插件版本: laude先生插件
安装
通过插件市场(推荐)
在克劳德代码中:
/plugin marketplace add conorluddy/ios-simulator-skill
/plugin install ios-simulator-skill@conorluddy通过Git克隆
# Personal installation
git clone https://github.com/conorluddy/ios-simulator-skill.git ~/.claude/skills/ios-simulator-skill
# Project installation
git clone https://github.com/conorluddy/ios-simulator-skill.git .claude/skills/ios-simulator-skill重新启动克劳德代码。技能会自动加载。
先决条件
- macOS 12+
- Xcode命令行工具(
xcode-select --install) - Python 3
- IDB(可选,用于交互功能:
brew tap facebook/fb && brew install idb-companion) - 枕头(可选,用于视觉差异:
pip3 install pillow)
特性
Xcode构建与渐进式披露
这 build_and_test.py 脚本包装 xcodebuild 具有令牌高效输出。构建返回一个带有xcresult ID的摘要行:
Build: SUCCESS (0 errors, 3 warnings) [xcresult-20251018-143052]然后根据需要深入了解细节:
python scripts/build_and_test.py --get-errors xcresult-20251018-143052
python scripts/build_and_test.py --get-warnings xcresult-20251018-143052
python scripts/build_and_test.py --get-log xcresult-20251018-143052这使代理对话保持专注——除非你要求,否则没有构建输出的障碍。
通过可访问性进行模拟器导航
所有导航都使用iOS辅助功能API按含义查找元素,而不是脆弱的像素坐标点击:
# Fragile — breaks if UI changes
idb ui tap 320 400
# Robust — finds by meaning
python scripts/navigator.py --find-text "Login" --tap可访问性树以约10个令牌的默认输出给出结构化数据(元素类型、标签、帧、点击目标),而屏幕截图则为1600-6300个令牌。看 AI无障碍应用 了解更多关于为什么可访问性优先导航对AI代理很重要的信息。
截图令牌优化
当需要截图(视觉验证、错误报告、差异)时,该技能会自动调整并压缩截图,以最大限度地降低代币成本。所有22个脚本的默认输出为3-5行,与原始工具输出相比减少了96%。
| 任务 | 原始工具 | 此技能 | 节省 |
|---|---|---|---|
| 屏幕分析 | 200+行 | 5行 | 97.5% |
| 查找并点击按钮 | 100+行 | 1行 | 99% |
| 登录流程 | 400+行 | 15行 | 96% |
全部22个脚本
每个脚本都支持 --help 和 --json。参见 技能.md 以供完整参考。
构建与开发
| 脚本 | 它的作用 | 关键标志 |
|---|---|---|
build_and_test.py | 构建Xcode项目,运行测试,解析xcresult包 | --project, --scheme, --test, --get-errors, --get-warnings |
log_monitor.py | 具有严重性过滤的实时日志监控 | --app, --severity, --follow, --duration |
导航与交互
| 脚本 | 它的作用 | 关键标志 |
|---|---|---|
screen_mapper.py | 分析当前屏幕,列出交互元素 | --verbose, --hints |
navigator.py | 在语义上查找元素并与之交互 | --find-text, --find-type, --find-id, --tap, --enter-text |
gesture.py | 滑动、滚动、捏、长按、拉动以刷新 | --swipe, --scroll, --pinch, --long-press, --refresh |
keyboard.py | 文本输入和硬件按钮控制 | --type, --key, --button, --clear, --dismiss |
app_launcher.py | 启动、终止、安装、深度链接应用程序 | --launch, --terminate, --install, --open-url, --list |
测试与分析
| 脚本 | 它的作用 | 关键标志 |
|---|---|---|
accessibility_audit.py | 当前屏幕上的WCAG合规性检查 | --verbose, --output |
visual_diff.py | 比较两个屏幕截图的视觉变化 | --threshold, --output, --details |
test_recorder.py | 带有屏幕截图的自动化测试文档 | --test-name, --output |
app_state_capture.py | 调试快照(屏幕截图、层次结构、日志) | --app-bundle-id, --output, --log-lines |
sim_health_check.sh | 验证环境(Xcode、simctl、IDB、Python) | -- |
model_inspector.py | 从项目文件中检查核心数据/SwiftData模型 | --project-path, --raw, --show-versions |
权限和环境
| 脚本 | 它的作用 | 关键标志 |
|---|---|---|
clipboard.py | 将文本复制到模拟器剪贴板进行粘贴测试 | --copy, --test-name |
status_bar.py | 超控状态栏(时间、电池、网络) | --preset, --time, --battery-level, --clear |
push_notification.py | 发送模拟推送通知 | --bundle-id, --title, --body, --payload |
privacy_manager.py | 授予、撤销、重置应用程序权限(13项服务) | --bundle-id, --grant, --revoke, --reset |
设备生命周期
| 脚本 | 它的作用 | 关键标志 |
|---|---|---|
simctl_boot.py | 具有就绪性验证的引导模拟器 | --name, --wait-ready, --timeout, --all, --type |
simctl_shutdown.py | 优雅地关闭模拟器 | --name, --verify, --all, --type |
simctl_create.py | 按设备类型和操作系统版本创建模拟器 | --device, --runtime, --list-devices |
simctl_delete.py | 删除带有安全确认的模拟器 | --name, --yes, --all, --old |
simctl_erase.py | 恢复出厂设置,不删除 | --name, --verify, --all, --booted |
评估
使用测试 克劳德代码评估:
| 条件 | 通过率 |
|---|---|
| 有技巧 | 100% (3/3) |
| 没有技能 | 46% (~1.4/3) |
claude evals run evals/evals.json --skill ios-simulator-skill许可证
麻省理工学院
