iOSNo-SignatureUSB HID

How to Set Up No-Signature iOS Automation Scripts: The Full USB HID No-App-Install Walkthrough

A hands-on walkthrough to set up a no-signature iOS automation script environment: from picking the scenario mode, connecting the device, starting the USB HID session, to setting the screen size and running your first tap and input — with no IPA signing, no proxy app install, and no dev board needed. Includes complete usbHidEvent sample code and a beginner troubleshooting checklist.

6 min read

1. First, understand why this approach needs no signing

When many people hear “no-signature” they assume it’s some loophole, but the logic is actually plain:

Signing signs “the program that gets installed on the phone.” If you install no program, there is nothing to sign.

The proxy-mode flow is “sign IPA → install on phone → a program on the device executes the actions,” so it can’t avoid signing. USB HID’s no-app-install mode puts the execution on the PC side — the central-control PC emulates a USB keyboard/mouse and feeds touch and key events into the phone over the cable.

With nothing installed on the device, there is naturally no IPA, no certificate, and none of that 7-day-expiry re-signing business.

So the cost structure of this approach is clean: no signing, no jailbreak, no dev board — all you need to prepare is a cable.

2. Preparation: three things

Item Notes
A computer Runs the central control. On Windows, install to a pure-English path — no Chinese characters or spaces
A cable Connects the iPhone to the computer; just a normal charging cable
System version The phone needs iOS 17 or later

No dev board, no certificate, no Apple developer account required.

3. Step 1: pick the right scenario mode (critical)

Open the mirroring client, go to System Settings → Scenario Mode, and select:

No Automation Screenshot + USB_HID

This step decides whether you’ll touch signing later.

Mode App installed on phone? Involves signing?
USB + Automation Service Needs a proxy IPA installed ✅ Yes
No Automation Screenshot + USB_HID No ❌ No
Main Program Screen Recording + USB_HID Needs an offline main-program IPA installed ✅ Yes

After selecting, click Start Mirroring and wait for the phone screen to appear in the main window.

4. Step 2: connect the device and open the session

Confirm two things:

  1. The phone has trusted this computer;
  2. The central control’s bridge has started.

Then open a session in your script and set the screen size:

function _usbOk(r) {
    return r == null || r === "";
}

function main() {
    // 1. Start session (true enables enhanced compatibility mode)
    let r = usbHidEvent.sessionStart(true);
    if (!_usbOk(r)) {
        logw("Failed to start USB HID: " + r);
        return;
    }

    // 2. Set screen size (use the actual screenshot/mirror resolution)
    r = usbHidEvent.setScreenSize(1170, 2532);
    if (!_usbOk(r)) {
        logw("Failed to set screen size: " + r);
        return;
    }

    logd("Environment ready, you can start operating");
}

main();

Never reverse the order: start the session first, then set the screen size, then you can tap and type.

5. Step 3: run your first action

Once the environment is ready, add a tap to try:

r = usbHidEvent.clickPoint(200, 400);
logd("Tap: " + (_usbOk(r) ? "success" : r));

How do you fill in coordinates? Look at the screenshot first — whatever coordinate an element has in the screenshot is what you write in the script — because setScreenSize has already aligned the pixel width and height, it’s WYSIWYG.

6. Complete example: one tap + one input

Put the above together and you get a minimal runnable script:

function _usbOk(r) {
    return r == null || r === "";
}

function main() {
    let r = usbHidEvent.sessionStart(true);
    if (!_usbOk(r)) { logw("Failed to start session: " + r); return; }

    r = usbHidEvent.setScreenSize(1170, 2532);
    if (!_usbOk(r)) { logw("Failed to set screen size: " + r); return; }

    // Tap an input field
    r = usbHidEvent.clickPoint(300, 500);
    logd("Tap input field: " + (_usbOk(r) ? "success" : r));

    // Type English (key-by-key input)
    r = usbHidEvent.typeText("hello");
    logd("English input: " + (_usbOk(r) ? "success" : r));

    // Type Chinese (auto-switches to paste)
    r = usbHidEvent.inputText("你好,世界");
    logd("Chinese input: " + (_usbOk(r) ? "success" : r));

    // Back to home screen
    usbHidEvent.systemKey("home");

    // Final cleanup: release resources
    usbHidEvent.sessionStop();
}

main();

For swiping, long-press, and multi-finger gestures, there are matching functions too:

// Swipe from (100,800) to (100,200) over 500ms
usbHidEvent.swipeToPoint(100, 800, 100, 200, 500);

// Long-press at (300,500) for 800ms
usbHidEvent.press(300, 500, 800);

// Multi-finger trajectory replay: 0=down 2=move 1=up
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);

7. How to confirm you really aren’t on the signing path

Three ways to tell — any one of them being true means you never touched signing:

  1. Look at the phone: no proxy app installed — with nothing installed, there’s no object to sign;
  2. Look at the flow: the whole process never showed certificate requests, provisioning-profile installs, or “trust developer” steps;
  3. Look at durability: leave it alone for a week and it still works — if there were a 7-day personal signature, it would have lapsed long ago.

These three points are also the most comfortable part of this approach: no “expires on schedule” risk.

8. Beginner pitfalls

Symptom Cause Fix
Session won’t open Phone hasn’t trusted this computer, or the control bridge isn’t started Check trust status and the bridge
All taps are offset Forgot setScreenSize, or resolution changed without re-setting Set screen size right after the session
Tap does nothing Session state is abnormal Right-click device → “USB HID → Rebuild USBHID Session”
Chinese input garbled Used typeText for long Chinese When you know it’s Chinese, use inputText directly
Extra spaces when pasting English System Smart Punctuation is on Settings → General → Keyboard, turn off “Smart Punctuation”
Coordinates break after landscape Resolution changed but size wasn’t re-set Swap width/height and re-set in landscape

9. FAQ

  • Q: Can it really be fully no-signature? Yes. Signing targets “the program installed on the phone”; if you install no app, signing never comes up.
  • Q: Do I need to buy a dev board? No. The PC emulates a HID peripheral over the cable; your hardware list is just one cable.
  • Q: How many steps total? Three: select “No Automation Screenshot + USB_HID” mode, confirm connection and trust, then start the session and set screen size in the script.
  • Q: How do I confirm I’m off the signing path? Check whether a proxy app is installed on the phone; no certificate flow throughout; leave it a week and it still works.
  • Q: Most common reasons a script won’t run? No session opened first, no screen size set (shows as taps doing nothing), or the phone not trusted / bridge not started.
  • Q: Re-run the script if a tap does nothing? No — try “Rebuild USBHID Session” first, faster and more thorough.
  • Q: Can it type Chinese? Yes. typeText auto-switches to paste for Chinese; inputText always uses paste.
  • Q: System requirements? Both USB_HID modes require iOS 17+; lower versions can only use the signing-required “USB + Automation Service” mode.

Related reading: USB HID for iOS Automation Scripts: Full Tutorial · Bluetooth HID, OTG HID, or USB HID: Which to Choose


About EasyClick: A phone automation AI-agent platform covering Android no-root, iOS no-jailbreak (proxy / Bluetooth HID / OTG HID) and HarmonyOS Next, offering script development, Apple cluster control, local central control & mirroring, and cloud control systems. → Explore all products


Ready to build it for real?

Every approach in this article can be built with EasyClick capabilities on iEasyClick — full documentation, developer tools and automation products, free to try.

Visit iEasyClick →