iOS免签名USB HID

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

手把手配置免签名的 iOS 脚本环境:选场景模式、连接设备、开启 USB HID 会话、设置屏幕尺寸、跑通第一个点击与输入,全程不需签名、不需代理 App、不需开发板。

约 8 分钟

不装 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 落地。官网提供完整文档、开发工具与自动化产品,免费体验。

访问 iEasyClick 官网 →