ZSeven-W/dsh-ios
DeepSeek Harness (DSH) plugin: a live iOS Simulator — and a USB-connected iPhone — inside the conversation. 22 agent tools for booting, building, driving the UI by accessibility identity, OCR text or list rows, plus a streaming sidebar panel you can tap and drag on.
DSH iOS 模拟器 – 由 AI 代理驱动的 iOS 设备视图
是什么 – DeepSeek Harness (DSH) 会话平台的插件(@zseven-w/dsh-ios),允许 LLM 驱动的代理(或用户)在聊天窗口内控制 iOS 模拟器 或真实 iPhone。设备屏幕以 MJPEG 视频流形式持续显示在右侧面板中,22 个基于 JSON 的 代理工具(启动、构建、UI 树、OCR、点击、日志、SwiftUI 热重载等)使模型能够安全且交互式地查看和控制 iOS 设备。
核心理念
| 理念 | 工作方式 |
|---|---|
| 实时视觉反馈 | 模拟器(或通过 USB 连接的 iPhone)通过签名的、仅限回环的 URL(/_dsh/dsh-ios/*)流式传输视频。浏览器从不直接与模拟器端口通信;所有字节均由 DSH Web 服务器代理。 |
| 代理友好型工具 | 每项功能均以纯 JSON 工具形式暴露(例如 ios_sim_boot、ios_sim_interact、ios_sim_ui_tree)。LLM 可调用工具,获取结构化输出,并决定下一步操作,从而实现完全自主的 UI 自动化。 |
| 真实设备支持 | 当通过 USB 连接真实 iPhone 时,插件会在设备上构建并启动 WebDriverAgent,通过 USB-mux 回环隧道传输其控制和 MJPEG 端口,并复用相同的 UI 面板和工具集。 |
| 安全门控 | 所有点击均通过可访问性计数器、OCR 文本或显式的 expect_* 参数进行验证。除非目标被唯一识别,否则真实设备点击将被阻止。 |
| SwiftUI 热重载 | ios_sim_preview 创建一个临时宿主应用,将 SwiftUI 预览构建为 dylib,并在约 2–5 秒内热交换到运行中的模拟器,使代理能即时查看 UI 变化。 |
主要功能组
| 组 | 代表性工具 | 可执行操作 |
|---|---|---|
| 设备生命周期 | ios_sim_devices、ios_sim_boot、ios_sim_shutdown |
列出模拟器,启动/停止它们,流式传输其屏幕。 |
| 应用管理 | ios_sim_list_apps、ios_sim_launch_app、ios_sim_build_run |
发现已安装的应用,启动它们,或从源码构建 Xcode 项目并在模拟器或真实手机上运行。 |
| 交互 | ios_sim_interact、ios_sim_tap_element、ios_sim_tap_text、ios_sim_find_text、ios_sim_tap_row |
使用可访问性标识符、OCR 检测文本或列表行坐标进行点击、输入、按压硬件按钮、滚动或手势操作。 |
| UI 检查 | ios_sim_ui_tree、ios_sim_ui_rows |
导出可访问性层次结构或更高层级的列表视图,包含列表型应用的解析计数器。 |
| 诊断 | ios_sim_logs、ios_sim_processes、ios_sim_backtrace、ios_sim_leaks、ios_sim_app_info |
提取统一日志、枚举进程、捕获回溯、运行 Xcode 的泄漏检测器,或查询应用包信息。 |
| 预览 | ios_sim_preview |
无需重新启动应用即可热重载 SwiftUI 预览。 |
| 真实设备桥接 | ios_real_start_wda |
在连接的 iPhone 上构建并启动 WebDriverAgent,暴露与模拟器相同的控制和视频流。 |
如何开始
- 安装 npm 包
npm i -g @zseven-w/dsh-ios # 或添加到项目依赖中 - 运行 DSH 会话 – 启动 DeepSeek Harness(运行对话 UI 的主机)。如果 DSH 版本为
0.1.5-rc.1或更高,则插件会自动发现。 - 启动模拟器(示例 JSON 工具调用)
右侧面板将出现已启动设备的实时 MJPEG 视图。{ "tool": "ios_sim_boot", "args": { "udid": "iPhone-14-Simulator" } } - 交互 – 使用
ios_sim_interact点击、输入或按 Home 键,或调用ios_sim_ui_tree获取可访问性地图,然后使用ios_sim_tap_element通过标签点击按钮。 - 运行自己的代码 – 将
ios_sim_build_run指向 Xcode 项目或 Swift 包,或使用ios_sim_preview启动 SwiftUI 预览。 - 真实 iPhone – 插入手机,运行
ios_real_start_wda并指定其 UDID,然后相同的交互工具即可在物理设备上使用。
限制与注意事项
- 仅限 macOS 模拟器控制 – 与
simctl/serve-sim通信的工具需要 Mac。在其他操作系统上,工具会注册但返回解释性错误。 - USB 设备需要解锁手机,且用户必须授予“点击前识别”权限;所有真实设备点击均需验证以避免意外操作。
- 仅限回环传输 – 所有流量均保留在
127.0.0.1;若无额外隧道化,无法跨网络使用。 - 性能 – 真实设备上的深度可访问性快照可能需要数秒(未限制树最多约 30 秒)。列表行提取(
ios_sim_ui_rows)同样耗性能;建议优先使用轻量工具(ios_sim_find_text、ios_sim_ui_tree且深度较浅)。 - 热重载预览 – 仅适用于 SwiftUI 预览;它在
~/Library/Caches/dsh-ios中构建临时宿主应用并监视源文件。一次仅支持一个预览会话。 - 安全 – 签名 URL 在 10 分钟后过期;DSH 服务器在每次请求中验证
Host、Fetch-Metadata和 HMAC。
适合谁使用
- 需要测试 iOS UI、运行自动化 UI 回归检查或在聊天中演示应用行为的 LLM 驱动 AI 代理。
- 希望在通过对话界面迭代 SwiftUI 代码时获得快速视觉反馈(模拟器或真实设备)的 开发者。
- 寻找一种程序化、基于 JSON 的方式驱动 iOS UI 而无需编写 XCUITest 脚本的 QA 工程师。
快速参考表(精选工具)
| 工具 | 主要用途 | 关键参数 |
|---|---|---|
ios_sim_devices |
列出可用的模拟器和连接的 iPhone | – |
ios_sim_boot |
启动模拟器并开始流式传输 | udid(或设备名称) |
ios_sim_interact |
通用点击/手势/键盘操作 | action、x、y、text、… |
ios_sim_ui_tree |
导出可访问性层次结构 | udid、max_depth、filter |
ios_sim_tap_element |
通过标签/标识符点击元素 | identifier / label,可选验证标志 |
ios_sim_find_text |
OCR 当前屏幕 | query、min_confidence |
ios_sim_tap_row |
通过计数器验证点击列表/信息流行内 | index、x、y、expect_count |
ios_sim_preview |
SwiftUI 热重载预览 | packagePath、action(start/status/stop) |
ios_real_start_wda |
在 USB iPhone 上启动 WebDriverAgent | udid |
总结
DSH iOS 模拟器 将 iOS 模拟器或真实 iPhone 转变为一个 AI 代理可通过简单 JSON 调用查看和控制的实时、无图像视觉端点。通过将所有媒体保留在签名的回环 URL 后,并提供经过安全检查的交互工具,它使在对话式 AI 工作流中实现自主 iOS UI 自动化成为可能。
相关
- 项目
- 项目
- 项目
- 项目