重磅!全新 sib remote 功能上線,iOS 遠端除錯的福音!

Eason發表於2022-12-04

官網連結

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 效果的功能呢?

現狀

目前主流的平臺大多數暴露的 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 就可以像本地連結一樣使用啦!

相關文章