Targets

iOS 真机环境准备

在 iOS 真机上运行 Munk AI 测试:配置已有 WDA,或通过源码脚本安装官方 WDA,并完成设备接入与验证。

要在 iOS 真机上跑 case,设备上需要有一份可用的 WebDriverAgent(WDA)。Munk AI 发行版(get.munk.sh暂不提供 WDA 一键安装;你需要先完成一次性环境准备,之后日常只需 munk serve

先选一条路径

你的情况推荐路径
真机上已经装过 WDA(Appium、Xcode 等来源)使用已有 WDA
还没有 WDA,或已有 WDA 经常出问题安装 Munk 官方 WDA

环境就绪后,两条路径都会汇合到 接入 Munk 并开始使用

准备工作

开始之前,请确认:

  • 你使用的是 Mac,且已安装 Xcode
  • 已安装 Munk AI(munk version 可正常输出)
  • iPhone 通过 USB 连接 Mac(首次建议优先 USB,而不是纯 WiFi)
  • 手机已解锁,并在手机上点了「信任此电脑」
  • 系统版本为 iOS 17 及以上
  • (仅官方安装路径)你有可用的 Apple Developer 签名能力
  • (个人开发者账号)已在 Apple DeveloperDevices 中录入这台测试设备的 UDID

获取设备 UDID

连接手机后,在终端执行:

xcrun devicectl list devices

记下目标设备对应的 UDID。后续安装 WDA 会用到它。

如果你使用的是个人开发者账号,还需要把该 UDID 登记到 Apple Developer 后台(Certificates, Identifiers & Profiles → Devices),并确保后续创建的 Provisioning Profile 已包含这台设备。未登记的设备无法用于 Development 签名安装。

你也可以在 Munk 启动后,用下面命令查看 device_ref(跑 case 时通常填这个值):

munk devices list --platform ios

使用已有 WDA

如果你已经在真机上安装并跑通过 WebDriverAgentRunner,可以跳过编译安装,只在 Munk 里配置对应的 bundle id。

1. 确认 WDA 的 bundle id

常见示例(以你设备上实际安装的为准):

  • com.facebook.WebDriverAgentRunner.xctrunner
  • 或你自己签名时配置的自定义 id

不确定时,可借助 Xcode Devices and Simulators,或你当初安装 WDA 时使用的 bundle id 记录。

2. 在 Apps 里填写 iOS WDA bundle id

  1. 启动服务:
    munk serve --host 127.0.0.1 --port 16888
    
  2. 打开 Web UI:http://127.0.0.1:16888/
  3. 进入 Apps → 创建或编辑你的 iOS App
  4. 填写 iOS bundle id(被测 App 的 bundle id)
  5. iOS WDA bundle id 填入你设备上已安装 WDA 的 bundle id
  6. 保存

如果留空 iOS WDA bundle id,Munk 会默认使用 sh.munk.wda.xctrunner(适用于走下方官方安装流程的用户)。

3. 验证是否可用

在 Web UI 的 Devices 中,确认真机出现在设备列表,然后尝试跑一次 case。

若设备不可见、WDA 启动失败或 case 中途报错,请先核对 bundle id 是否填写正确。仍无法解决时,建议改用下方的 Munk 官方 WDA 安装流程

说明: 其他来源的 WDA 未经 Munk 官方验证,兼容性无法保证。遇到稳定性问题时,推荐走官方安装流程。

安装 Munk 官方 WDA

当前发行版不包含 WDA 安装脚本。你需要从开源仓库获取脚本,在本地完成签名、编译和安装。

1. Clone 仓库

git clone https://github.com/chaxiu/munk-ai.git
cd munk-ai

相关脚本:

  • scripts/device/check_ios_wda_signing.py — 检查签名配置
  • scripts/device/install_real_device_wda.py — 下载、编译并安装 WDA

Clone 仓库仅用于这一次环境准备;日常跑测试仍使用你已安装的 munk 命令即可。

2. 创建签名配置文件

在本地创建 ~/.munk/ios_secrets.env(不要提交到 git):

TEAM_ID=你的TeamID
IOS_WDA_BUNDLE_ID=sh.munk.wda
IOS_SIGNING_IDENTITY=Apple Development: 你的名字 (XXXXXXXXXX)
IOS_PROVISIONING_PROFILE_NAME=你的Profile名称

也可以用下面任一方式指定 Provisioning Profile(与 IOS_PROVISIONING_PROFILE_NAME 三选一):

# IOS_PROVISIONING_PROFILE_UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
# IOS_PROVISIONING_PROFILE_PATH=~/Downloads/YourProfile.mobileprovision

如果构建时需要单独的 Runner profile,可额外添加:

# IOS_PROVISIONING_RUNNER_PROFILE_PATH=~/Downloads/YourRunnerProfile.mobileprovision

各字段获取方式:

字段怎么填
TEAM_ID登录 Apple Developer → Membership → Team ID
IOS_SIGNING_IDENTITY终端执行 security find-identity -v -p codesigning,复制完整 identity 字符串
IOS_PROVISIONING_PROFILE_NAME在 Apple Developer → Profiles 为 WDA 相关 bundle 创建 Development profile,下载后双击安装到 Mac,再填 profile 名称

IOS_WDA_BUNDLE_ID 建议保持 sh.munk.wda。安装成功后,Apps 里的 iOS WDA bundle id 可留空,Munk 会使用默认值 sh.munk.wda.xctrunner

3. 检查签名是否就绪

在仓库根目录执行:

python3 scripts/device/check_ios_wda_signing.py \
  --signing-env-file ~/.munk/ios_secrets.env

输出中 "ok": true 表示可以继续。若为 false,按终端里的报错修正 ios_secrets.env 后重试。

4. 安装 WDA 到真机

<UDID> 替换为你在 准备工作 中获取的设备 UDID:

python3 scripts/device/install_real_device_wda.py \
  --device-udid <UDID> \
  --signing-env-file ~/.munk/ios_secrets.env

安装过程会自动完成下载源码、编译、安装到手机、启动 WDA 和健康检查。成功时,终端 JSON 输出中会出现:

"ok": true,
"stage": "completed"

常用可选参数:

  • --force-rebuild — 强制重新编译
  • --force-download — 强制重新下载 WDA 源码

以下情况建议重新安装:更换手机、证书轮换、iOS 大版本升级、或 WDA 持续无法启动。

接入 Munk 并开始使用

1. 启动服务

munk serve --host 127.0.0.1 --port 16888

2. 确认设备可见

浏览器打开 http://127.0.0.1:16888/,在 Devices 查看设备列表。

也可以用 Local API 确认:

http://127.0.0.1:16888/v1/devices?platform=ios

或用 CLI:

munk devices list --platform ios

3. 配置 iOS App

Web UI → Apps → 创建或编辑 App:

字段说明
平台选择 ios
iOS bundle id被测 App 的 bundle id
iOS WDA bundle id使用已有 WDA 时填写;官方安装完成后可留空

4. (可选)Settings 中的 iOS Bridge

大多数 USB 连接 的用户可以跳过这一步。

如果你使用 WiFi 连接 且系统为 iOS 18+,可能需要在 Web UI → Settings 中:

  1. 开启 用 sudo 启动 ios-device-bridge
  2. 填写本机 sudo 密码

5. 跑第一条 case

Web UI

  1. 进入 Runs(或从 Dashboard 发起执行)
  2. 选择你的 iOS App 和已连接的真机
  3. 执行 case

CLI 快速验证

<device-ref> 替换为 munk devices list --platform ios 输出中的 device_ref

munk run case \
  --app-id <your-app-id> \
  --plan-id <plan-id> \
  --case-id <case-id> \
  --platform ios \
  --device-ref <device-ref> \
  --bundle-id <被测App的bundle-id> \
  --config ./munk.yaml

对于 run planverify change 等可复现工作流,建议在 Apps 中维护好 iOS profile,再通过 JSON 请求文件或 Web UI 发起执行。

验证是否成功

完成配置后,建议逐项确认:

  • munk doctor 无阻塞性错误
  • 真机出现在 Web UI 设备列表或 munk devices list --platform ios 输出中
  • 成功跑完一次 case
  • Run 详情中没有持续的 WDA 启动 / session 失败报错

常见问题

现象处理步骤
设备列表为空检查 USB 连接;解锁手机;重新点「信任此电脑」;拔插数据线后重试
signing_check_failed检查签名 修正 ios_secrets.env;确认证书未过期
WDA 启动失败(已有 WDA)核对 Apps 中 iOS WDA bundle id 是否与设备上实际安装一致
WDA 启动失败(官方安装)重新执行 安装命令;必要时加 --force-rebuild
第三方 WDA 交互异常改用 Munk 官方 WDA 安装流程
case 报错与锁屏相关保持手机亮屏、解锁状态后再跑
WiFi 真机(iOS 18+)连不上在 Settings 开启 sudo bridge;参考 Appium Remote XPC Tunnels
换手机或换证书后失败对新设备重新执行官方安装流程

下一步读什么