WebDriverAgent重签名爬坑记
接上一篇博文,已经配置好了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自动化了,下期再见。
WebDriverAgent重签名爬坑记的更多相关文章
- .NET Core爬坑记 1.0 项目文件
前言: 之所以要写这个系列是因为在移植项目到ASP.NET Core平台的过程中,遇到了一些“新变化”,这些变化有编译方面的.有API方面的,今天要讲的是编译方面的一些问题.我把它们整理后分享出来,以 ...
- mint-ui之picker爬坑记
picker的数据来源为动态获取时,数据无法正常渲染!因为方法不对,所以坑大了!深刻地体会到'业不精,我之过',谨以此文,深刻地记录一下踩坑及爬坑的整个过程,以便日后不再入坑,也给后来者提供一下参考 ...
- mac开发环境爬坑记(搭建php+nginx+mysql+redis+laravel+git+phpstorm)
题外话:前几天,终于以原价一半的价格,将我那台15版mbp在bbs上卖了出去.之所以用了“终于”这个词儿,是我一直迟迟没有下定决心卖掉它,可眼瞅着再不卖掉,又要掉价,况且我的新电脑,也终于下来了. 话 ...
- python接口自动化(十七)--Json 数据处理---一次爬坑记(详解)
简介 有些 post 的请求参数是 json 格式的,这个前面发送post 请求里面提到过,需要导入 json模块处理.现在企业公司一般常见的接口因为json数据容易处理,所以绝大多数返回数据也是 j ...
- centos部署yapi爬坑记
前言 这几天终于完成了为期三个月的公司某个demo版的项目,在这期间和公司的后台因为API的事怼过无数次了,'我的接口没问题,是你请求的方式不对吧!'.'一定是你请求的参数不对'......诸如此类问 ...
- swagger 爬坑记
Swagger 的好处不用我多说,但是一不小心可能就被坑……今天下午就被上了一课,废话不多说,直接上代码(图) 实体类: 好像没啥问题,对吧? 但是,在http://localhost:8080/sw ...
- 【MyBatis】MyBatis自动生成代码查询之爬坑记
前言 项目使用SSM框架搭建Web后台服务,前台后使用restful api,后台使用MyBatisGenerator自动生成代码,在前台使用关键字进行查询时,遇到了一些很宝贵的坑,现记录如下.为展示 ...
- SQL Server 事务复制爬坑记
SQL Server 复制功能折腾了好几天了,现特将其配置过程以及其间遇到的问题记录下来,以备日后查阅.同时,也让“同道”同学们少走不必要的弯路.如果有不对之处,欢迎大家指正,欢迎沟通交流. 一.复制 ...
- protobuf + maven 爬坑记
疯狂创客圈 死磕Netty 亿级流量架构系列之20 [博客园 总入口 ] 本文说明 本篇是 netty+Protobuf 整合实战的 第一篇,完成一个 基于Netty + Protobuf 实战案例. ...
随机推荐
- SprintBoot简单入门
1.什么是SpringBoot SpringBoot是基于Spring的基础上提供了一套全新的框架,其目的是为了在开发时简化Spring的相关配置及开发过程.在SpringBoot未出来之前,准备搭建 ...
- OpenGL学习笔记(二)画三角形
目录 渲染管线(Graphics Pipeline) 编码实现 顶点数据 顶点缓冲对象(VBO) 顶点着色器 编译着色器 片段着色器 着色器程序 链接顶点属性 顶点数组对象 最终绘制三角形 索引缓冲对 ...
- 【Java】jeesite使用学习
初始配置环境及软件: 名称 版本 作用 Tomcat 7.0 微小型服务器,版本无所谓,装个Tomcat 9估计也没事 IntelliJ IDEA 2021.1.3 x64 2021.1.3 编译器, ...
- golang 日志框架(zap)完整配置和使用
目录结构: logger.go文件: package log import ( rotatelogs "github.com/lestrrat-go/file-rotatelogs" ...
- 一看就会的高效Discuz初始化入门安装方法
在使用Discuz搭建论坛的过程中,小九发现有许多朋友对于宝塔的安装和初始化不太熟悉,找不到适合的方法.或是按照一些教程安装却出现问题得不到解决,只能选择重新再来. 今天,小九给大家介绍简单的镜像一键 ...
- 谈谈Linux字符设备驱动的实现
@ 目录 字符设备驱动基础 申请设备号 创建设备节点 在驱动中实现操作方法 文件IO调用驱动中的操作 应用程序与驱动的数据交互 内核驱动如何控制外设 控制LED的简单驱动实例 驱动程序的改进 框架复盘 ...
- Java中Lambda表达式基础及使用详解
概述 Lambda 是JDK 8 的重要新特性.它允许把函数作为一个方法的参数(函数作为参数传递进方法中),使用 Lambda 表达式可以使代码变的更加简洁紧凑,使Java代码更加优雅. 标准格式 三 ...
- Linux部署PgSQL数据库
1.安装: yum install postgresql-server -y postgresql-setup initdb cd /var/lib/pgsql/data 2.进入 /var/lib/ ...
- 题解 God Knows
传送门 这里有个线段树维护单调栈的神仙技巧 同机房dalao @Yubai的不同理解方式 yysy,我考场上连\(n^2\)的暴力都没搞出来 这里实际上求的是最小权极大上升子序列 但这个跟题目几乎没什 ...
- 最短路径 | 深入浅出Dijkstra算法(一)
参考网址: https://www.jianshu.com/p/8b3cdca55dc0 写在前面: 上次我们介绍了神奇的只有五行的 Floyd-Warshall 最短路算法,它可以方便的求得任意两点 ...