ios脚本开发

用 Python 调 iOS 免越狱脚本:开放接口的对接步骤与参数说明

什么时候才需要走接口?地址、请求方式与 code/msg 返回约定,再到取 deviceId、USB HID 开会话→设分辨率→点击的三步顺序、十一个模块各管什么,附错误处理建议。

约 11 分钟更新于

告警在外面,手机动作才走接口

上个月在客户那边,客服系统半夜弹出一条「订单异常」。订单要去手机 App 里重新提交。系统知道出事了,中控却不知道;值班的人已经睡了。

能不能让客服系统自己点?可以。

开放接口做的事很直白。它把手机操作变成 HTTP 请求。订单系统会发请求,就能驱动手机;告警系统、业务后台也一样。

中控的设备状态监控界面,可以看到每台设备的在线与执行情况

不过,接口不该默认加上。触发方在中控之外,才值得接。比如订单系统决定何时重提,或者后台决定跑哪台设备。调度节奏要自己管,也适合走接口;执行结果还能写回自己的数据库。

固定时间跑固定脚本,EasyClick 中控的定时任务已经够用。再套一层接口,只会多一个要维护的地方。

中控能自己决定何时做、做什么,就别接接口。决定来自别的系统,再接。

这里没有 SDK。用普通 HTTP 就行。

地址是中控电脑加 8019 端口。本机调用写 http://127.0.0.1:8019;别的机器来调,就换成中控电脑的内网 IP。

请求方法是 HTTP POST。Content-Type 写 application/json,参数放进请求体。返回也是 JSON;code 为 0 代表成功,其它值代表失败,原因看 msg。

这个判断最好先封装:

import requests

BASE = "http://127.0.0.1:8019"

def openapi_post(path, body=None):
    r = requests.post(f"{BASE}{path}", json=body or {}, timeout=30)
    r.raise_for_status()
    data = r.json()
    if data.get("code") != 0:
        raise RuntimeError(data.get("msg") or data)
    return data

后面的调用都走这个函数。Python 只依赖 requests;Node.js 18+ 已经自带 fetch。

deviceId 拿对了,点击才不会偏

所有设备接口都认 deviceId。先查设备列表,别凭记忆手填。

devices = openapi_post("/openapi/deviceList", {"deviceId": "", "groupId": ""})
print(devices)

deviceId 传空字符串,表示不按设备过滤。groupId 传空,表示不按分组过滤;只取某一组时,再把 groupId 填上。

接口要用列表返回的 deviceId。别名只显示在界面上,拿别名去调会白查一轮。

USB HID 也不能上来就点。顺序固定:

DEVICE_ID = "90e2f3834c0977205e441aa664916a9bdde81e8d"   # 从设备列表里取

# 1) 开会话
openapi_post("/openapi/usbhidSessionStart", {"deviceId": DEVICE_ID, "gate": True})

# 2) 设屏幕分辨率(坐标换算依赖它)
openapi_post("/openapi/usbhidSetScreenSize", {"deviceId": DEVICE_ID, "w": 1170, "h": 2532})

# 3) 之后才能点击
openapi_post("/openapi/usbhidClickPoint", {"deviceId": DEVICE_ID, "x": 200, "y": 400})

先开会话。gate 表示是否尝试增强兼容模式,一般传 true;低版本系统会自动忽略。会话已经存在时会复用,不必每次重开。

再设屏幕尺寸。这个步骤最容易漏,漏了就会点偏。HID 发送的是绝对像素坐标;没有 w 和 h,它没法换算。这里的 1170 × 2532,要和投屏或截图里的分辨率一致。

最后才点击。示例坐标是 x=200、y=400。设备分辨率不同,就分别计算;写死一套坐标,换台手机就可能点到旁边。

会话开着,尺寸也设对后,后面几百次点击只调第三步。不用反复设。Node.js 的结构相同,只把请求换成 fetch:

const BASE = "http://127.0.0.1:8019";

async function openapiPost(path, body = {}) {
  const res = await fetch(`${BASE}${path}`, {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify(body),
  });
  const data = await res.json();
  if (data.code !== 0) {
    throw new Error(data.msg || JSON.stringify(data));
  }
  return data;
}

接口分成十一组。查这张表,比在文档里来回翻快:

模块 管什么
中控接口 设备列表、脚本启停等
自动化 · 动作 点击、滑动、输入、App 的打开关闭
自动化 · 截图 截图、图片流
自动化 · 启停自动化 启动 / 释放自动化、隧道、电量
自动化 · 相册 上传图片视频、清空相册
自动化 · 文件操作 设备文件推送与拉取
自动化 · IME 输入法 自定义输入法、剪贴板转发
自动化 · 蓝牙 BLE 蓝牙板的 HID 动作
自动化 · USB HID 免硬件,数据线直接控制手机
辅助助手 助手剪贴板、相册、端口转发
快捷指令助手 需配合快捷指令助手程序使用

