安卓早就 ADB 一把梭,iPhone 连门都没有:7 美元板子插上充电口,AI 假装成一只鼠标

安卓玩自动化是什么体验?ADB 连上电脑,截屏、点按、滑动一行命令搞定,配上脚本就能挂机。这条路安卓走了十几年,工具链熟得像自来水。iPhone 这边呢?十年,门都没有。iOS 沙盒把程序控制程序的路堵死了,想绕过去,要么备一台 Mac 装 Xcode 玩签名,要么装个 Runner App,能力约等于没有,门槛比手机本身还贵。
2026 年 10 月 11 日,有人在 GitHub 开源了一个项目,13 天,3652 星。思路很损:完全不碰 iOS 底层,让 AI 假装成一个坐在手机前的人,长着眼睛看你屏幕,长着手替你点按,脑子放在云端。
这篇按官方文档把它拆开讲:怎么运作、怎么装、哪里会坑、哪里是真不行。
一个很损的思路:它不破解 iOS,它让 AI 假装成一个人
项目叫 onehumanbeing/esp32-iphone-agent,MIT 协议,主语言 C,作者 Henry Yuan。先纠正一个流传很广的说法:有自媒体把它讲成乐鑫官方开源模拟器,错了,这是单人主导的个人项目,跟乐鑫官方没有任何关系。
组成就三样:一台 iPhone,一块 ESP32-S3 开发板,一个能看图的视觉模型接口(OpenAI 兼容)。
- 眼睛:板子自己开一个 Wi-Fi 热点,iPhone 连上去,在控制中心的屏幕镜像里选 ESP32 Agent,把屏幕 AirPlay 给板子。ESP32 不解码 H.264,它把码流用低功耗蓝牙转回同一台 iPhone 上的 app,由 app 解码成截图。
- 大脑:截图发给视觉模型,app 里的 planner 负责拆解目标,actor 决定下一个动作,点、滑、画、打字、按键、回主屏。推理不在板子上跑,app 在后台运行,支持的机型能用灵动岛上的 Live Activity 看进度。
- 手:板子把自己伪装成一个标准 USB 鼠标键盘,iOS 的辅助触控会显示一个屏幕指针,点鼠标等于点屏幕,按住拖动等于滑动。板子的电也由 iPhone 的 USB 口供。
它凭什么走得通?因为没碰 iOS 任何底层。AirPlay 镜像、USB 外设、辅助触控,全是 iOS 本来就开放给用户的功能,作者只是把这三个口子拼成了眼睛加手,走的是所有 App 都有的那层可见界面。
阿里开源的 OpenGCUA 是另一种让 AI 动界面的路子,把 GUI 操作写成代码去执行。一个借真手,一个写指令,路不同,题相同。

真上手:一块板子、一台 Mac、四道检查
官方验证过的组合很具体:Seeed Studio XIAO ESP32S3 平装版,8MB PSRAM 那款,约 7 美元。Sense 版和 Plus 版都不在验证列表里,别买错。手机要 iOS 18 以上,USB-C 直连,Lightning 要加一个转 USB 相机转换器。
先交代版本这条暗线。最早的 legacy 分支要一台 Mac 或 Linux 跑 UxPlay 当 AirPlay 接收端,再加一个 Python server,运行期离不开电脑。现在的 main 把接收端搬上了板子、agent 搬进了 iPhone app,跑任务不用电脑,但首次搭建仍然要一台装了 Xcode 的 Mac。
第一步拿源码:
git clone https://github.com/onehumanbeing/esp32-iphone-agent.git
cd esp32-iphone-agent第二步刷固件。板子插在 Mac 上,必须用数据线,只能充电的线只会供电,串口不会出现:
arduino-cli config add board_manager.additional_urls https://espressif.github.io/arduino-esp32/package_esp32_index.json
arduino-cli core update-index
arduino-cli core install esp32:esp32@3.3.12
arduino-cli lib install "NimBLE-Arduino@2.5.1"
hardware/flash.sh多块板子就显式指定端口,YOUR_PORT 换成自己的;可选 –build-only 只编译不上传,–sta 走路由器模式。
hardware/flash.sh /dev/cu.usbmodemYOUR_PORT第三步装 iPhone app。复制一份配置文件,填上自己的签名 team 和唯一的 bundle identifier,然后在 Xcode 里选 scheme 和连着的手机,build & run:
cp ios/Config/Local.xcconfig.example ios/Config/Local.xcconfig
open ios/IPhoneAgent.xcodeproj免费 Apple ID 能签开发版,代价是每 7 天重签一次。
第四步,把板子从 Mac 挪到 iPhone 上,打开 ESP32 Agent,过官方那四道检查:Plug Me In,找到板子做蓝牙配对;Let Me See the Screen,连板子的热点,再去控制中心屏幕镜像里选 ESP32 Agent;Let Me Use the Pointer,打开辅助触控让 app 校准指针;Give Me a Brain,填模型 endpoint、API key 和模型 ID。
第一个任务别贪。官方建议从 Open Settings and go to Wi-Fi. 这种一眼能验证的做起。点 Start,手机不能锁屏。跑完在 Runs 里回放,按官方口径,模型说完成了不算完成,得自己看最后那一屏对不对。
给它一个脑子:模型填错,后面全白搭
必须选能接收图片的模型,走 OpenAI 兼容的 chat 接口。base URL 填 API 根地址,不含 chat/completions:文档地址是 https://your-model.example/v1/chat/completions,base 一般填 https://your-model.example/v1。
能拉到模型列表,不代表这个模型支持图像,必须显式选一个视觉模型,或者手填准确的 model ID。planner 和 actor 可以分别配不同的模型,官方建议先用同一个能看图的跑通,再一次只改一个变量,不然出了问题不知道赖谁。
app 里那个连接测试别太当真。它拿一张生成的纯色图测的,过了只说明这一次请求通了,不代表在所有 App 上靠得住。
自建模型也行,vLLM、SGLang、llama.cpp、Ollama 都可以,前提是服务端和模型接受图像请求。但默认热点模式下手机走蜂窝数据,热点里没有外网,只能在家用 Wi-Fi 里访问的地址根本够不着;要走局域网得用 –sta 测试版,板子只支持 2.4GHz,客户端隔离或 mDNS 被挡,设备都发现不了。
API key 存在手机钥匙串里,这点还算体面。但每一张屏幕截图都会发往云端模型,你正开着的聊天记录、相册、账号页面,全进了别人的上下文。key 和截图怎么出手机、边界划在哪,跟凭证与出网隔离那篇讲的是同一道题,装之前想清楚。

