接上一篇博文,已经配置好了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,原理如下图所示:

WebDriverAgent重签名爬坑记_重签名

基础工具安装

我相信大家跟我一样,想立即使用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)"

换了命令成功安装,过程中会有输入电脑密码,按提示操作即可,如下所示:

WebDriverAgent重签名爬坑记_重签名_02

安装成功后,输入命令 source /Users/hong/.zprofile 使其生效。

安装carthage

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

WebDriverAgent重签名爬坑记_xcode_03

安装node

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

安装WDA依赖

完成上述工具安装后,在WDA目录下,执行命令 ./Scripts/bootstrap.sh ,可能有些朋友会碰到如下报错:

WebDriverAgent重签名爬坑记_xcode_04

升级 npm

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

WebDriverAgent重签名爬坑记_facebook_05

安装node版本管理模块

还有个报错, ERESOLVE unable to resolve dependency tree ,度娘了下,是npm版本太高,需要降级。但我只安装了node版本管理模块就可以了,命令 sudo npm install n -g,操作如下:

WebDriverAgent重签名爬坑记_xcode_06

再执行命令 ./Scripts/bootstrap.sh,正常编译,没有报错,静候佳音,期间会下各种依赖,如下所示:

WebDriverAgent重签名爬坑记_xcode_07

依赖安装成功后,会出现build提示,如下所示:

WebDriverAgent重签名爬坑记_重签名_08

WebDriverAgent重签名

到此,前期准备工作都好了,我们再来配置下Xcode,比如appleid、包名、版本。

登录appleid账号

具体操作如下所示:

WebDriverAgent重签名爬坑记_WDA_09

选择团队

在 targets 类别中,配置签名团队,这里可选的数据,就是刚才我们登录的账号,如果没有登录,则选不了。操作如下所示:

WebDriverAgent重签名爬坑记_facebook_10

但选了之后,还会有如下报错信息,如下所示:

WebDriverAgent重签名爬坑记_facebook_11

如何解决该问题,我们继续来看。需要注意的是,每个包都得选择团队。

配置包名

我们完成的就是重签名,所以需要重新配置个不重复的包名,操作如下所示:

WebDriverAgent重签名爬坑记_xcode_12

将这里替换掉就好了。需要注意的是,每个包都得修改,而且需要保持一致。

设备版本

重签名时,Xcode选择的ios版本,最好跟本机保持一致,或相近,操作如下所示:

WebDriverAgent重签名爬坑记_facebook_13

Test

上述配置完成后,选择对应的项目和设备,操作如下:

选择项目:

WebDriverAgent重签名爬坑记_facebook_14

选择设备:

WebDriverAgent重签名爬坑记_ios_15

操作 Product > Test,我们来看结果。

果不其然,使用FaceBook的WDA重签名遇到了以下报错,一一列举,我们来看。

报错总结

报错一

报错信息:Building for iOS, but the linked and embedded framework 'RoutingHTTPServer.framework' was built for iOS + iOS Simulator

WebDriverAgent重签名爬坑记_WDA_16

解决办法:

在 targets 下的类别中,依次将 Build Settings 里的 Validate Workspace 修改为 Yes ,操作如下所示:

WebDriverAgent重签名爬坑记_facebook_17

报错二

报错信息:/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重签名爬坑记_WDA_18

报错三

报错信息:/WebDriverAgent/WebDriverAgentLib/Utilities/FBFailureProofTestCase.m:29:1: Implementing deprecated method

WebDriverAgent重签名爬坑记_重签名_19

解决办法:

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

WebDriverAgent重签名爬坑记_ios_20

报错四

报错信息:xcode 编译程序运行,总是提示输入用户名和密码

解决办法:

通过提示框,进入到秘钥配置页面,配置秘钥的访问权限。将自己的秘钥配置成 允许所有应用程序访问此项目 ;或者 添加具体的应用。操作如下所示:

WebDriverAgent重签名爬坑记_WDA_21

解决了上面四个问题,继续Test,手机上是成功安装了WebDriverAgent,但还是有报错,此报错按度娘中的修改也没有成功。

具体报错如下:

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

WebDriverAgent重签名爬坑记_WDA_22

我比较喜欢折腾,既然FaceBook的不行,那索性就换Appium的试试,换Appium的WDA,竟然直接成功了。可能是之前的错,已经排坑了,所以成功的这么顺滑。

重签名成功后,控制台出现的日志,如下所示:

WebDriverAgent重签名爬坑记_重签名_23

好了,WDA重签名终于成功了,可以捣鼓ios自动化了,下期再见。