关于 ios-simulator-skill
面向 iOS 开发与测试的自动化技能,通过辅助功能元素而非屏幕坐标导航和操作模拟器。包含构建、交互、测试、权限及设备生命周期管理脚本,并支持 JSON 输出。
主要功能
- 01按文本、类型或 ID 定位界面元素
- 02构建项目并运行测试
- 03执行手势和文本输入
- 04进行辅助功能审计与截图比较
- 05管理应用权限和推送通知
- 06批量管理模拟器生命周期
适用场景
- 01自动化 iOS 应用界面测试
- 02验证辅助功能和视觉变化
- 03测试权限、剪贴板与通知流程
- 04在 CI/CD 中管理模拟器
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ ovachiever/ droid-tings --skill ios-simulator-skill安装后在 Claude Code 中输入/ios-simulator-skill确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
scripts/accessibility_audit.pyapp_launcher.pyapp_state_capture.pybuild_and_test.pyclipboard.pygesture.pykeyboard.pylog_monitor.pynavigator.pyprivacy_manager.pypush_notification.pyscreen_mapper.pysim_health_check.shsim_list.pysimctl_boot.pysimctl_create.pysimctl_delete.pysimctl_erase.pysimctl_shutdown.pysimulator_selector.pystatus_bar.pytest_recorder.pyvisual_diff.pyscripts/common/__init__.pycache_utils.pydevice_utils.pyidb_utils.pyscreenshot_utils.pyscripts/xcode/__init__.pybuilder.py详细介绍
iOS 模拟器技能
使用无障碍驱动的导航和结构化数据,而不是像素坐标,来构建、测试和自动化 iOS 应用。
快速开始
# 1. Check environment
bash scripts/sim_health_check.sh
# 2. Launch app
python scripts/app_launcher.py --launch com.example.app
# 3. Map screen to see elements
python scripts/screen_mapper.py
# 4. Tap button
python scripts/navigator.py --find-text "Login" --tap
# 5. Enter text
python scripts/navigator.py --find-type TextField --enter-text "[email protected]"
所有脚本都支持 --help,以查看详细选项;也支持 --json,以输出机器可读的数据。
21 个生产级脚本
构建与开发(2 个脚本)
-
build_and_test.py - 构建 Xcode 项目、运行测试,并通过渐进式披露解析结果
- 构建时实时流式输出结果
- 从 xcresult 包中解析错误和警告
- 按需检索详细构建日志
- 选项:
--project、--scheme、--clean、--test、--verbose、--json
-
log_monitor.py - 实时监控日志并进行智能筛选
- 流式输出日志,或按时长捕获日志
- 按严重程度筛选(错误/警告/信息/调试)
- 对重复消息去重
- 选项:
--app、--severity、--follow、--duration、--output、--json
导航与交互(5 个脚本)
-
screen_mapper.py - 分析当前屏幕并列出交互元素
- 按元素类型分类
- 列出可交互按钮
- 显示文本字段状态
- 选项:
--verbose、--hints、--json
-
navigator.py - 通过语义查找并与元素交互
- 按文本查找(模糊匹配)
- 按元素类型查找
- 按无障碍 ID 查找
- 输入文本或轻点元素
- 选项:
--find-text、--find-type、--find-id、--tap、--enter-text、--json
-
gesture.py - 执行轻扫、滚动、捏合和复杂手势
- 定向轻扫(上/下/左/右)
- 多次轻扫以滚动
- 捏合缩放
- 长按
- 下拉刷新
- 选项:
--swipe、--scroll、--pinch、--long-press、--refresh、--json
-
keyboard.py - 文本输入和硬件按钮控制
- 输入文本(快速或慢速)
- 特殊按键(回车、删除、制表、空格、方向键)
- 硬件按钮(主屏幕、锁定、音量、截屏)
- 按键组合
- 选项:
--type、--key、--button、--slow、--clear、--dismiss、--json
-
app_launcher.py - 管理应用生命周期
- 按 bundle ID 启动应用
- 终止应用
- 从 .app 包安装/卸载应用
- 深度链接导航
- 列出已安装的应用
- 检查应用状态
- 选项:
--launch、--terminate、--install、--uninstall、--open-url、--list、--state、--json
测试与分析(5 个脚本)
-
accessibility_audit.py - 检查当前屏幕是否符合 WCAG 要求
- 严重问题(缺少标签、按钮为空、没有替代文本)
- 警告(缺少提示、小型触控目标)
- 信息(缺少 ID、嵌套过深)
- 选项:
--verbose、--output、--json
-
visual_diff.py - 比较两张截图的视觉变化
- 逐像素比较
- 基于阈值判定通过/失败
- 生成差异图像
- 选项:
--threshold、--output、--details、--json
-
test_recorder.py - 自动记录测试执行过程
- 在每个步骤捕获截图和无障碍树
- 生成包含计时数据的 Markdown 报告
- 选项:
--test-name、--output、--verbose、--json
-
app_state_capture.py - 创建全面的调试快照
- 截图、UI 层级结构、应用日志、设备信息
- 生成用于 Bug 报告的 Markdown 摘要
- 选项:
--app-bundle-id、--output、--log-lines、--json
-
sim_health_check.sh - 验证环境配置是否正确
- 检查 macOS、Xcode、simctl、IDB、Python
- 列出可用和已启动的模拟器
- 验证 Python 包(Pillow)
高级测试与权限(4 个脚本)
-
clipboard.py - 管理模拟器剪贴板以进行粘贴测试
- 将文本复制到剪贴板
- 无需手动输入即可测试粘贴流程
- 选项:
--copy、--test-name、--expected、--json
-
status_bar.py - 覆盖模拟器状态栏外观
- 预设:clean(9:41,100% 电量)、testing(11:11,50%)、low-battery(20%)、airplane(离线)
- 自定义时间、网络、电池和 WiFi 设置
- 选项:
--preset、--time、--data-network、--battery-level、--clear、--json
-
push_notification.py - 发送模拟推送通知
- 简易模式(标题 + 正文 + 徽标)
- 自定义 JSON 载荷
- 测试通知处理和深层链接
- 选项:
--bundle-id、--title、--body、--badge、--payload、--json
-
privacy_manager.py - 授予、撤销和重置应用权限
- 支持 13 种服务(相机、麦克风、位置、联系人、照片、日历、健康等)
- 批量操作(以逗号分隔的服务)
- 记录审计轨迹并跟踪测试场景
- 选项:
--bundle-id、--grant、--revoke、--reset、--list、--json
设备生命周期管理(5 个脚本)
-
simctl_boot.py - 启动模拟器,可选验证其是否就绪
- 按 UDID 或设备名称启动
- 等待设备就绪,并设置超时时间
- 批量启动操作(--all、--type)
- 性能计时
- 选项:
--udid、--name、--wait-ready、--timeout、--all、--type、--json
-
simctl_shutdown.py - 正常关闭模拟器
- 按 UDID 或设备名称关闭
- 可选验证关闭是否完成
- 批量关闭操作
- 选项:
--udid、--name、--verify、--timeout、--all、--type、--json
-
simctl_create.py - 动态创建模拟器
- 按设备类型和 iOS 版本创建
- 列出可用设备类型和运行时
- 自定义设备名称
- 返回 UDID,以便集成到 CI/CD
- 选项:
--device、--runtime、--name、--list-devices、--list-runtimes、--json
-
simctl_delete.py - 永久删除模拟器
- 按 UDID 或设备名称删除
- 默认要求安全确认(使用 --yes 跳过)
- 批量删除操作
- 智能删除(使用 --old N 时,每种设备类型保留 N 台)
- 选项:
--udid、--name、--yes、--all、--type、--old、--json
-
simctl_erase.py - 将模拟器恢复出厂设置,但不删除
- 保留设备 UUID(比删除后重新创建更快)
- 擦除全部、指定类型或已启动的模拟器
- 可选验证
- 选项:
--udid、--name、--verify、--timeout、--all、--type、--booted、--json
常见模式
自动检测 UDID:大多数脚本会在未提供 --udid 时自动检测已启动的模拟器。
设备名称解析:可使用设备名称(例如,“iPhone 16 Pro”)代替 UDID,脚本会自动解析。
批量操作:许多脚本支持使用 --all 操作所有模拟器,或使用 --type iPhone 按设备类型筛选。
输出格式:默认输出简洁易读的内容。在 CI/CD 中使用 --json 可获得机器可读的输出。
帮助:所有脚本均支持 --help,可查看详细选项和示例。
典型工作流
- 验证环境:
bash scripts/sim_health_check.sh - 启动应用:
python scripts/app_launcher.py --launch com.example.app - 分析屏幕:
python scripts/screen_mapper.py - 交互:
python scripts/navigator.py --find-text "Button" --tap - 验证:
python scripts/accessibility_audit.py - 根据需要进行调试:
python scripts/app_state_capture.py --app-bundle-id com.example.app
要求
- macOS 12+
- Xcode Command Line Tools
- Python 3
- IDB(可选,用于交互功能)
文档
- SKILL.md(本文件)- 脚本参考和快速入门
- README.md - 安装和示例
- CLAUDE.md - 架构和实现细节
- references/ - 特定主题的深入文档
- examples/ - 完整的自动化工作流
核心设计原则
语义导航:根据含义(文本、类型、ID)而非像素坐标查找元素。即使 UI 发生变化,也能正常工作。
节省令牌:默认输出简洁(3-5 行),并提供可选的详细模式和 JSON 模式来显示详细结果。
无障碍优先:基于标准无障碍 API 构建,确保可靠性和兼容性。
零配置:在任何装有 Xcode 的 macOS 上都能立即使用。无需设置。
结构化数据:脚本输出 JSON 或格式化文本,而非原始日志。易于解析和集成。
自动学习:构建系统会记住你的设备偏好。配置按项目存储。
你可以直接使用这些脚本,也可以让 Claude Code 在你的请求符合技能描述时自动调用它们。