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,暴露与模拟器相同的控制和视频流。

如何开始

  1. 安装 npm 包
    npm i -g @zseven-w/dsh-ios   # 或添加到项目依赖中
    
  2. 运行 DSH 会话 – 启动 DeepSeek Harness(运行对话 UI 的主机)。如果 DSH 版本为 0.1.5-rc.1 或更高,则插件会自动发现。
  3. 启动模拟器(示例 JSON 工具调用)
    { "tool": "ios_sim_boot", "args": { "udid": "iPhone-14-Simulator" } }
    
    右侧面板将出现已启动设备的实时 MJPEG 视图。
  4. 交互 – 使用 ios_sim_interact 点击、输入或按 Home 键,或调用 ios_sim_ui_tree 获取可访问性地图,然后使用 ios_sim_tap_element 通过标签点击按钮。
  5. 运行自己的代码 – 将 ios_sim_build_run 指向 Xcode 项目或 Swift 包,或使用 ios_sim_preview 启动 SwiftUI 预览。
  6. 真实 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 自动化成为可能。

相关

  • 项目
  • 项目
  • 项目
  • 项目