它凭什么不点歪:相对坐标和那个”先晃一下”的动作
决定这东西是玩具还是工具的,是这一章。
鼠标指针是相对移动,位置全靠推算,越点越偏。官方文档写得实在:app 会跟踪指针,周期性把它归位;需要精确点击之前,先在屏幕上把指针找出来,校正偏差再落点;每个动作做完,等屏幕稳定了再走下一步。
所以你会看到一个有点滑稽的画面:AI 点之前,指针先自己晃一下。那不是抽风,那是在找自己。这是视觉控制回路,管的是整个屏幕这一层,不是每个 App 的语义接口,界面糊、目标小、模型看错、延迟一高,结果都会偏。
旁证也有。10 月 19 日 legacy 分支合进一个 PR,加了 3×3 屏幕网格的校准样本,还支持通过 API、CLI、MCP 做精确点击,但这些改动没有进当前的 iPhone app。点不准这件事,作者自己清楚,是要长期还的债。
装的时候会踩的四个坑
坑一:别用默认配置编译。自己新建工程,参数看着差不多,板子跑起来就是不对。根因在 hardware/flash.sh,它强制 include 一个 nimble_cfg.h,那组 BLE 缓冲区参数是视频传输专门要用的。解法:老老实实跑官方脚本。
坑二:源码路径里不能有空格。脚本会检查,因为强制 include 的编译参数顶不住带空格的路径。解法:项目放进没有空格的目录。
坑三:板子型号别乱换。脚本按 8MB flash 加 OPI PSRAM 编译,别的 ESP32-S3 理论上带原生 USB 和 PSRAM 就行,但那只是预期,不在验证过的兼容列表里;ESP32-C3 的蓝牙版本只在 legacy 分支,还得电脑供屏。解法:按官方组合买,别在这几美元上省。
坑四:端口选错。10 月 19 日合进的 port-selection 修复(commit 133ead5)之前,脚本会刷到复位后第一个出现的板子上。解法:手上有多块板,先拔掉别的再刷。
另外,免费签名 7 天过期要记得重签;项目还用了私有 iOS 接口把 app 挪到后台,这条路本来就通不过 App Store,心里要有数。
它不完美:限制清单比卖点还长
卖点三句话讲完,限制得慢慢数。
BLE 带宽大约 300-500 kbps,画面缩到 480×1040、不超过 5 帧/秒,单步要几秒。
键盘只打 ASCII。中文任务指令发过去,输入法不会变成中文,中文输入在 roadmap 上。legacy 分支有个绕法:10 月 19 日的改动让 Mac 上的旧版 server 通过通用剪贴板粘一行非 ASCII 文本,包括中文,前提是 Mac 和 iPhone 同一个 Apple 账号、开了接力、蓝牙 Wi-Fi 都开,Linux 和 Windows 没这条路。而且粘失败时可能把上一次的剪贴板内容粘进去,server 还回 ok,提交前看一眼输入框。
iOS 不镜像密码输入、Apple Pay、DRM 视频,一锁屏镜像就停,这些场景里 AI 是瞎的。抢购、付款,别指望。横屏 App 也不支持。
充电口被板子占着。没有无线充电的手机,目前没有受支持的边用边充方案,issue #35 里作者自己说的,还在研究,没有时间表。
1.0 还没发。作者 10 月 22 日说 release-1.0 会把视频传输从 BLE 换成 Wi-Fi TCP,那个版本在等 App Store 审核,还没推到 main。可选的蓝牙 HID,换来腾出充电口那种,只是提议,配对、锁屏重连、拖拽、打字都还要真机验证。换视频通道,不等于无线方案已经发货。
有人会问,云端虚拟桌面不也能让 AI 操作界面?云端虚拟桌面那类电脑代理跑在云里的系统上,而这套东西要的就是真机,你登录着的账号、装着的 App、真实的推送,云里都没有。代价是密码、支付、锁屏这些镜像不给的地方,真机一样瞎。
我的判断
想省事、想马上上生产的,别碰,等作者在做产品化的 handsy.tech,App Store 版本即将上架、CLI 准备中,注意,都还没发。想搞清楚 GUI Agent 到底难在哪的,这块板子是最便宜的实验台,眼睛、脑子、手三层拆开看,每一层都在跟延迟、带宽和指针搏斗。
13 天 3652 星、479 fork、9 个 open issue,仓库口径的单人项目做到这个热度,说明 iPhone 用户被自动化憋得太久了。
安卓那边走了十几年的路,iPhone 这边才补上第一课。这块板子笨拙、很慢、也点不太准,但它没破解任何东西,就把门推开了一条缝。7 美元买不来成熟的自动化工具,买得来一个把问题摆上桌面的起点。
关注圈圈,持续带你玩转 AI 工具。
暂无评论内容