mcpField
I
ios-simulator

ios-simulator

github.com/tristanmanchester测试与质量4102 次安装7 周前更新
代码仓库

关于 ios-simulator

面向 iOS 模拟器测试的技能,结合 Apple 的 `xcrun simctl` 与 `idb`,指导开发者选择目标、执行界面操作并验证结果,同时强调设备身份与操作安全。

主要功能

  1. 01选择并核实准确的模拟器目标
  2. 02使用 `simctl` 管理应用安装与启动
  3. 03通过 `idb` 检查和操作界面
  4. 04检查后置条件并保存测试证据
  5. 05谨慎处理命令超时与高风险操作

适用场景

  1. 01在指定模拟器上复现 iOS 应用问题
  2. 02使用无障碍元素执行界面检查
  3. 03保存截图和日志作为测试证据

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/tristanmanchester/agent-skills --skill ios-simulator

安装后在 Claude Code 中输入/ios-simulator确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
OPERATIONS.md
scripts/
run.mjs
tests/
run.test.mjs

详细介绍

iOS 模拟器

使用 Apple 的 xcrun simctl 执行生命周期和应用操作,使用当前版本的 idb 进行无障碍和输入操作。保留原生命令语法,不要另用一套模拟器 API。将 SKILL_DIR 解析为此文件所在目录;它不是应用仓库的 scripts/ 目录。

确定目标

xcode-select -p
xcodebuild -version
xcrun simctl list --json
idb --help
idb list-targets

记录 Xcode/运行时、模拟器的确切 UDID、应用 bundle ID、构建/配置以及复现步骤。根据实际设备清单进行选择;切勿选择名称模糊匹配的第一个结果,也不要悄然切换到其他已启动的设备。所有操作都使用同一个明确指定的 UDID。在假定目标为本地设备之前,检查生效的 IDB_COMPANION/IDB_UDID 配置,但不要泄露凭据。

只有在获得授权后,才安装缺少的工具或运行时。目前上游提供的安装方式是 brew install facebook/fb/idb,其中包含客户端和 companion。必须安装完整的 Xcode,不能只安装独立的 Command Line Tools。根据安装说明检查主机要求;不要强行在不同架构上运行不受支持的二进制文件。客户端可以连接到获明确授权的远程 Mac;不要臆造远程执行工具,也不要将 companion 暴露到公共网络。

运行、观察、操作、验证

  1. 查看已安装版本的 xcrun simctl help COMMAND 或 idb ui COMMAND --help。不支持的语法属于环境配置问题,不能作为猜测替代命令的理由。
  2. 仅在需要时启动设备,然后使用 xcrun simctl bootstatus "$UDID" -b 等待。启动请求并不能证明应用已就绪;只有确认目标设备的实际状态后,才能接受“设备已启动”错误。
  3. 安装与模拟器兼容的 .app,启动指定的 bundle,并捕获初始屏幕截图/无障碍状态。
  4. 读取当前 UI,找到唯一的目标元素,执行一次获授权的操作,并检查预期的后置条件。布局或导航发生变化后,重新读取。
  5. 保存足够且必要的证据,并区分进程完成与应用行为。仅有屏幕截图或成功点击都不能证明测试通过。
xcrun simctl install "$UDID" /absolute/path/MyApp.app
xcrun simctl launch "$UDID" com.example.MyApp
idb ui describe-all --udid "$UDID"
idb ui text 'test text' --udid "$UDID"
xcrun simctl io "$UDID" screenshot /absolute/path/evidence.png

idb ui text 面向当前聚焦的字段,而不是 idb text。参数中使用模拟值,不要放入真实凭据。条件允许时,优先使用经过验证的无障碍标识符。当前版本的标记匹配方式是首个子字符串匹配,而非完全匹配且唯一:点击前先检查候选项;存在歧义时拒绝操作。对于支持该选项的已安装版本,可使用 --expected-value 进行保护。使用坐标作为后备方案时,需要获取最新图像、正确缩放坐标并确认目标;它不等同于通过无障碍功能激活元素。

其余生命周期、权限、推送、剪贴板、录制、日志和测试工作流,请参阅操作与诊断。

可靠的命令结果

可选辅助工具可以在无交互模式下运行有时限的命令,且不使用 shell:

node "$SKILL_DIR/scripts/run.mjs" --timeout-ms 120000 -- \
  xcrun simctl bootstatus "$UDID" -b

它会返回 JSON 封装结果;若启动失败、子进程退出码非零、收到信号、超时或输出超限,则返回非零退出码。捕获的输出总量默认上限为 1 MiB;--max-bytes 可将上限调整至 16 MiB。它不会解析命令自身的结果、审批操作、删除输出中的敏感信息,也不能保证远程任务终止。请检查嵌套结果并验证状态。超时的写入操作可能已经执行;不要盲目重复点击、购买、推送或破坏性操作。

录制、交互式工具和流式日志应直接运行,并明确控制其生命周期,不要通过此有时限的辅助工具运行。某些执行接口(例如 idb-repl)即使退出码为零,也会在输出中报告执行错误;仅凭进程状态无法验证这些操作。

安全与验收

模拟器应用可以访问真实服务。UI 输入、URL、推送、权限、卸载、抹除和删除都是会产生变更的操作,不能一概视为安全。请使用测试账号和后端,并遵守用户授权的范围。执行破坏性操作前,请确认目标和数据丢失情况;切勿默认选择 all,也不要为了修复无关故障而抹除数据。请将屏幕截图和日志保密,并在分享前检查。

请报告构建版本/UDID、执行的操作、预期结果与实际结果、证据路径以及尚未解决的故障。模拟器测试成功并不能证明实体设备上的性能、商店计费、硬件行为或提交就绪状态。

维护者检查:node --test "$SKILL_DIR/tests/run.test.mjs"。这些运行器测试会检查本地子进程语义,不会测试 Xcode、idb 或真实应用。

评论

支持 Markdown