「动作」组用得最多。点击、双击、长按、滑动、多点触摸和输入文本都在里面;模拟键盘、打开或关闭 App、安装或卸载 App 也归它管。主页、重启、锁屏解锁、屏幕方向、坐标校正和抓取节点,同样能调。

USB HID 要单独记住。EC iOS USB 10.7.0(2026-09-08)起提供这组接口,不需要蓝牙板或 OTG 板,手机建议 iOS 17 及以上,一根数据线就能模拟点击和输入。它和中控「启动自动化」、脚本 startEnv 互斥,同一台设备不要混用。需要截图时走无自动化截图。走「启动自动化」时,iOS 15 及以上可以用脱机主程序 v7.2.0 及以上当自动化服务,官方下载页有预签 IPA,用爱思助手安装即可测试。自己签名的话,个人开发者账号 688 元一年,可绑 100 台,支持 iOS 12 及以上,费用只算签名。巨魔 TrollStore 支持 iOS 15 到 16.6.1,重启会掉签。脱机版只支持 iOS 15 及以上。7.0.0 起单 App 只装主程序,在设置里选单 App 再开自动化;双 App 还要签名代理 IPA,掉了可以用自激活拉起。EC iOS 10.6.0(2026-09-02)起,AI 智能体升级为 iEasyRun,地址是 https://ieasyrun.com 。

接口只管触发,完整流程留给脚本

中控接口先解决「管哪台」的问题。调设备列表,拿到一批 deviceId;再逐台启动编译好的脚本。订单归属在外部系统里时,这种分工很省事。

设备多了,先在中控里分组。接口仍按 deviceId 单台调用,你的代码负责循环;分组给这个循环一个明确范围。否则每次都把全部设备拉一遍,很快就乱。

想让 AI 助手直接调手机,可以把接口注册成 MCP 工具。直接调用时,接口和参数由你写;接成 MCP 后,AI 助手会选工具、拼参数。临场要判断下一步时,MCP 更合适。固定操作还是直调,省事。

错误要分开看。中控没开、端口不通,属于网络或服务问题,可以重试;设备离线、授权过期、坐标越界,重试通常没用。先看 msg,别见错就重发。

超时也别统一写死。官方示例是 30 秒,普通操作接口往往几百毫秒就返回;截图和上传涉及大文件,要多留时间。现场该留几秒,按接口分组实测。

坐标最磨人。机型混用时,按分辨率换算;能抓节点,就先拿元素坐标再点。直接写死,测试机上没事,换设备就偏。

日志至少留五样:设备 ID、接口名、请求参数、code 与 msg、时间戳。少一项,现场对账都可能多花半小时。

别用接口重写整段手机流程。流程放在设备脚本里,接口只负责触发和取结果;请求少,网络往返也少。出故障时,排查范围会小很多。

你的需求 推荐方式 为什么
定时跑一段固定流程 EasyClick 中控的定时任务 不需要绕一层接口,中控自己就能决定什么时候做
由外部系统决定何时触发 EasyClick 开放接口直调 8019 端口,HTTP 加 JSON,和你现有系统直接打通
要让 AI 决定下一步做什么 EasyClick 注册成 MCP 工具 AI 自己选工具、拼参数,不用你写调度逻辑
既要精确控制界面元素,又要在设备上跑完整流程 EasyClick 代理模式配脚本,接口只做触发 流程留在设备上,网络往返少,出问题的地方也少

固定流程走定时,外部触发走接口,需要判断的交给 MCP。手机里的具体动作仍由脚本承担。那支跨境团队最后只让告警系统做三件事:查对应设备、启动「重新提交订单」脚本、把结果写回工单表。云控侧如果要对接同一套调度,开放接口说明对应云控 3.11.0 及以上、EC 客户端 9.4.0 及以上,演示站点账号是 test123 / test123。

想先弄清脚本本身怎么写,可以读iOS 免越狱脚本怎么写;USB HID 的原理和完整 API,看USB HID 自动化脚本教程;接口和 AI 系统对接的细节,可以读云控系统开放 API + MCP 对接。


iEasyClick:手机自动化 AI 智能体平台,覆盖安卓免 root、iOS 免越狱(代理/蓝牙 HID/OTG HID)、鸿蒙 Next 三大生态,提供脚本开发、苹果群控、本地中控投屏与云控系统。→ 了解全部产品

想要真实跑起来?

本文介绍的方案均可基于 EasyClick 能力在 iEasyClick 落地。官网提供完整文档、开发工具与自动化产品,免费体验。

访问 iEasyClick 官网 →