开源云真机平台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安装比较简单,直接从官网下载下来解压即可,如果想要全局运行就配置个环境变量。

项目地址:https://github.com/SonicCloudOrg/sonic-ios-bridge

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

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: 3000modules:
  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
chmod777-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

https://blog.csdn.net/LiXueFu727224204/article/details/126914938?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_utm_term~default-0-126914938-blog-122413079.pc_relevant_recovery_v2&spm=1001.2101.3001.4242.1&utm_relevant_index=3

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 versiontidevice 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. 前台访问使用;




相关文章
|
7天前
|
Python Windows
在 Windows 平台下打包 Python 多进程代码为 exe 文件的问题及解决方案
在使用 Python 进行多进程编程时,在 Windows 平台下可能会出现将代码打包为 exe 文件后无法正常运行的问题。这个问题主要是由于在 Windows 下创建新的进程需要复制父进程的内存空间,而 Python 多进程机制需要先完成父进程的初始化阶段后才能启动子进程,所以在这个过程中可能会出现错误。此外,由于没有显式导入 Python 解释器,也会导致 Python 解释器无法正常工作。为了解决这个问题,我们可以使用函数。
14 5
|
7天前
|
Java Android开发 Swift
探索Android与iOS开发的差异:平台选择对项目成功的影响
【6月更文挑战第18天】在移动应用开发的广阔天地中,Android和iOS两大平台各据一方,它们在市场份额、用户群体及开发环境上各有千秋。本文将深入分析这两个操作系统的开发差异,探讨如何根据项目需求选择合适的平台,并讨论跨平台解决方案的可行性与挑战。我们将通过实际案例,揭示平台选择对项目成功的关键性影响,为开发者提供决策支持。
|
8天前
|
安全 IDE Android开发
探索Android与iOS开发的差异:平台特性与编程实践
【6月更文挑战第17天】在移动应用开发的广阔天地中,Android和iOS两大平台各自占据半壁江山。它们在用户群体、系统架构以及开发环境上的差异,为开发者带来了不同的挑战和机遇。本文深入探讨了这两个平台在技术实现、界面设计、性能优化等方面的主要区别,并提供了实用的开发建议,旨在帮助开发者更好地理解各自平台的特性,从而创造出更加优秀的移动应用。
|
11天前
|
安全 Android开发 iOS开发
探索Android与iOS开发的差异:平台特性与用户体验的对比分析
在移动应用开发的广阔天地中,Android和iOS两大阵营各据一方。本文将深入探讨这两个操作系统在开发环境、编程语言、用户界面设计及市场分布等方面的主要区别。通过比较分析,我们将揭示各自平台的特有优势,并讨论如何根据目标受众和业务需求选择适合的开发平台。
|
13天前
|
安全 Android开发 iOS开发
探索Android与iOS开发平台的差异
【6月更文挑战第12天】在移动应用开发的广阔天地中,Android和iOS两大阵营各具特色,它们之间的差异不仅体现在技术层面,更影响着开发者的选择和用户的体验。本文将深入探讨这两大平台在开发环境、用户界面设计、市场策略及安全性方面的主要区别,为开发者提供一份实用的指南,帮助他们在这两个不同的世界中做出明智的决策。
16 3
|
19天前
|
Java Android开发 Swift
探索安卓与iOS开发的差异:平台选择对项目成功的影响
在移动应用开发的浩瀚宇宙中,安卓和iOS这两大星系以其独特的引力影响着开发者的航向。本文将穿梭于这两个平台的开发环境、编程语言、用户界面设计、性能优化以及市场分布等方面,揭示它们之间的核心差异。我们将通过比较分析,为开发者提供决策时的参考坐标,帮助他们根据项目需求和目标受众选择合适的平台。加入我们,一起揭开安卓与iOS开发的神秘面纱,探索它们如何塑造移动应用的未来。
|
18天前
|
安全 Java Android开发
探索Android与iOS开发平台的差异与优势
【6月更文挑战第7天】在移动应用开发的广阔天地中,Android和iOS两大平台如同双子星般熠熠生辉。本文将深入探讨这两个系统在开发环境、用户界面设计、市场策略及安全性方面的不同之处,旨在为开发者提供一个清晰的指南,帮助他们根据项目需求和目标受众选择最合适的平台。
|
20天前
|
Windows
windows系统bat批处理 打开设备管理器
windows系统bat批处理 打开设备管理器
20 1
|
16小时前
|
Java 开发工具 Android开发
探索Android与iOS开发的差异:平台选择对项目成功的影响
在移动应用开发的广阔天地中,Android和iOS两大平台各自占据着半壁江山。本文将深入探讨这两个平台在开发过程中的关键差异点,包括编程语言、开发工具、用户界面设计、性能优化以及市场覆盖等方面。通过对这些关键因素的比较分析,旨在为开发者提供一个清晰的指南,帮助他们根据项目需求和目标受众做出明智的平台选择。
|
4天前
|
安全 Android开发 iOS开发
探索安卓与iOS开发的差异:平台特性与用户体验的对比分析
移动应用开发的两大阵营——安卓与iOS,各自拥有独特的开发环境、用户群体和市场定位。本文将深入探讨这两个操作系统在应用开发过程中的主要差异,包括编程语言、开发工具、用户界面设计、性能优化、安全性考量以及发布流程等方面。通过比较分析,旨在为开发者提供跨平台开发的见解和策略,以优化应用性能和提升用户体验。
9 0