不装 App 就没有签名这道坎,从准备到跑通
很多人一听“免签名”就觉得是钻空子,逻辑其实很朴素:签名签的是“要装到手机上的那个程序”,如果不装程序,就没有东西需要签。代理模式的流程是“签名 IPA → 安装到手机 → 手机端程序执行操作”,所以绕不开签名;而 USB HID 的免装 App 模式把执行主体放在了电脑侧,中控电脑模拟成一个 USB 键鼠,通过数据线把触摸和按键事件送进手机。手机端什么都没装,自然也就没有 IPA、没有证书、没有 7 天到期重签这些事。所以这套方案的成本结构很干净:不签名、不越狱、不买开发板,你要准备的只有一根数据线。还要什么?什么都不用。
| 准备项 | 说明 |
|---|---|
| 一台电脑 | 跑中控,Windows 上安装路径请用纯英文,不要中文和空格 |
| 一根数据线 | 连接 iPhone 与电脑,就是普通充电线那种 |
| 系统版本 | 手机需 iOS 17 及以上 |
打开投屏客户端,进入系统设置 → 场景模式,选 无自动化截图 + USB_HID,这一步决定了你后面要不要碰签名:
| 模式 | 手机装 App? | 涉及签名? |
|---|---|---|
| USB + 自动化服务 | 需要装代理 IPA | 需要 |
| 无自动化截图 + USB_HID | 不需要 | 不需要 |
| 主程序录屏 + USB_HID | 需要装脱机主程序 IPA | 需要 |
选好后点开始投屏,等主窗口出现手机画面即可。
画面出来了,接着把会话和第一个动作跑通。第二步,连接设备、开启会话。确认两件事:手机已信任本机、中控的桥接已启动。然后在脚本里开会话,并设置屏幕尺寸:
function _usbOk(r) {
return r == null || r === "";
}
function main() {
// 1. 开启会话(true 表示启用增强兼容模式)
let r = usbHidEvent.sessionStart(true);
if (!_usbOk(r)) {
logw("开启 USB HID 失败: " + r);
return;
}
// 2. 设置屏幕尺寸(按截图/投屏实际分辨率填)
r = usbHidEvent.setScreenSize(1170, 2532);
if (!_usbOk(r)) {
logw("设置屏幕尺寸失败: " + r);
return;
}
logd("环境就绪,可以开始操作了");
}
main();
顺序千万别颠倒:先开会话,再设屏幕尺寸,然后才能做点击输入。颠倒了会怎样?点哪儿都不对。第三步,跑通第一个动作,环境就绪后加一个点击试试:
r = usbHidEvent.clickPoint(200, 400);
logd("点击: " + (_usbOk(r) ? "成功" : r));
坐标怎么填?先看截图,元素在截图里是什么坐标,脚本里就写什么坐标,因为 setScreenSize 已经把像素宽高对上了,所见即所得。把前面的拼起来,就是一个能跑的最小脚本:
function _usbOk(r) {
return r == null || r === "";
}
function main() {
let r = usbHidEvent.sessionStart(true);
if (!_usbOk(r)) { logw("开启会话失败: " + r); return; }
r = usbHidEvent.setScreenSize(1170, 2532);
if (!_usbOk(r)) { logw("设置屏幕尺寸失败: " + r); return; }
// 点击某个输入框
r = usbHidEvent.clickPoint(300, 500);
logd("点击输入框: " + (_usbOk(r) ? "成功" : r));
// 输入英文(逐键输入)
r = usbHidEvent.typeText("hello");
logd("英文输入: " + (_usbOk(r) ? "成功" : r));
// 输入中文(自动改为粘贴)
r = usbHidEvent.inputText("你好,世界");
logd("中文输入: " + (_usbOk(r) ? "成功" : r));
// 回到主屏
usbHidEvent.systemKey("home");
// 收尾释放资源
usbHidEvent.sessionStop();
}
main();
想滑动、长按、多点手势也有对应函数:
// 从 (100,800) 滑到 (100,200),耗时 500ms
usbHidEvent.swipeToPoint(100, 800, 100, 200, 500);
// 在 (300,500) 长按 800ms
usbHidEvent.press(300, 500, 800);
// 多点轨迹回放:0=按下 2=移动 1=抬起
let t = [
{"action": 0, "x": 100, "y": 500, "delay": 20},
{"action": 2, "x": 100, "y": 300, "delay": 30},
{"action": 1, "x": 100, "y": 300, "delay": 20}
];
usbHidEvent.multiTouch(t, 10000);
怎么确认没走签名、常见坑和疑问
怎么确认自己真的没走签名通道?三个判断依据,任一条满足即可说明没碰签名:看手机,没有安装任何代理 App,没装东西就没有可签名的对象;看流程,全程没有出现证书申请、描述文件安装、信任开发者这些步骤;看时效,放一周不管功能照常,如果存在 7 天个人签,早就失效了。这三条也是这套方案最舒服的地方:没有“到点就失效”的隐患。 新手常踩的坑:
| 现象 | 原因 | 解决 |
|---|---|---|
| 会话开不起来 | 手机未信任本机,或中控桥接未启动 | 检查信任状态与桥接 |
| 点击位置全偏 | 忘了设 setScreenSize,或分辨率变了没重设 |
会话后立刻设屏幕尺寸 |
| 点击没反应 | 会话状态异常 | 右键设备 →「USB HID → 重建 USBHID 会话」 |
| 中文输入乱码 | 用了 typeText 处理长中文 | 明确是中文时直接用 inputText |
| 英文粘贴多空格 | 系统智能标点开了 | 设置 → 通用 → 键盘,关掉「智能标点」 |
| 横屏后坐标错乱 | 分辨率变了但没重设尺寸 | 横屏时宽高对调重设一次 |
几个高频疑问:真的可以完全不签名吗?可以,签名针对“要装到手机上的程序”,不装 App 就不涉及签名。需要买开发板吗?不需要,电脑模拟 HID 外设走数据线,硬件清单里只有一根线。一共几步?三步:选「无自动化截图 + USB_HID」模式、确认连接与信任、脚本里开会话并设屏幕尺寸。脚本跑不起来最常见的原因?没先开会话、没设屏幕尺寸(表现为点击无反应)、手机未信任或桥接未启动。点击没反应要重跑脚本吗?不用,先试「重建 USBHID 会话」,更快也更彻底。能输入中文吗?能,typeText 遇中文自动改粘贴,inputText 统一走粘贴。对系统有要求吗?两种 USB_HID 模式要求 iOS 17+,更低版本只能用需要签名的「USB + 自动化服务」模式。
相关阅读:USB HID 写 iOS 自动化脚本怎么做?完整教程 · 蓝牙 HID、OTG HID、USB HID 三种方式怎么选
iEasyClick:安卓 / 苹果 / 鸿蒙全平台手机自动化,支持 EC 脚本开发、AI 智能体对话操控与 USB HID / 蓝牙 HID / OTG HID 多种控制方式 · 官网 ieasyclick.net
想要真实跑起来?
本文介绍的方案均可基于 EasyClick 能力在 iEasyClick 落地。官网提供完整文档、开发工具与自动化产品,免费体验。