环境:MacOS:10.15.5,Xcode:11.5,IOS:12.3
我们都知道IOS相对于安卓端增加了很多封闭性,进行自动化之类的操作要相对复杂一些,站在巨人的肩膀上是一件能够让我们走的更远的有效又实际的方式。本文将介绍如何通过facebook的WebDriverAgent连接IOS设备
博主最开始是想研究网易的airtest,为了使IDE连接上IOS设备研究了网易提供的IOS-Tagent,但是这个项目已经很久没有更新,很多新版本的Xcode和IOS设备已经不再支持,跑起来会出很多问题。考虑到IOS-Tagent是基于facebook的WebDriverAgent,就研究了一下
2020-06-05更新:终于把airtest那个IOS-Tagent搞定了,能够连上ios设备了,见下篇文章[airtest连接IOS设备过程记录
首先,需要安装好Carthage工具,该工具是一个包管理工具,类似于java中的maven的作用,具体安装方法有多种,可以通过brew install carthage命令安装,但是我在安装过程中发生了brew版本更新一集ruby版本等多种问题,最后简单粗暴的在这里下载pkg安装包,更加方便快捷。。双击安装即可(早知道我何必听信网上的博客非要钻牛角尖去搞brew。。)
其次,需要安装libimobiledevice,使用brew install libimobiledevice命令即可安装(真香系列)
下载WebDriverAgent相关代码
尽量去github上下载,没有git命令的小伙伴去这个网址上下载zip包也一样
git clone https://github.com/facebookarchive/WebDriverAgent.git
依赖包安装
进入WebDriverAgent目录下,执行命令./Scripts/bootstrap.sh,这个命令会通过刚刚安装的carthage安装很多依赖包,时间可能会很长,耐心等待即可
申请苹果开发者证书,部署IOS项目平台需要开发者证书,现在可以通过个人Apple Id登录即可
登录方式为:Xcode -> Preferences -> Accounts -> Manage Certificates -> 左下角+号 -> ios development
项目设置
接下来使用Xcode打开项目,选择WebDriverAgentLib和WebDriverAgentRuner的Team字段,进入Singing&Capabilities选项,修改Team字段为刚才自己设置的证书
设置前:
设置证书后,下方警告自动消失:
设置好账号后还会报出一个错误,
大概意思是这个项目的app ID冲突了,只需要改成一个不重复的id即可
选择Product -> Schema -> WebDriverAgentRunner,如下图
接着
选择Product -> Destination -> 你的连接的真机名
到这里已经基本设置完毕
运行Product -> Test,让项目以Test模式跑起来
第一次使用时会连接失败,报出如下错误:
进入手机设置 -> 通用 -> 描述文件与设备管理 -> 信任对应的应用即可(该步骤需要手机联网)
再重新执行项目即可正常链接,手机上可以看到一个没有图标的WebDriverAgent应用表示安装成功~
设置View -> DebugArea -> Activate Console,显示项目输出,如果出现下图输出内容表示运行成功
在浏览器中输入这个地址http://192.168.2.59:8100可以看到一个json串,表示连接成功,如果没有成功也不要紧,在命令行中使用 iproxy 8100 8100命令(前期准备中第二步安装的命令)将手机的8100端口与PC的8100端口做映射,在地址栏中打开http://127.0.0.1:8100/status返回一个json串即表明连接成功
访问http://127.0.0.1:8100/inspector即可看到如下界面(此处没有看到手机的屏幕投影个人推测是因为Xcode版本原因,我的另一篇博客中使用Xcode10连接可以看到屏幕投影)
点击Home按钮可以看到连接的设备跳转回首页呦~
@property(nonatomic) BOOL shouldSetShouldHaltWhenReceivesControl; // @synthesize shouldSetShouldHaltWhenReceivesControl=_shouldSetShouldHaltWhenReceivesControl;
// self.internalImplementation = (_XCTestCaseImplementation *)[FBXCTestCaseImplementationFailureHoldingProxy proxyWithXCTestCaseImplementation:self.internalImplementation];
if ([self respondsToSelector:@selector(internalImplementation)]) {
// The `internalImplementation` API has been removed since Xcode 11.4
self.internalImplementation =
(_XCTestCaseImplementation *)[FBXCTestCaseImplementationFailureHoldingProxy
proxyWithXCTestCaseImplementation:self.internalImplementation];
} else {
// https://github.com/appium/appium/issues/13949
self.shouldSetShouldHaltWhenReceivesControl = NO;
self.shouldHaltWhenReceivesControl = NO;
}
代码修改之后再次运行即可,github对应issue地址:issue
虽然最后还是没能成功搞定IOS-Tagent,搞定了这个也记录一下来安慰自己吧。。
更新:搞定了airtest IDE连接IOS设备,见下文airtest连接IOS设备过程记录