乾貨|一款實用iOS雲真機的技術架構是如何搭建的?

語言: CN / TW / HK

目前,市場上有很多App支援iOS9、iOS10,一旦在這些低版本的機器出現相容性問題時,想找一臺手機來debug就是一件非常難的事,而且iOS系統的解析度也越來越多,無論是自動化還是日常的相容性,都需要有更全面的機型去做相容性測試。

對移動開發者來說,無論是開發、除錯、測試、還是上線前後檢驗效果,都離不開測試機,甚至是產品、運營和客服,也時不時需要使用真機進行產品體驗、產品運營。傳統渠道上,開發者只能通過採購裝置滿足各部門測試需求。然而隨著業務的發展,這種方式的缺陷越來越凸顯:稀缺機型搶手、裝置數量不足、費用高企、資源利用率不高等。

我們在調研了業界的諸多雲真機解決方案後,發現大家尤其是對iOS端支援得不好,並且收費也相對較高。歷經數個版本的迭代後,友盟+推出了搭載在U-APM應用效能監控平臺上的雲真機服務,為移動開發者提供了靈活地測試操作介面,支援ADB除錯、WEB遠端除錯、掃碼、抓包、虛擬定位等測試功能,並提供了測試報告供開發者後續檢視。尤其是在iOS支援上做的非常細緻和用心。

在螢幕畫面方面,友盟+雲真機高階機能有15幀左右的比較流暢的高畫質螢幕傳輸,並且是秒開、超級省流量。

在使用者體驗方面,一系列快捷設定如安裝ipa、鍵盤輸入、從電腦直接貼上內容到手機、一鍵web除錯等急速使用

在Mac主機方面,一臺i5 的mac mini能支援同時接入20臺手機

雲真機背後的技術架構揭祕

基本和openSTF類似,mini作為provider,provider去管理手機和處理與雲端伺服器之間的訊息,連線到雲端伺服器,雲端伺服器能夠支援N個provider接入,並且自身能很容易地去做擴充套件,而云端伺服器則負責分發訊息,與做一些websocket服務的代理轉發,前端則直接對接雲端伺服器。

雲真機核心驅動

這部分基於阿里巴巴強大的技術能力完全自研,不基於WDA,也不基於開源產品,現在市面上很多iOS雲真機都會基於WDA或者其他的開源自動化測試框架去做的,可是這些框架的設計初衷並不是做雲真機,會引入了很多開發不需要的功能模組。我們希望雲真機核心驅動部分,能儘量輕量,而且穩定。整個核心驅動部分,最主要分為螢幕捕獲、模擬控制、輔助功能介面。

螢幕捕獲

苦於蘋果的限制,這一點是最難突破,我們也有嘗試過很多方案。 例如:idevicescreenshot,幀率太低了,而且通過逆向發現iOS系統中的ScreenShorter 不接受任何寬高、圖片質量、圖片格式的引數,這個方法在iPhoneX之類的高解析度的機器,截圖會更慢,只有1-2幀。

而比較流行的iOS-minicap方案,這個方案雖然能非常非常高效地實時獲取到螢幕內容,但這個方案最大的缺點就是1個mac只能提供到1臺iPhone的實時螢幕流,成本實在太高,我們也有嘗試過破解Mac中CoreMediaIO。

framework的iOSScreenCapture協議 (iOS-minicap就是呼叫了系統提供的iPhone錄屏介面,由AVFoundation與CoreMediaIO提供的),我們還有嘗試過把整個Mac虛擬化去做隔離,讓同一個物理機使用多個iOS-minicap,但這些種種方案,最終都以失敗告終。

最終方案是,在XCUITest中是使用私有API去截圖,這個私有API能最高能達到15幀左右,基本能滿足我們的需求了,再把每一幀編碼成影片流,從而節省流量。 可以感受一下jpg截圖與影片流的流量大小對比:

以XS Max為例,每一幀都平均在90K左右,每一幀的資料傳輸截圖:

 

與圖片對比,肉眼可見的同等畫質下的,當編碼成影片流後,一樣的機型,用相同的操作和相同的畫面去對比,影片流所需的頻寬非常小。

 

最重要的是,影片流能節省的不僅僅是伺服器出口的流量,還能減輕usbmuxd的cpu資源佔用。usbmuxd 當前是單程序的,只能使用單個cpu的核心,很容易到達瓶頸,對此我們還有一個改造就是把usbmuxd改成能充分使用cpu的每一個核心,提高整個mac的硬體使用率,這部分,我們以後在單獨寫文章介紹。

模擬控制

相對於螢幕獲取,點選事件倒是簡單很多,可以參考WDA,直接使用XCUITest的私有API觸發就可以。 而訊息格式則是沿用回openSTF的格式,provider收到之後直接轉發給XCUITest。這裡的重點是使用長連線去與provider做資料互動,而不是HTTP,從而提高整個鏈路的響應速度。

 

開發者應用場景

錯誤排查:復現使用者錯誤進行排查修復,測試報告涵蓋錯誤捕獲資訊

網路抓包:對手機的網路行為進行監控測試,排查網路、安全相關等問題

頁面除錯:一鍵除錯,操作體驗可以與Chrome Devtools相媲美

虛擬定位:支援全球高精度虛擬定位,實時模擬裝置地理位置驗證問題

ADB遠端:連線ADB,使用IDE或者命令列的方式進行Android遠端除錯

更多請點選連結,點選免費使用友盟+雲真機服務

掃一掃加入友盟+技術社群

分享到: