接上一篇博文,已經配置好了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自動化了,下期再見。