iOS免签名USB HID

iOS自动化脚本免签名怎么做?USB HID 不装 App 的完整配置流程

手把手配置一套免签名的 iOS 自动化脚本环境:从选场景模式、连接设备、开启 USB HID 会话,到设置屏幕尺寸、跑通第一个点击与输入动作,全程不需要给 IPA 签名、不需要装代理 App、不需要开发板。附完整 usbHidEvent 示例代码与新手排查清单。

约 8 分钟

一、先搞懂:为什么这套方案不用签名

很多人一听“免签名”就觉得是钻空子,其实逻辑很朴素:

签名签的是“要装到手机上的那个程序”。 如果不装程序,就没有东西需要签。

代理模式的流程是“签名 IPA → 安装到手机 → 手机端程序执行操作”,所以绕不开签名;而 USB HID 的免装 App 模式把执行主体放在了电脑侧——中控电脑模拟成一个 USB 键鼠,通过数据线把触摸和按键事件送进手机

手机端什么都没装,自然也就没有 IPA、没有证书、没有 7 天到期重签这些事。

所以这套方案的成本结构很干净:不签名、不越狱、不买开发板,你要准备的只有一根数据线。

二、准备工作:三样东西

准备项 说明
一台电脑 跑中控,Windows 上安装路径请用纯英文,不要中文和空格
一根数据线 连接 iPhone 与电脑,就是普通充电线那种
系统版本 手机需 iOS 17 及以上

不需要开发板,不需要证书,不需要 Apple 开发者账号。

三、第一步:选对场景模式(关键)

打开投屏客户端,进入系统设置 → 场景模式,选:

无自动化截图 + USB_HID

这一步决定了你后面要不要碰签名。

模式 手机装 App? 涉及签名?
USB + 自动化服务 需要装代理 IPA ✅ 需要
无自动化截图 + USB_HID 不需要 ❌ 不需要
主程序录屏 + USB_HID 需要装脱机主程序 IPA ✅ 需要

选好后点开始投屏,等主窗口出现手机画面即可。

四、第二步:连接设备、开启会话

确认两件事:

  1. 手机已信任本机;
  2. 中控的桥接已启动。

然后在脚本里开会话,并设置屏幕尺寸:

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);

七、怎么确认自己真的没走签名链路

三个判断依据,任一条满足即可说明没碰签名:

  1. 看手机:没有安装任何代理 App——没装东西,就没有可签名的对象;
  2. 看流程:全程没有出现证书申请、描述文件安装、信任开发者这些步骤;
  3. 看时效:放一周不管,功能照常——如果存在 7 天个人签,早就失效了。

这三条也是这套方案最舒服的地方:没有“到点就失效”的隐患。

八、新手常踩的坑

现象 原因 解决
会话开不起来 手机未信任本机,或中控桥接未启动 检查信任状态与桥接
点击位置全偏 忘了设 setScreenSize,或分辨率变了没重设 会话后立刻设屏幕尺寸
点击没反应 会话状态异常 右键设备 →「USB HID → 重建 USBHID 会话」
中文输入乱码 用了 typeText 处理长中文 明确是中文时直接用 inputText
英文粘贴多空格 系统智能标点开了 设置 → 通用 → 键盘,关掉「智能标点」
横屏后坐标错乱 分辨率变了但没重设尺寸 横屏时宽高对调重设一次

九、FAQ

  • Q:真的可以完全不签名吗? 可以。签名针对“要装到手机上的程序”,不装 App 就不涉及签名。
  • Q:需要买开发板吗? 不需要。电脑模拟 HID 外设走数据线,硬件清单里只有一根线。
  • Q:一共几步? 三步:选「无自动化截图 + USB_HID」模式、确认连接与信任、脚本里开会话并设屏幕尺寸。
  • Q:怎么确认没走签名链路? 看手机是否装了代理 App;全程无证书流程;放宽一周功能照常。
  • Q:脚本跑不起来最常见的原因? 没先开会话、没设屏幕尺寸(表现为点击无反应)、手机未信任或桥接未启动。
  • Q:点击没反应要重跑脚本吗? 不用,先试「重建 USBHID 会话」,更快也更彻底。
  • Q:能输入中文吗? 能。typeText 遇中文自动改粘贴,inputText 统一走粘贴。
  • Q:对系统有要求吗? 两种 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 落地。官网提供完整文档、开发工具与自动化产品,免费体验。

访问 iEasyClick 官网 →