开源云真机平台Sonic(Windows端)接入iOS设备实践

开源云真机平台Sonic(Windows端)接入iOS设备实践

简介: 开源云真机平台Sonic(Windows端)接入iOS设备实践过程,及相关注意事项。

背景

在前面的文章中,我分享了《开源云真机平台-Sonic应用实践》、《开源云真机平台Sonic跨版本升级实践》。目前sonic版本已经升级到了最新的2.0.5,但我接入的都是些Android设备,iOS设备之前也尝试过接入,但没有成功,因为我用的是CentOS系统。这两天又用Windows系统重新试了一下,终于成功接入了。下面简单分享一下实践过程以及其中的一些注意事项。

一、准备工作&注意事项

1.Agent必须部署在Mac/Ubuntu/Windows系统,CentOS系统不支持接入iOS设备(这也是我之前一直尝试失败的原因);

2.必须得有一台Mac系统的电脑,且Mac电脑中安装了Xcode,因为前期要构建WebDriverAgent包到iOS设备中,后面可以脱离Mac使用;

3.必须得有个苹果开发者账号,且当前iOS设备的UDID已添加到此开发者账号下,这样才能构建WDA(WebDriverAgent);

4.如果iOS设备准备接入在Windows或Ubuntu系统的Agent上,需要安装:

  • usbmux: 这个服务主要用于在USB协议上实现多路TCP连接,将USB通信抽象为TCP通信。苹果的iTunes、Xcode,都直接或间接地用到了这个服务。所以Windows上可以通过直接安装iTunes来解决,Ubuntu需要单独安装;
  • sib:即sonic-ios-bridge,sonic与iOS设备之间的通信桥梁,类似于ADB(Android Debug Bridge)。当然安装淘宝开源的tidevice也就可以,方便查看设备状态以及调试;

二、Mac端工作

有了以上条件,我们就可以执行iOS接入Sonic的相关工作了。接入过程主要分为以下步骤:

  1. 克隆WebDriverAgent项目到Mac电脑;
  2. 在Xcode中打开克隆的WebDriverAgent项目,并修改相关信息(后面会具体提到);
  3. 构建WebDriverAgent包到iOS设备;

1.克隆项目

git clone https://github.com/appium/WebDriverAgent 
或 
git clone https://github.com/SonicCloudOrg/sonic-ios-wda.git

2.修改WebDriverAgent相关信息

在Mac电脑的Xcode中打开克隆的WebDriverAgent项目,按照如下修改:

① 修改WebDriverAgentLib

Team选择你自己的或者公司的开发者账号,Bundle Identifier改成你自己的名字,不要用原来的,名字任意,例如:com.appium8888.WebDriverAgentLib

② 修改WebDriverAgentRunner

Team仍然选择你自己的或者公司的开发者账号,Bundle Identifier改成你自己的名字,与前面一步修改的保持一致,例如:com.appium8888.WebDriverAgentRunner

③ 选择要构建的包以及iOS设备

记住,一定选的是WebDriverAgentRunner,而不是IntegrationAPP或其他!

我一开始就是默认选了IntegrationAPP导致后面能连接上Server,前台也能看到手机,但是使用不了,一直卡在准备图像中。此时Agent控制台能看到一句提示“com.dagangtest.WebDriverAgentRunner.xctrunner is not in your device!”,如果有这句报错提示,就表明你在选择构建包的时候选择错了!接入Mac再重新选择WebDriverAgentRunner打包构建即可。

④ 构建

顶部Product--Build,成功的话Xcode会提示Build Successed!

⑤ 运行测试

顶部Product--Test,首次运行的话可能会失败,需要在手机上弹出的提示框中点击“信任”设备,再次运行即可。运行成功的话,Xcode会自动将WebDriverAgentRunner包打进iOS设备:

手机上会出现WebDriverAgentRunner APP以及“Automation Running”的浮动水印提示。

三、Windows(Agent端)工作

