官网链接
https://sonic-cloud.gitee.io/#/SIB
背景
有时在团队里,想远程触发设备的 wda 或者 fastbot 一类 xctest 的时候,有非常多的限制,因为设备只能在本地。而在 sonic 团队开发时,我们设备比较缺少,每次开发 sib 的新功能时,经常出现团队内有人有对应设备了,但是主程没有对应设备,只能盲打然后再让有设备的成员帮忙验证,非常耗费时间。做移动端的人多多少少都用过,stf 的 adbkit 里面的 usb-device-to-tcp 功能,它可以将连接的设备在局域网中分享出来,提供给其他的 adb client 连接,这个功能可以很方便的给 adb cli 开发人员调试。研究过源码的话,其实可以发现当前市面上的 iOS DTX 工具和 adb 的架构是很类似的,那为什么 sonic 不能做出类似 adbkit usb-device-to-tcp 效果的功能呢?文章源自玩技e族-https://www.playezu.com/504924.html
现状
目前主流的平台大多数暴露的 iOS 远程连接调试,都是暴露 wda 的远程 url,可以让 client 端利用 Appium 一类的工具连接这个 url 进行自动化操作。虽说这样能满足大部分需求,但是对于走协议层进行更多操作的用户来说,wda 提供的功能很少,而且前提要远程设备先开启 wda 服务。于是我们计划是往下走一层,从协议层提供远端连接。文章源自玩技e族-https://www.playezu.com/504924.html
大体思路
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 的辛勤付出文章源自玩技e族-https://www.playezu.com/504924.html
使用
在电脑 A 分享设备:
sib remote share -u <you device udid> -p <share port>
在电脑 B 连接:
执行文章源自玩技e族-https://www.playezu.com/504924.html
sib remote connect --host <you share device pc ip> -p <share port>
之后就可以通过通过 devices 获取到这个远程设备的信息文章源自玩技e族-https://www.playezu.com/504924.html
sib devices
类似如下文章源自玩技e族-https://www.playezu.com/504924.html
文章源自玩技e族-https://www.playezu.com/504924.html
文章源自玩技e族-https://www.playezu.com/504924.html
之后使用 sib 时的其他功能时,指定远程设备的 uuid,即可正常使用这些功能,就像手机连接在本地一样使用。文章源自玩技e族-https://www.playezu.com/504924.html
触发远程设备启动 wda:文章源自玩技e族-https://www.playezu.com/504924.html
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 就可以像本地链接一样使用啦!
未知地区 7F
目前只有 sib 能看的,我们组织这边落地效果不错,打通了很多流程。安卓 ios 能共用一套逻辑了。
本质 tidevice、xcode、idb 都是 usbmuxd 的 client,要做到其他 client 工具都能出现的话,估计得二开魔改 usbmuxd,事情就不是这么简单了
未知地区 6F
@ZhouYixun 远程连接上后,除了 sib,设备是否也会出现在其他调试工具的设备列表里?比如 tidevice、xcode 等。
之前有调研过这个方向,facebook 的 idb 也有提供类似的功能,但连接上的设备只能使用 idb 提供的功能,无法类似 adb 那样所有调试工具都可以连接上。
未知地区 5F
可能年底大家都忙吧
未知地区 4F
这么牛的技术居然没人关注!
未知地区 3F
不过也就平时用惯 adbkit 的才能感受到 ios 出了同类工具的那种感觉
未知地区 2F
看起来很牛逼的样子
未知地区 1F
@Lihuazhang 申精~