官网链接
背景
有时在团队里,想远程触发设备的wda或者fastbot一类xctest的时候,有非常多的限制,因为设备只能在本地。而在sonic团队开发时,我们设备比较缺少,每次开发sib的新功能时,经常出现团队内有人有对应设备了,但是主程没有对应设备,只能盲打然后再让有设备的成员帮忙验证,非常耗费时间。做移动端的人多多少少都用过,stf的adbkit里面的usb-device-to-tcp功能,它可以将连接的设备在局域网中分享出来,提供给其他的adb client连接,这个功能可以很方便的给adb cli开发人员调试。研究过源码的话,其实可以发现当前市面上的iOS DTX工具和adb的架构是很类似的,那为什么sonic不能做出类似adbkit usb-device-to-tcp效果的功能呢?
现状
目前主流的平台大多数暴露的iOS远程连接调试,都是暴露wda的远程url,可以让client端利用Appium一类的工具连接这个url进行自动化操作。虽说这样能满足大部分需求,但是对于走协议层进行更多操作的用户来说,wda提供的功能很少,而且前提要远程设备先开启wda服务。于是我们计划是往下走一层,从协议层提供远端连接。
大体思路
sib依赖于gidevice,而gidevice依赖于usbmux,而每次进行设备连接时,都会进行一次usbmux的连接,然后往里面发送相关的DTX数据,如果研究过相关文章,就会知道usbmux本质上是一个本地的tcp服务。基于这些特性,于是我们在 sonic-gidevice中对gidevice进行二次开发,设计思路:对外暴露一个remote tcp server,可以让其他客户端往这个remote tcp server里发送DTX,然后server端将这些DTX数据转发到本地的usbmux tcp server,当usbmux tcp server产生回报信息后,remote tcp server转发这些信息给对应的客户端。
在这里非常感谢组织成员 aoliaoaoaojiao 的辛勤付出
使用
在电脑A分享设备:
sib remote share -u <you device udid> -p <share port>
在电脑B连接:
执行
sib remote connect --host <you share device pc ip> -p <share port>
之后就可以通过通过devices获取到这个远程设备的信息
sib devices
类似如下
之后使用sib时的其他功能时,指定远程设备的uuid,即可正常使用这些功能,就像手机连接在本地一样使用。
触发远程设备启动wda:
sib run wda -b xxxxx
监控远程设备性能信息:
sib perfmon
或者其他所有sib的功能都可以直接使用了!
电脑B断开连接:
sib remote disconnect --host <you share device pc ip> -p <share port>
或者电脑A直接停止share进程
结语
目前sib已经更新了,sonic平台的话也将在12月的2.1.0版本正式引入这个功能,届时可以直接在前端页面获取设备远程调试的链接,然后用户可以自己本地sib remote connect就可以像本地链接一样使用啦!