我之前就是用CentOS端的Agent来接入iOS设备,所以屡屡碰壁。如果你也有这个想法,劝你尽早放弃!我现在已转投Windows怀抱来接入iOS。不过也不用那么悲观,一个Server可以连接多个Agent,CentOS端的Agent用来接入Android设备是完全没问题的。

所以特此声明:以下演示均以Windows为案例,Ubuntu系统未具体尝试,仅提供部分参考思路。

上面打包好WebDriverAgentRunner到iOS手机后,iOS就可以脱离Mac运行,在Windows以及Ubuntu系统上也可以丝滑地开展自动化测试了!Windows/Ubuntu端工作主要分为以下步骤:

  1. 安装iTunes;
  2. 安装sib工具;
  3. Agent配置:修改Agent配置文件,填写WebDriverAgent的bundle-id(包名),插上iOS设备,重启Agent容器;
  4. 检查前台页面是否成功显示以及能否正常使用;

1.安装iTunes;

安装iTunes的目的主要是为了安装usbmux以及相关的依赖环境,前面已经提到usbmux这个服务主要用于在USB协议上实现多路TCP连接,将USB通信抽象为TCP通信。苹果的iTunes、Xcode,都直接或间接地用到了这个服务。所以Windows上可以通过直接安装iTunes来解决(通过爱思助手之类的应该也可以),Ubuntu需要单独安装usbmux;

连接手机打开iTunes

首次连接,在手机的提示框中选择信任设备,随后即可连接成功:

2.安装Sib

sib和tidevice两个安装任意一个即可。sib安装比较简单,直接从官网下载下来解压即可,如果想要全局运行就配置个环境变量。

项目地址:GitHub - SonicCloudOrg/sonic-ios-bridge: 🎉Bridge of iOS Devices by usbmuxd. 基于usbmuxd的iOS调试工具。

下载下来,解压后得到如下文件:

cmd命令行,进入sib.exe所在文件夹,执行以下命令,即可查看当前电脑连接的iOS设备,设备若在线,显示为online。

c:\sonic-ios-bridge>sib devices
00008020-000E74E622BA002E online

3.Agent配置

修改Agent配置文件

主要是修改iOS模块的wda-bundle-id,改为前面在Xcode中修改后的名称,例如:

com.appium8888.WebDriverAgentRunner
sonic:
  agent:
    # 替换为部署Agent机器的ipv4
    host: 192.168.1.188
    # 替换为Agent服务的端口,可以自行更改
    port: 7777
    # 替换为前端新增Agent生成的key
    key: 774ed0c0-b8d6-4bcb-8a68-36bb67d51691
  server:
    # 改成server的SONIC_SERVER_HOST
    host: 192.168.1.20
    # 改成server的SONIC_SERVER_PORT
    port: 3000
modules:
  android:
    # 是否开启安卓模块
    enable: true
    # 是否开启sonic-android-supply远程adb调试功能
    use-sas: true
  ios:
    # 如果不需要连接iOS设备,请将true改为false。开启的windows用户请确保本机已安装iTunes
    enable: true
    # 替换为你自己使用的wda的bundleId,如果没有.xctrunner后缀会自动补全,建议使用公司的开发者证书
    wda-bundle-id: com.dagangtest.WebDriverAgentRunner
  sgm:
    # 是否开启sonic-go-mitmproxy网络抓包功能
    enable: true
重启Agent

windows用户,要先在控制台输入 chcp 65001 并回车,再输入以下指令:

java -Dfile.encoding=utf-8 -jar sonic-agent-windows-x86_64.jar

4.前台访问使用

可以看到,两台iOS设备:iPhone XR和iPhone 7已经接入成功:

分别使用两台设备,操作正常

四、iOS使用过程中的一些问题

尽管sonic已经成功接入了iOS设备,但在使用过程中,还是存在诸多问题,远没有Android设备体验流畅。

1.连接超时、拖拽反应过慢

