Device Interaction 是一个用于在设备或模拟器上验证 iOS 应用行为的子智能体(SUBAGENT)技能,由主智能体在需要设备验证时通过 Agent 工具调用,子智能体类型为 general-purpose。
用途与触发条件 该技能在以下情况触发:用户要求验证/测试/检查应用在设备上是否工作;实现了影响 UI 的功能后需要设备验证;用户询问“能用吗”“测试一下”“在设备上检查”;用户反馈 UI 未按预期工作;需要调试触摸或交互问题。 以下情况不触发:仅涉及单元测试;仅构建而不进行设备测试;只做代码审查而不进行设备测试;模拟器配置问题;不影响 UI 的改动(如注释、重构、非 UI 逻辑)。
会话生命周期 流程为:DeviceInteractionStartSession(尽早在后台启动)→ DeviceInteractionInstallAndRun(每次代码改动后执行,包含构建)→ DeviceEventSynthesize(交互与观测,可重复)→ DeviceInteractionEndSession(完成时调用,保持会话开启会占用较多资源)。
主要工具与能力 DeviceInteractionStartSession:开启新会话时传入设备标识以选择设备,省略则使用当前目标;传入不匹配的值可获取可用目标列表。 DeviceInteractionInstallAndRun:可选参数 commandLineArguments(启动时传给应用的参数,使用 $(inherited) 保留 scheme 现有参数)和 environmentVariables(启动时设置的环境变量,使用 "$(inherited)" 作为键保留现有环境变量)。省略两者则保持 scheme 参数与环境不变。建议优先使用这些参数而非直接修改 scheme。 DeviceEventSynthesize:执行交互并观测设备状态。使用空 interactionCommand 可在不交互的情况下进行捕获。
读取层级文件 层级文件包含每个元素的计算中心位置,例如:UIView {{100, 200}, {50, 30}}, center: {125.0, 215.0};UIButton "Login" {{110, 205}, {30, 20}}, center: {125.0, 215.0}。其中 {100, 200} 为原点位置,{50, 30} 为宽高,center 为计算中心点(最适合点击),触摸事件应始终优先使用中心坐标。
交互命令语法 interactionCommand 参数接受如下命令:t <x> <y> [duration] 点击(可带按住时长);d <x> <y> 双击;t <x1> <y1> f <x2> <y2> [duration] 滑动;b h/p/u/d [duration] 硬件按键(h=Home,p=Power,u=VolUp,d=VolDown);sender keyboard kbd <text> 输入文本(必须是命令链中最后一个命令,kbd 之后内容原样保留,支持多个空格;特殊字符用 \u{XXXX} Unicode 转义,如 \u{000A} 回车换行、\u{0009} 制表符);w duration 等待;orientation faceDown/faceUp/landscapeLeft/landscapeRight/portrait/portraitUpsideDown 设置设备方向。 例如:"t 100 200" 点击;"d 200 300" 双击;"t 200 600 f 200 200 0.3" 向上滑动;"b h b h" 连按两次 Home 进入应用切换器;"sender keyboard kbd submit\u{000A}" 输入文本后回车。
标准子智能体工作流 任何交互前先捕获并读取层级(及截图),交互后再次捕获并验证结果。对于复杂组件(如开关或滑块),查看嵌套元素(如 Switch 或 Slider),附近元素可能对应实际控件。切勿仅凭截图猜测位置,始终使用层级中心坐标;若不确定或缩略图分辨率不足,分析全尺寸截图。
时序与重试 应用启动:会话开始后应用可能需数秒加载,交互前先捕获层级并检查是否有有意义的 UI 元素;若层级基本为空或显示启动屏幕,再次捕获后再继续。交互后:若点击或滑动未产生预期变化,重新捕获层级并重试一次(元素可能在动画中移位);若一次重试后仍失败,报告失败而不要无限重试。加载状态:若层级显示加载指示器,稍作停顿后再次捕获,不要与仍在加载的元素交互。
成功与失败判断 功能缺陷(始终报告):元素不响应点击、导航到错误屏幕、崩溃、数据未显示、缺少预期 UI 元素。视觉/布局缺陷(始终报告):文字重叠、标签截断、元素渲染到屏幕外、颜色错误、对齐错乱。瞬态状态(不作为缺陷报告):加载指示器、短暂动画、键盘出现/消失,转场完成后再次捕获。意外退出(始终报告):崩溃、应用退出,通过跟踪进程 id 并捕获标准输出识别。预期行为(不作为缺陷报告):带占位文本的空状态、表单不完整时的禁用按钮、权限对话框。
错误处理 若应用不可见,重试一次(可能是设备较慢)。若点击目标不明确,重新读取层级数据以获取正确中心坐标。可检查运行时日志进行排查;若怀疑时序缺陷,可建议主智能体在相关代码中临时添加 print 语句以辅助诊断。将问题连同细节和建议报告给主智能体。
适用场景与限制 适用于 iOS 应用在真机或模拟器上的 UI 验证与交互调试,覆盖功能缺陷与视觉布局缺陷的判断。不适用于仅单元测试、仅构建、仅代码审查、模拟器配置及不影响 UI 的改动。关于具体支持的设备型号范围、是否需要额外依赖或安装步骤,资料暂未提供。