sim-use:给 AI Agent 装上「眼睛和手」,直接操控 iOS 模拟器与 Android 设备

如果你在用 Claude Code、Cursor 或 OpenClaw 这类 AI 编程助手开发移动端应用,你一定遇到过这个痛点:AI 可以帮你写代码,但它看不到运行效果,也点不了按钮。你只能自己手动跑模拟器截图,然后把结果描述给 AI,效率大打折扣。

最近 GitHub 上一个叫 sim-use 的项目火了——不到一周斩获 400+ stars。它只用一条 CLI 命令,就让 AI Agent 能像人一样观察和操控 iOS 模拟器和 Android 设备屏幕。

sim-use 是什么?

sim-use 是一个跨平台命令行工具,由 lycorp-jp 团队开发,基于 Apache 2.0 协议开源。它通过 Apple Accessibility API 和 Android AccessibilityService 来获取屏幕元素树,再通过模拟器 HID 管线来注入点击、滑动、输入等操作。

一句话概括:给 AI Agent 装上眼睛和手,让它能看懂 App 画面,并像真人一样操作

核心亮点

  • Token 高效:屏幕描述比原始 Accessibility JSON 树精简约 16 倍,LLM 只需几百个 token 就能理解整个页面
  • AI 原生设计:不是为人类测试者设计的工具,而是为 AI Loop 量身打造——别名缓存点击(@N)、结构化 JSON 输出、内置 agent skill
  • 速度快:每个 UDID 自动起后台 daemon,首次调用后每次 observe-act 循环仅需约 300ms
  • 真跨平台:同一套命令(uitapswipetypepaste)同时驱动 iOS 模拟器和 Android 模拟器/真机
  • 无遗漏:完整遍历 Accessibility 树,包括 WebView、系统浮层、嵌入内容——不会有元素被静默跳过

技术架构

sim-use 用 Swift 编写,要求 macOS 14+。底层分为两条链路:

  • iOS 端:链接 Meta idb 的 XCFrameworks,通过 Apple Accessibility API 获取元素树,通过模拟器 HID 管线注入触控事件
  • Android 端:通过 adb 安装桥接 APK,该 APK 暴露 AccessibilityService 树和 HTTP 输入注入接口,经 adb forward 隧道通信

设备 ID 的形状决定走哪条链路:UUID 格式走 iOS,emulator-5554 或 serial 号走 Android。

安装与快速上手

安装

推荐通过 Homebrew:

brew tap lycorp-jp/tap
brew install lycorp-jp/tap/sim-use

也可以从源码编译(需要 Xcode):

git clone https://github.com/lycorp-jp/sim-use.git
cd sim-use
./scripts/build.sh dev
make build
.build/debug/sim-use --help

安装 Agent Skill(让 AI 学会用它)

# 自动检测已安装的 AI 客户端
sim-use init

# 指定客户端
sim-use init --client claude
sim-use init --dest ~/.claude/skills

# 仅查看 skill 内容,不安装
sim-use init --print

基础用法

先获取当前设备 ID:

sim-use devices
# 输出:B34FF305-5EA8-412B-943F-1D0371CA17FF

然后执行 Observe → Act 循环:

# 1. 观察屏幕——获取结构化元素列表
sim-use ui
# 输出类似:
# App: Settings  402x874
# [Top  y<120]
#   @1  StaticText  "Settings"
# [Content  y=120..754]
#   @5  SearchField  "Search"
#   @9  Button  "General"
#   ...

# 2. 操作——用别名点击
sim-use tap @9     # 点击 "General"

# 3. 验证——再看一眼屏幕
sim-use ui

完整命令一览

命令功能示例
ui获取屏幕元素树sim-use ui --json
tap点击元素sim-use tap @5 / tap --label "General"
swipe滑动sim-use swipe --start-x 100 --start-y 500 --end-x 100 --end-y 200
type文本输入sim-use type 'Hello World!'
paste粘贴(IME 安全的 Unicode)sim-use paste 'ABC 日本語 🎉'
button硬件按键sim-use button home / button siri
screenshot截图sim-use screenshot --output screen.png
record-video录屏sim-use record-video --fps 15 --output demo.mp4
app-state查看/重置 App 状态sim-use app-state --bundle-id com.example.app
keyboard-state检测软键盘是否弹出sim-use keyboard-state --json
gesture手势预设sim-use gesture scroll-up / gesture swipe-from-left-edge

进阶特性

多种元素选择方式

选择器示例适用场景
@N 别名tap @9速度最快,缓存自上次 ui
#<id>tap #settingsButton最稳定,不受布局变化影响
--labeltap --label "General"脚本化流程,配合 --wait-timeout
-x -ytap -x 100 -y 200兜底方案,无需 AX 数据

批量操作(iOS)

把多个步骤打包成一次调用,共用同一个 HID Session 和 AX 快照,显著降低多步骤流程的往返开销:

sim-use ios batch --device $UDID \
  --step "tap --id SearchField" \
  --step "type 'hello world'" \
  --step "key 40"

# 带等待的批量操作
sim-use ios batch --device $UDID \
  --wait-timeout 5 \
  --step "tap --id LoginButton" \
  --step "tap --id WelcomeMessage"

IME 安全的 Unicode 粘贴

sim-use paste 不走键盘 HID,而是通过模拟器剪贴板 + Cmd+V 注入文本,完美支持中文、日文、emoji 等 HID 键码表无法表达的字符。还提供了 --via-menu 选项通过 iOS 编辑菜单的「粘贴」按钮来注入,适合在软键盘模式下使用。

内置 Viewer

sim-use 自带了本地 Web 查看器,将 ui --json 渲染成 SVG 画布,可视化 Accessibility 树,帮助开发者定位盲点:

sim-use viewer

无需 Node 或 npm——页面内嵌在二进制中,开箱即用。

典型应用场景

  • AI 辅助移动端开发:Claude Code / Cursor 写好 UI 代码后,自动启动模拟器截图验证,发现 bug 后自行修复
  • 自动化测试:结合 LLM 编写自然语言测试用例,无需维护脆弱的 UI 元素定位器
  • 移动端 RPA:让 AI Agent 替你完成批量注册、数据录入等重复性操作
  • 无障碍测试:利用 Viewer 和 Accessibility 树,快速发现 App 的无障碍盲点
  • CI/CD 集成:在 GitHub Actions 或 Jenkins 中运行模拟器 + sim-use,实现端到端自动化验证

小结

sim-use 解决了 AI Agent 与移动端之间的「最后一公里」问题。当你的 AI 助手不仅能写代码、还能直接在模拟器里看到效果并交互时,移动端开发的效率会有一个质的飞跃。

这个项目目前还非常年轻(6月26日创建),但设计思路清晰、文档详尽、跨平台支持到位,是 AI 驱动的移动开发工具链中值得关注的一环。

GitHub 地址https://github.com/lycorp-jp/sim-use

许可证:Apache 2.0

语言:Swift(macOS 14+)

© 版权声明
THE END
喜欢就支持一下吧
点赞15 分享