iOS 真机 JS 注入 · 第 6 课(番外)

能不能让 AI 纯 USB 全自动跑完 iOS?一次真实的碰壁

前 5 课的分工是「人把 webview 打开、AI 从 webview 起探针」。这一课问一个更贪心的问题: 连"冷启动飞书、点到目标 webview"这段也让 AI 自己做,行不行?——真机试了一整轮。 结论很有教育意义:能力是有的,但被一堵"策略墙"挡死,而这堵墙直到最后一步才露出铁证。 下面把排查过程一层层还原,并说明怎么认出"这不是技术问题,而是制度边界"。

好消息:纯 USB 的 UI 自动化能力,真的存在

很多人以为 iOS 自动化必须上 WDA / Appium / 越狱。其实 pymobiledevice3 developer core-device 里, 苹果原生就给了一套——不需要任何第三方框架,也不需要 full Xcode

launch-application冷启动 / 杀掉重开任意 App(还能拿 list-apps、给进程发信号)。
screen-capture截屏——让 AI"看见"当前画面。
universal-hid-service: tap / drag / swipe / type按坐标点触摸、拖、滑、甚至虚拟键盘打字。这是"替人点 UI"的核心。

把它们串起来就是一个闭环:截屏 → 判断该点哪 → tap → 再截屏。原理上,AI 完全可以自己在飞书里点来点去。 所以"AI 能不能自己开 webview"——能力层面答案是能。问题出在能力前面的一排"闸门"。

坏消息:前置全是硬闸,而且逐条踩死

上面那套 core-device 能力,全部要求两个前置:① 设备开启「开发者模式」② 挂载 DDI(DeveloperDiskImage)。 我按顺序去开,一路撞墙——注意,撞墙不可怕,关键是每撞一堵就判断"这堵能不能绕"

1
GitHub 被公司网墙 → DDI 下不下来 镜像要从 api.github.com 下,直连恒超时(DNS 落 Clash fake-ip)。能绕:走 Clash 代理,逐个端口试出 7897 通(7890 不通)。
2
userspace 隧道挂 DDI 撞工具 bug --userspace 免 root,但挂载时报 NotImplementedError: RemoteXPC ... RemoteServiceDiscoveryService能绕:改用 sudo pymobiledevice3 remote tunneld 起真 RSD 隧道,命令加 --tunnel <UDID>
3
开发者模式打不开,菜单也不出现 enable-developer-mode 报「设了密码就不许开」;「设置>隐私与安全性」底部的开发者模式菜单做了干净的开发者服务连接(设备回 Developer Mode is disabled)、划掉重开 Settings、整机重启,始终不出现绕不动。

前两堵墙都绕过去了(技术障碍),第三堵怎么都过不去。这时候要警觉:一堵"你做对了所有步骤它还是不动"的墙,往往不是技术问题。

决定性证据:一个变灰的按钮

我想了个巧招绕开第三堵:既然报错是"设了密码就不许开",那把锁屏密码临时关掉不就行了?于是去 设置 > 面容 ID 与密码 > 关闭密码——

现象

「关闭密码」按钮是灰的,根本点不动。

这一下就是铁证:一个按钮变灰、不让你关密码,只有一种解释——有一个管理描述文件在"强制要求你必须设密码"。 换句话说,这台机器被企业安全策略实际管着

回头用 pymobiledevice3 profile list 一查,果然装着字节 Seal 的管理描述文件。 而"强制密码"这种安全 baseline,几乎必然同时带着"禁用开发者模式"——这就完美解释了第三堵墙: 不是我操作不对,是开发者模式被公司策略从根上关掉了,菜单当然永远不会出现。

根因与结论:这是制度边界,不是技术问题

结论

被字节 Seal 管控(强制密码)的 iOS 机上,iOS 全 UI 自动化走不通—— core-device 的 launch/tap/截屏全要开发者模式,而开发者模式被策略锁死。 唯一的解锁办法是移除管理描述文件,但那会让你掉出公司管控、丢掉企业应用权限,属于违规——不做。

这里最值钱的,不是那些命令,而是这个判断力:当"做对了每一步还是不动"时,要能识别出自己撞的是制度墙而不是技术墙,然后果断止损、换路,而不是无限地往死胡同里加班。

可复用的 plumbing(换台非管控 iOS 机就能全自动,别丢)


第 6 课(番外)/ 共 6 课 · 课程:iOS 真机 JS 注入 · 真机实测 2026-07-27