WebDriverAgent重簽名爬坑記

溫一壺清酒發表於2021-09-13

接上一篇博文,已經配置好了Xcode環境,那接下來要完成的就是重簽名WebDriverAgent。在講重簽名之前,我們還是先來了解下WebDriverAgent,熟悉的朋友,可以直接跳過。

WebDriverAgent

WebDriverAgent簡介

這個介紹在開源專案中的README.md有描述,直接搬運過來。

WebDriverAgent簡稱WDA,WebDriverAgent 是適用於 iOS的WebDriver 伺服器實現,可用於遠端控制 iOS 裝置。它允許您啟動和終止應用程式、點選和滾動檢視或確認螢幕上的檢視存在。這使其成為應用程式端到端測試或通用裝置自動化的完美工具。它通過連結XCTest.framework和呼叫 Apple 的 API 來直接在裝置上執行命令。WebDriverAgent 在 Facebook 開發並用於端到端測試,並被Appium成功採用。

目前使用較多的是Appium的WebDriverAgent,但Appium的WebDriverAgent是在FaceBook的基礎上開發的。而FaceBook的WebDriverAgent已經很久沒更新了,專案處於未維護狀態。

WebDriverAgent原理

圖引自testerhome,原理如下圖所示:

基礎工具安裝

我相信大家跟我一樣,想立即使用Xcode重簽名WDA,但執行 ./Scripts/bootstrap.sh 命令後,看到的卻是各種報錯。所以不要急,按如下步驟,安裝一些必要的工具。

安裝brew

Homebrew是一個包管理器,用於在Mac上安裝一些OS X沒有的UNIX工具(比如著名的wget),能在Mac中方便的安裝軟體或者解除安裝軟體,可以說Homebrew就是mac下的apt-get、yum神器。

安裝方式直接敲命令即可

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

我使用這個命令沒有成功,換了個命令

/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"

換了命令成功安裝,過程中會有輸入電腦密碼,按提示操作即可,如下所示:

安裝成功後,輸入命令 source /Users/hong/.zprofile 使其生效。

安裝carthage

使用命令 brew install carthage 即可完成安裝,如下所示:

安裝node

使用命令 brew install node 即可完成安裝

安裝WDA依賴

完成上述工具安裝後,在WDA目錄下,執行命令 ./Scripts/bootstrap.sh ,可能有些朋友會碰到如下報錯:

升級 npm

使用命令 npm install -g npm@7.21.0 即可,如下所示:

安裝node版本管理模組

還有個報錯, ERESOLVE unable to resolve dependency tree ,度娘了下,是npm版本太高,需要降級。但我只安裝了node版本管理模組就可以了,命令 sudo npm install n -g,操作如下:

再執行命令 ./Scripts/bootstrap.sh,正常編譯,沒有報錯,靜候佳音,期間會下各種依賴,如下所示:

依賴安裝成功後,會出現build提示,如下所示:

WebDriverAgent重簽名

到此,前期準備工作都好了,我們再來配置下Xcode,比如appleid、包名、版本。

登入appleid賬號

具體操作如下所示:

選擇團隊

在 targets 類別中,配置簽名團隊,這裡可選的資料,就是剛才我們登入的賬號,如果沒有登入,則選不了。操作如下所示:

但選了之後,還會有如下報錯資訊,如下所示:

如何解決該問題,我們繼續來看。需要注意的是,每個包都得選擇團隊。

配置包名

我們完成的就是重簽名,所以需要重新配置個不重複的包名,操作如下所示:

將這裡替換掉就好了。需要注意的是,每個包都得修改,而且需要保持一致。

裝置版本

重簽名時,Xcode選擇的ios版本,最好跟本機保持一致,或相近,操作如下所示:

Test

上述配置完成後,選擇對應的專案和裝置,操作如下:

選擇專案:

選擇裝置:

操作 Product > Test,我們來看結果。

果不其然,使用FaceBook的WDA重簽名遇到了以下報錯,一一列舉,我們來看。

報錯總結

報錯一

報錯資訊:Building for iOS, but the linked and embedded framework 'RoutingHTTPServer.framework' was built for iOS + iOS Simulator

解決辦法:

在 targets 下的類別中,依次將 Build Settings 裡的 Validate Workspace 修改為 Yes ,操作如下所示:

報錯二

報錯資訊:/WebDriverAgent/Carthage/Build/iOS/RoutingHTTPServer.framework/Headers/RouteResponse.h:2:9: Double-quoted include "HTTPResponse.h" in framework header, expected angle-bracketed instead

解決辦法:

在 project 的 Info 資訊中,將 Quoted Include In Framework Header 修改為 false ,操作如下所示:

報錯三

報錯資訊:/WebDriverAgent/WebDriverAgentLib/Utilities/FBFailureProofTestCase.m:29:1: Implementing deprecated method

解決辦法:

recordFailureWithDescription 修改為 recordIssue ,操作如下所示:

報錯四

報錯資訊:xcode 編譯程式執行,總是提示輸入使用者名稱和密碼

解決辦法:

通過提示框,進入到祕鑰配置頁面,配置祕鑰的訪問許可權。將自己的祕鑰配置成 允許所有應用程式訪問此專案 ;或者 新增具體的應用。操作如下所示:

解決了上面四個問題,繼續Test,手機上是成功安裝了WebDriverAgent,但還是有報錯,此報錯按度娘中的修改也沒有成功。

具體報錯如下:

-[UITestingUITests internalImplementation]: unrecognized selector sent to instance 0x2825b1900 (NSInvalidArgumentException)

我比較喜歡折騰,既然FaceBook的不行,那索性就換Appium的試試,換Appium的WDA,竟然直接成功了。可能是之前的錯,已經排坑了,所以成功的這麼順滑。

重簽名成功後,控制檯出現的日誌,如下所示:

好了,WDA重簽名終於成功了,可以搗鼓ios自動化了,下期再見。

相關文章