乐于分享
好东西不私藏

让 Claude 直接操控 iOS 模拟器!1.8K star 神器 AXe 把 UI 自动化变成一句话

让 Claude 直接操控 iOS 模拟器!1.8K star 神器 AXe 把 UI 自动化变成一句话

这里每天分享一个 iOS 的新知识,快来关注我吧

前言

iOS 模拟器自动化这事,我大概折腾过四种方案:

  1. 写 XCUITest(笨重,绑死 Xcode)
  2. xcrun simctl(命令太少)
  3. 起 Facebook 的 idb(要拉起 server,配置一坨)
  4. 或者直接 AppleScript 控鼠标键盘(脏到不能上线)

每一种都有点不对劲。直到最近看到 GitHub 上一个 1.8K star 的小工具——cameroncooke/AXe[1]:单一 Swift 写的 CLI 二进制,无 server,覆盖 tap / swipe / type / 硬件按键 / 截图 / 录屏 / accessibility 树查询,全功能能在一个命令里跑完。

更骚的是它直接支持装成 Claude Code 的 skill——也就是说你的 AI Agent 现在能像人一样操作模拟器,写测试、做回归、自动化 demo 录制都顺手了。

这篇就把它讲清楚。

它能干啥

先看一眼 demo:

核心命令我列一下,基本覆盖了 iOS 模拟器上你能想到的所有人类操作:

类别 命令示例
点击 axe tap -x 100 -y 200(坐标)/ axe tap --id "Safari"(按 a11y ID)
滑动 axe swipe --start-x 100 --start-y 300 --end-x 300 --end-y 100
手势预设 axe gesture scroll-up / swipe-from-left-edge(边缘返回)
输入文本 axe type 'Hello World!' / `echo “…” \ axe type –stdin`
硬件按键 axe button home / lock / siri / apple-pay
键盘组合 axe key-combo --modifiers 227 --key 4(Cmd+A)
截图 axe screenshot --output ~/Desktop/shot.png
录屏 axe record-video --fps 15 --output recording.mp4
视频流 `axe stream-video –fps 30 –format ffmpeg \ ffmpeg …`
Accessibility 树 axe describe-ui --point 100,200
批量操作 axe batch --step "..." --step "..."

底层走的是 Apple 私有 Accessibility API + HID(Human Interface Device)通道,所以不需要在被测 App 里集成任何 SDK,纯外部驱动。

第一个亮点:按 accessibility ID 直接 tap

写过 UI 自动化的都知道,按坐标点是一切恶心 bug 的源头——换个屏幕尺寸、换个 iOS 版本、动态布局微调一下,所有坐标全废。

AXe 直接复用 Accessibility Tree,让你按 ID 或 Label 点击:

# 按 accessibility identifier
axe tap –id “search_button” –udid $UDID

# 按 label(更适合中文 / 系统控件)
axe tap –label “Safari” –udid $UDID

这等于把 XCUITest 里 app.buttons["search_button"].tap() 这一套体验搬到了 CLI 外面。你的脚本、CI、AI Agent 都能直接用,不用再写 XCUITest target、不用 build for testing。

不知道目标控件的 ID?就先 describe-ui 把树打出来:

axe describe-ui –udid $UDID
# 或者只看某个点位的 a11y 信息
axe describe-ui –point 195,400 –udid $UDID

输出是结构化的 JSON,给 AI Agent 当上下文喂特别合适——它一眼就能看懂当前页面有哪些可交互元素。

第二个亮点:batch 一次跑完整段流程

每个 axe 命令冷启动都要做几件事:连模拟器、初始化 HID 通道、可能还要拉一次 a11y 缓存。如果你写「点搜索框 → 输入 hello → 回车」这种 3 步操作,分 3 次调 axe 会很慢。

batch 子命令把多步打成一次调用:

axe batch –udid $UDID \
  –step “tap –id SearchField” \
  –step “type ‘hello world'” \
  –step “key 40”            # Enter

或者把步骤写到文件里,方便版本管理:

axe batch –udid $UDID –file flows/search.txt

batch 默认 fail-fast(任一步失败就停),加 --continue-on-error 切到 best-effort 模式。a11y 缓存复用 --ax-cache perBatch,长文本输入自动 chunk 防截断。这一套配下来,整段流程的延迟基本被打平到接近”原生”水平——仓库里有个 scripts/benchmark_batch.sh,你可以自己跑下对比。

第三个亮点:直接装成 Claude Code 的 skill

这条是我觉得 AXe 在 2026 年之所以能站稳的关键。

它内置了一个 axe init 命令,能一键把自己注册成 AI 编码工具的 skill

# 自动检测已安装的 ~/.claude 或 ~/.agents
axe init

# 显式指定客户端
axe init –client claude
axe init –client agents

# 装到自定义目录
axe init –dest ~/.claude/skills

# 卸载
axe init –uninstall –client claude

装完之后,你在 Claude Code 里就能直接说:

“帮我跑一下 App,进入登录页,输入测试账号 admin/123456,截个图给我看看”

Agent 会自己 axe list-simulatorsaxe describe-ui 找到登录控件 → axe batch 跑完一整套交互 → axe screenshot 把截图回传。整个过程你只动嘴不动手。

这一套以前你要么写 XCUITest(写完还得跑),要么手动操作。现在等于把模拟器的「眼睛」(describe-ui)和「手」(tap/type/swipe)一起给了 Agent。

vs idb / simctl 该怎么选

我把这三者做个并排对比,方便你选:

维度 xcrun simctl Facebook idb AXe
安装 Xcode 自带 brew + Python daemon 单二进制(brew)
架构 CLI client/server CLI
Tap by a11y ID
Gesture preset 部分 ✅(scroll/edge swipe)
视频录制 ✅ 基础 ✅ MP4 + 多种流格式
Batch 多步 通过 RPC ✅ 原生
AI Agent skill ✅ 一键装
维护活跃度 Apple 半停滞 活跃

简单说:只是开关模拟器、装卸 App、看 log,simctl 够了重型分布式自动化、跨设备调度,上 idb单机 CLI 自动化 + AI Agent 驱动,AXe 是当前最顺手的

怎么开始

最快的方式是 brew:

brew install cameroncooke/axe/axe
axe –help

然后启个模拟器、拿到 UDID 就能玩:

axe list-simulators                                   # 拿 UDID
UDID=B34FF305-5EA8-412B-943F-1D0371CA17FF
axe screenshot –udid $UDID –output ~/Desktop/s.png
axe tap –label “Settings” –udid $UDID
axe gesture scroll-down –udid $UDID

5 分钟内你就能感觉到「模拟器是可以被 CLI 像玩偶一样操控的」这件事多爽。

后面要接 AI Agent,就 axe init --client claude,让 Claude Code 自动识别这个 skill。

仓库地址:https://github.com/cameroncooke/AXe[2],MIT License,Swift 写的,1.8K star,issue 响应也活跃,可以放心入。

最后

AI 时代下,你团队 iOS 自动化用的是哪一套?欢迎评论区聊聊~

参考资料

[1]cameroncooke/AXe: https://github.com/cameroncooke/AXe
[2]https://github.com/cameroncooke/AXe: https://github.com/cameroncooke/AXe

这里每天分享一个 iOS 的新知识,快来关注我吧