Appium iproxy 多设备端口映射失效

kiki · July 02, 2025 · Last by kiki replied at July 03, 2025 · 1144 hits

背景介绍:
IOS 手机设备自动化测试需要指定 WebDriverAgent 的服务端口,自动化执行过程通过 IP:端口号可以访问 ios 测试机执行自动化测试用例。
但 IP 容易变更,需要一直重复更新 IP 连接信息
解决办法:
通过 iproxy 命令建立 IOS 设备与计算机之间的端口映射(MAC)
即可以执行如下命令,可以映射不同端口号,程序只需要固定使用"127.0.0.1:8010"/"127.0.0.1:8102"来访问不同的手机:

iproxy 8101 8101
iproxy 8102 8102

问题现像:
MAC 多手机设备连接,总是只有最后一个连接的手机端口映射有效,前面的手机端口映射失效,显示如下报错:

问题原因及解决办法:
usbmuxd 是苹果的服务,用于在 USB 协议上实现多路 TCP 连接,将 USB 通信抽象为 TCP 通信。iproxy 是 usbmuxd 附带的一个小工具,用于将设备的某个端口映射到电脑的某个端口
这里问题原因是 usbmuxd 默认只与最后连接的设备建立活跃会话,导致较早连接的设备端口映射失效。虽然表面看是端口冲突(如 lsof 显示端口被占用),实际是 usbmuxd 未正确区分多设备请求,导致旧连接被强制释
当多设备连接时,需要指定 UDID 来区分设备。在 iproxy 命令中,可以添加 UDID 参数来指定目标设备,例如 iproxy 2229 22 -u [UDID]
换成如下命令:

iproxy 8101 8101 -u 03560c990d30eaaf3602cd02f8c509a8a2518018
iproxy 8102 8102 -u 00008020-000A714426D3002E
共收到 2 条回复 时间 点赞

你的命令有点神奇,你给手机 1 的设备启动 wda 用 8101,手机 2 用 8102?这么麻烦的吗
一般人都是直接
iproxy 8101 8110 -u 03560c990d30eaaf3602cd02f8c509a8a2518018
iproxy 8102 8110 -u 00008020-000A714426D3002E

直接访问
http://localhost:8101

http://localhost:8102

2Floor has deleted
kiki #3 · July 03, 2025 Author

设备端口的区别而已,我这里多设备,设备端口指定了不同的端口,使用了本地端口相同的端口数字

需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up