有时候点击事件正常,但拖拽事件会卡半天,然后突然反应过来、把之前积压的事件全部执行了一遍。不知道是不是连接超时的问题。

2.设备连接异常

忘记当时是怎么操作的了

3.无法进入使用页面,设备被占用

点击“马上使用”,打开了一个新标签页,随后该标签页立马消失,但列表中该设备处于被占用状态,导致无法再进入使用页。只能重启Agent或是重新插拔设备。在Android设备上也遇到过,退出使用界面,刷新后,设备仍处于被占用,能不能加一个“强制关闭”按钮操作呢?

4.初始化时间略长

每次退出再进入设备,都要初始化一遍,初始化时间略长,不知道这个能不能优化一下。

附:

1.Ubuntu(Agent端)解决方法

Ubuntu系统因资源限制,未具体尝试,仅提供部分参考思路。

Ubuntu也是属于Linux系统的一种,我当时是用CentOS试的,出现过下列问题,试了很多种方法,始终没有连成功,最终放弃了。但我看过一些帖子,据说Ubuntu按照以下方法解决后是可以连接成功的

宿主机安装sib

Ubuntu系统的Agent一般是用docker方式部署的,docker容器中是有sib工具的,但在宿主机上也要安装sonic-ios-bridge

下载后解压,进入sib所在目录,执行sib,即可查看相关帮助命令:

宿主机安装usbmuxd、挂载iOS设备

若Agent容器所在的宿主机连接iOS设备后,没有挂载上,执行sib devices命令,可能会出现如下提示:

解决办法:宿主机和容器里面分别安装一遍usbmuxd,并赋予该目录最大权限,重启agent容器

apt-get install usbmuxd
chmod 777 -R /var/run/usbmuxd
docker restart sonic-agent_sonic-agent_1

如果还不行,就kill掉然后重启usbmuxd进程,或是直接重启系统。

解决方法参考:

https://sonic-cloud.wiki/d/1754-dockerv150-releaseagentiosios-ios

https://sonic-cloud.wiki/d/1402-v141ioswdaagentwda-bundle-iddocker-composeios/15

sonic云真机通过linux系统接入苹果手机_linux 安装 usbmuxd 驱动-CSDN博客

2.tidevice安装方法

tidevice相比sib安装起来确实麻烦一些,首先要确保当前系统已安装Python3环境,然后才能安装tidevice。目前 tidevice 库仅支持安装在 python3.7及以上版本中

pip3 install -U "tidevice[openssl]"

安装过程中可能会出现如下报错:

通过上图可以看出,是因为tidevice在安装过程中,安装一个名为cryptography的包时,报错了,cryptography编译失败,因为系统中缺少pep517。

安装pep517
pip install pep517

再次安装cryptography

pip install cryptography

但是还是报错上述同样错误,系统提示pip版本过低。于是升级pip。

升级pip
pip3 install -U pip

pip升级到22.3.1

安装cryptography

再次安装cryptography,安装成功

安装tidevice

再次执行pip3 install -U "tidevice[openssl]"  安装tidevice,安装成功

查看tidevice版本:

[root@sonic bin]# tidevice version
tidevice version 0.9.12
tidevice查看设备列表
tidevice list

总结

以上就是Windows端Agent接入iOS设备的全过程,提供了Ubuntu系统接入过程中出现问题的参考解决方案,以及tidevice的安装方法。下面作个简单总结:

连接iOS设备的前提

关键步骤

  1. 克隆WebDriverAgent项目到Mac电脑;
  2. 在Xcode中打开克隆的WebDriverAgent项目,并修改相关信息;
  3. 构建WebDriverAgent包到iOS设备;
  4. Windows安装iTunes;
  5. Windows安装sib工具;
  6. Windows端Agent配置:修改Agent配置文件,填写WebDriverAgent的bundle-id(包名),插上iOS设备,重启Agent容器;
  7. 前台访问使用;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值