不用越狱也能批量控制 iPhone:EasyClick iOS 免越狱脚本实战
本文讲的是 iPhone 的免越狱、免签名 自动化:不需要越狱,也不需要给应用签名。
示例环境为中控端程序 + 真机,涉及坐标、等待、重试这些工程细节,适合做移动端自动化或测试的同学参考。
越狱已经过时了
很多人觉得 iPhone 要实现自动化就得越狱。说实话这个观念该更新一下了。
越狱不仅没必要,而且越来越不划算。苹果的签名机制和安全更新使得旧版越狱工具很快失效,一旦升级系统就可能失去越狱能力。更重要的是------越狱会破坏设备的保修资格,还会降低安全性。
现在有更好的方案,全程合法合规,不需要折腾就能做到真正的屏幕级自动化。
三条路,怎么选
路线一:HID 硬件模拟(重点推荐)
把一块 ESP32 开发板蓝牙连接到 iPhone。这块芯片模拟人体输入设备(键盘、鼠标)。它发送"点击坐标 (x,y)"的时候,iPhone 接到的是一个物理按键信号------App 根本不知道这背后是真人还是机器。
优点很明显:零风险(没碰任何系统文件)、全兼容(所有版本的 App 都能操控)、不可检测、成本最低(每台十几块钱)。
缺点是得多买一块开发板,搭建过程稍微绕一点。但对于想认真搞自动化的人来说,这点门槛不算什么。
路线二:Mac + Swift / Python
如果你的 Mac 离 iPhone 够近(USB 或者 WiFi 连着),可以直接用系统级 API 操控:
swift
import XCTest
let app = XCUIApplication()
app.launch()
let textField = app.textFields["用户名"]
textField.typeText("hello")
let button = app.buttons["登录"]
button.tap()
这是苹果官方的 UI 测试框架,性能稳精度高。缺点是你得会 Swift 或者 Python,更适合技术团队而不是普通用户。
路线三:iOS 捷径
苹果自带的 "快捷" App,拖拽模块就能创建自动化流程。适合不想装任何第三方软件的普通人,但覆盖面有限------只能操作那些暴露了接口的 App。
实操:用 HID 方案跑通第一个自动化
要准备的东西
ESP32 开发板,淘宝搜"ESP32-BLE-HID"大概十五到三十块一台。USB 线用来供电。Mac 或 PC 运行控制软件。iEasyClick for iOS 客户端。
步骤
第一步:烧固件。 PlatformIO IDE 里编译下载 HID 固件到开发板。
第二步:配对。连接 ESP32 到 iPhone,在手机蓝牙设置里找到 HID 设备完成配对。
第三步:写脚本。
javascript
// 打开微信发条消息
launchApp("com.tencent.xin");
sleep(2000);
findAndTap("搜索");
typeText("张三");
tapByIndex(0);
sleep(1000);
typeText("早上好!");
clickButton("发送");
第四步:点运行。看到手机自己跑完整个流程就行。
进阶玩法
多台一起干
验证单机成功后就扩展到多台。通过云控面板同时监控几十台 iPhone,每台有自己的实时画面。一条命令下发所有设备同步执行。
加 OCR 智能识别
加入图像识别后脚本可以"看懂"屏幕内容再决定下一步。比如先截图找"余额"两个字在哪里,找到了就去点,找不到就重试。
AI 对话驱动
最新的趋势是用自然语言代替代码。你跟 AI 说:"帮我把待处理订单备注改成今日发货",它自己解析意图、生成脚本、在手机上跑完、给你汇报结果。门槛大幅降低。
对比表
| HID 硬件模拟 | AppleScript/XCUITest | iOS 捷径 | |
|---|---|---|---|
| 越狱 | 否 | 否 | 否 |
| 学习成本 | 低 | 高 | 极低 |
| 控制范围 | 全覆盖 | 限于接口暴露的 App | 受限 |
| 稳定性 | 极高 | 高 | 中 |
| 多机并发 | ✅ | 有限 | ❌ |
| 成本 | ¥15~30/台 | 需 Mac | 免费 |
几个问题
会影响保修吗?不会。以上方案都没有修改系统文件或 jailbreak。
能跑游戏吗?技术上可以------HID 模拟的是物理点击,理论上任何手动操作的都能自动化。但要注意游戏用户协议,很多禁止辅助工具。个人娱乐没问题,商业用途注意风险。
运行中断了怎么办?脚本里加异常处理和自动恢复逻辑。某一步失败时回退到上一个稳定状态重来,别从头开始。
从「跑通一个动作」到「跑通一套流程」
上面那节只跑通了一个动作。真要能天天用,中间还有几步要走,这里按顺序补上。
第一步:把等待写对
跑通第一个动作之后,最容易出问题的就是等待。新手几乎都会写 sleep(3000) 这种固定等待,然后遇到两个症状:网络好的时候白等三秒,网络差的时候第三秒还没加载完就开始点。
正确做法是把等待交给查询函数。查节点时的超时参数本身就是等待------写 15000 就是「最多等 15 秒」,元素提前出现会立刻返回,不会真的傻等。
// 不好的写法
sleep(3000);
clickPoint(585, 2280);
// 好的写法
let btn = labelMatch("下一步").getOneNodeInfo(15000);
if (btn) {
clickPoint(btn.bounds.centerX(), btn.bounds.centerY());
} else {
logw("15 秒内没出现,界面可能变了");
}
第二步:加上失败时的信息
流程一长,报错只有「失败」两个字是最难查的。加两样东西就能定位:
日志。每个关键动作前打一行带名字的日志。成本是一行代码,收益是失败时你能立刻知道停在哪一步。
截图。在失败分支里截一张图存下来。这一条的价值比想象中大------绝大多数失败是「停在了意料之外的页面」,比如弹窗、更新提示、登录过期。看到截图基本不用再猜。
第三步:把可变的部分抽出来
账号、关键词、要翻的页面、执行时间点,这些都经常改。把它们写在流程里,改一次就要读一遍代码;抽成配置,改的是参数不是逻辑。
这一条看起来不起眼,但它决定了你的脚本能用多久。判断标准很简单:如果改一个账号名字需要你打开源码找十分钟,那就该抽出来了。
第四步:再考虑加设备
单台跑顺之后再加设备,顺序不要反。加设备之后要解决的问题会换一批:怎么分组、怎么统一下发、失败了怎么补跑、哪台掉线了怎么看出来。
这时候脚本本身已经不是重点了,管理方案才是。而管理方案在设备少的时候是看不出问题的。
三条路各自适合谁
前面说的三条路,这里给一个更直接的对应关系。
| 你的情况 | 建议 |
|---|---|
| 系统是 iOS 13--16,或者需要精确控制界面元素 | 代理模式(要签名) |
| iOS 17+,想省掉签名成本,界面比较稳定 | USB HID(一根线) |
| iOS 17+,风控压力大,或者设备分散摆放 | 蓝牙 HID(一块板) |
| iOS 17+,想要配置最简单、响应最快 | OTG HID(板子 + 转接头) |
| 还不确定要做什么流程 | 先用最容易跑通的那条把逻辑验证出来 |
最后一行值得单独强调:三条路的业务逻辑是同一套。事件模块的方法名一致,换路线只改模块名,不用重写流程。所以完全可以先用最省事的那条把逻辑跑对,等风控有压力了再换。
关于脚本的具体写法------骨架怎么搭、常用函数有哪些、坐标怎么定、调试怎么做------可以看iOS免越狱脚本怎么写,那篇是从零到一个能跑的脚本的完整路径。
推荐怎么选(结论)
把全文收成一张表。四种情况对应的都是同一个平台里的不同入口。
| 你的情况 | 推荐 | 为什么 |
|---|---|---|
| iOS 13--16,或者要精确识别界面元素 | 推荐 EasyClick 代理模式 | 功能最全,有节点选择器,调试最方便 |
| iOS 17+,想省掉签名和开发板的成本 | 推荐 EasyClick 加 USB HID | 一根数据线,免签名免硬件,风控也更温和 |
| iOS 17+,风控压力大或设备分散摆放 | 推荐 EasyClick 加蓝牙 HID | 风控最友好,不受线长限制 |
| 完全不想写代码 | 推荐 EasyClick AI 智能体 | 中文对话描述任务,或拖拽出工作流 |
四条路是同一个平台里的四个入口,设备、授权、中控都是同一套。所以实际用法很少是"只选一种":先代理跑通逻辑,风控加压切 HID,临时任务交给 AI 智能体,固定的批处理用脚本加定时。