iOS JavaScript SDK
@midscene/ios 通过 WebDriverAgent(WDA)控制 iOS 设备。IOSAgent 继承基础 Agent 的 AI 方法。
导入与 API 概览
日常使用推荐通过工厂函数 agentFromWebDriverAgent() 一步完成 Device 的创建与连接;如果需要分别管理 Device 和 Agent 的初始化过程,也可以显式构造 IOSDevice 与 IOSAgent。
agentFromWebDriverAgent()
连接 WebDriverAgent 并返回绑定了该 Device 的 IOSAgent。options 同时接受 Agent 配置与 Device 配置。注意:wdaBaseUrl 不能与 wdaHost 或 wdaPort 同时传入。
可通过 MIDSCENE_IOS_DEVICE_CLASS_OVERRIDE 设置设备类覆盖模块。工厂函数中显式传入的 iOSDeviceClassOverride 优先于环境变量。
IOSDevice / IOSAgent
显式实例化 IOSDevice 时,必须先调用 await device.connect() 完成连接,再将其传给 IOSAgent。每个 Device 实例只能归属于一个 Agent。
配置选项
Agent 配置
支持所有通用 Agent 配置,并额外提供以下平台配置:
appNameMapping?: Record<string, string>—— 将应用名称映射为对应的 iOS Bundle ID,方便在launch()、terminate()或自然语言指令中直接使用应用名称。用户传入的映射会覆盖内置映射。
Device 配置
wdaPort?: number—— WebDriverAgent 服务端口。默认值:8100。wdaHost?: string—— WebDriverAgent 服务主机地址。默认值:'localhost'。wdaBaseUrl?: string—— 完整的 HTTP(S) WDA API 基础地址(可包含网关路径前缀)。不能与wdaHost或wdaPort同时设置。iOSDeviceClassOverride?: string—— 自 定义 npm 模块路径,用于在调用agentFromWebDriverAgent()或启动 iOS Playground 时替换默认的IOSDevice实现。目标模块需导出同名类IOSDevice或默认导出(default)类。sessionId?: string—— 复用已有的 WebDriverAgent session ID。传入后,Midscene 会跳过新建 WDA session;销毁时也仅与该外部 session 解绑,不会将其删除。wdaMjpegPort?: number—— WDA MJPEG 实时画面流端口。默认值:9100。wdaMjpegUrl?: string—— 完整的 HTTP(S) MJPEG 画面流地址(可包含网关路径或查询参数)。不能与wdaMjpegPort同时设置。wdaMjpegFrameSource?: { enabled?: boolean }—— 是否将 WDA 的 MJPEG 画面流作为agent.startObserving()的连续帧源。默认关闭;关闭时,观察器会回退为按序调用screenshotBase64()截图。autoDismissKeyboard?: boolean—— 文本输入完成后是否自动收起软键盘。默认值:true。keyboardTypeDelay?: number—— 按键之间的延迟(单位:毫秒,须为有限非负数)。设为正数时,'legacy'输入模式会通过 WDA 的/wda/keys接口逐个 Unicode 码点发送字符,适用于输入框因输入过快而丢字的场景。inputStrategy?: 'legacy' | 'sequential' | 'bulk'——Input动作的默认文本输入策略。默认值为'legacy':'sequential':按每个 Unicode 码点调用一次 WDA 接口;如需配合keyboardTypeDelay延迟输入,请使用此策略。'bulk':整段文本仅调用一次 WDA 文本接口;使用此策略时,不能设置keyboardTypeDelay(或须将其设为0)。
customActions?: DeviceAction<any>[]—— 注册自定义动作,供 Agent 在规划时调用。可传入IOSDevice构造函数或agentFromWebDriverAgent(),定义方式请参阅自定义动作。
平台方法
launch()
打开网页、启动原生应用或触发自定义 URL Scheme。
target: string—— 网页 URL、应用的 Bundle ID、自定义 URL Scheme(如tel:、mailto:),或应用名称。如果传入的应用名称存在于appNameMapping中,Midscene 会先将其解析为对应的 Bundle ID,否则直接按传入的target启动。
terminate()
根据 Bundle ID 关闭正在运行的 iOS 应用。
bundleId: string—— 目标应用的 Bundle ID(如com.apple.Preferences)或应用名称。如果传入的应用名称存在于appNameMapping中,Midscene 会将其解析为对应的 Bundle ID。
runWdaRequest()
需要底层控制时,可直接向 WebDriverAgent REST 接口发送原始请求。
params.method—— HTTP 请求方法,支持'GET'、'POST'、'DELETE'和'PUT'。params.endpoint—— WebDriverAgent 接口路径。params.data—— 可选的 JSON 请求体。
如果直接在 IOSDevice 实例上调用 device.runWdaRequest(),请使用位置参数形式:runWdaRequest(method, endpoint, data?)。

