接上一篇博文,已经配置好了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重签名爬坑记的更多相关文章

  1. .NET Core爬坑记 1.0 项目文件

    前言: 之所以要写这个系列是因为在移植项目到ASP.NET Core平台的过程中,遇到了一些“新变化”,这些变化有编译方面的.有API方面的,今天要讲的是编译方面的一些问题.我把它们整理后分享出来,以 ...

  2. mint-ui之picker爬坑记

    picker的数据来源为动态获取时,数据无法正常渲染!因为方法不对,所以坑大了!深刻地体会到'业不精,我之过',谨以此文,深刻地记录一下踩坑及爬坑的整个过程,以便日后不再入坑,也给后来者提供一下参考 ...

  3. mac开发环境爬坑记(搭建php+nginx+mysql+redis+laravel+git+phpstorm)

    题外话:前几天,终于以原价一半的价格,将我那台15版mbp在bbs上卖了出去.之所以用了“终于”这个词儿,是我一直迟迟没有下定决心卖掉它,可眼瞅着再不卖掉,又要掉价,况且我的新电脑,也终于下来了. 话 ...

  4. python接口自动化(十七)--Json 数据处理---一次爬坑记(详解)

    简介 有些 post 的请求参数是 json 格式的,这个前面发送post 请求里面提到过,需要导入 json模块处理.现在企业公司一般常见的接口因为json数据容易处理,所以绝大多数返回数据也是 j ...

  5. centos部署yapi爬坑记

    前言 这几天终于完成了为期三个月的公司某个demo版的项目,在这期间和公司的后台因为API的事怼过无数次了,'我的接口没问题,是你请求的方式不对吧!'.'一定是你请求的参数不对'......诸如此类问 ...

  6. swagger 爬坑记

    Swagger 的好处不用我多说,但是一不小心可能就被坑……今天下午就被上了一课,废话不多说,直接上代码(图) 实体类: 好像没啥问题,对吧? 但是,在http://localhost:8080/sw ...

  7. 【MyBatis】MyBatis自动生成代码查询之爬坑记

    前言 项目使用SSM框架搭建Web后台服务,前台后使用restful api,后台使用MyBatisGenerator自动生成代码,在前台使用关键字进行查询时,遇到了一些很宝贵的坑,现记录如下.为展示 ...

  8. SQL Server 事务复制爬坑记

    SQL Server 复制功能折腾了好几天了,现特将其配置过程以及其间遇到的问题记录下来,以备日后查阅.同时,也让“同道”同学们少走不必要的弯路.如果有不对之处,欢迎大家指正,欢迎沟通交流. 一.复制 ...

  9. protobuf + maven 爬坑记

    疯狂创客圈 死磕Netty 亿级流量架构系列之20 [博客园 总入口 ] 本文说明 本篇是 netty+Protobuf 整合实战的 第一篇,完成一个 基于Netty + Protobuf 实战案例. ...

随机推荐

  1. QT从入门到入土(四)——多线程(QtConcurrent::run())

    引言 在前面对Qt多线程(QThread)做了详细的分析:QT从入门到入土(四)--多线程(QThread) - 唯有自己强大 - 博客园 (cnblogs.com) 但是最近在做项目时候,要将一个函 ...

  2. 偷天换日 树形DP+背包

    A. 偷天换日 内存限制:256 MiB 时间限制:1000 ms 标准输入输出 题目类型:传统 评测方式:文本比较   题目描述 神偷对艺术馆内的名画垂涎欲滴准备大捞一把.艺术馆由若干个展览厅和若干 ...

  3. 【Flutter学习一】Android的App的三种开发方式

    是时候学习新技术了: 转自:https://blog.csdn.net/qq_41346910/article/details/86692124 移动开发发展到现在,已经出现了三种开发方式.本文我将为 ...

  4. 开源分享:谷歌大佬联合打造《高级Kotlin强化实战(附Demo)》

    Kotlin 以其简洁的特性而闻名,而在我们的实践中,更加简洁就意味着更加高效.事实上,在使用 Kotlin 的专业 Android 开发者中,有多达 67% 的人表示 Kotlin 已经帮助他们提升 ...

  5. GIT·全局配置文件及项目配置文件

    阅文时长 | 0.03分钟 字数统计 | 48.8字符 主要内容 | 1.引言&背景 2.声明与参考资料 『GIT·全局配置文件及项目配置文件』 编写人 | SCscHero 编写时间 | 2 ...

  6. Use Module and Function instead of Class in Python

    The following scripts run in ipython demonstrate the differences between instance method and static ...

  7. SpringMVC学习09(文件的上传和下载)

    文件上传和下载 准备工作 文件上传是项目开发中最常见的功能之一 ,springMVC 可以很好的支持文件上传,但是SpringMVC上下文中默认没有装配MultipartResolver,因此默认情况 ...

  8. Java:导出Excel大批量数据的优化过程

    背景 团队目前在做一个用户数据看板(下面简称看板),基本覆盖用户的所有行为数据,并生成分析报表,用户行为由多个数据来源组成(餐饮.生活日用.充值消费.交通出行.通讯物流.交通出行.医疗保健.住房物业. ...

  9. Woc,考场(面试)忘记打平衡树怎么办,Trie救你命

    Woc,考场(面试)忘记打平衡树怎么办,Trie救你命 文本只发布于博客园,其他地方出现本文均是未经许可的盗版. 算法导入 众所周知平衡树很难打(大佬除外),还老是调错.万一这种事情发生在关键时刻你就 ...

  10. SpringBoot开发二十一-发送私信

    发送私信功能开发: 功能开发 数据访问层 message-mapper.xml 增加 <insert id="insertMessage" parameterType=&qu ...