当前位置: 首页 > news >正文

IOS自动化—将WDA打包ipa批量安装驱动

前言

CSDN:

  • ios自动化-Xcode、WebDriverAgent环境部署

  • ios获取原生系统应用的包

如果Mac电脑没有配置好Xcode相关环境,可以参考以上文章。

必要条件

  • Mac电脑,OS版本在12.4及以上(低于这个版本无法安装Xcode14,装不了Xcode14就打包不了IOS16的驱动)

  • IOS设备手机,IOS版本在11.0及以上

  • Xcode14.0及以上

  • 公司的IOS开发者账号(如果是个人账号,只能用七天就要重新打包,这就失去了打包的意义了)

为何做这个

在之前写的IOS自动化教程中,我都是采用的Mac电脑连接ios设备,使用Xcode一个个进行打包,非常麻烦。

就这样忍受了不知道多久,一次偶然的机会,我在sonic官网看到了可以将WebDriverAgent打包成ipa包,直接进行安装,这不就是当年我一直想要做的事情却因为查不到资料而放弃了的事情吗。

由于官网写的比较精简,只有一些命令,于是我打算完善和整合一下详细的操作步骤。

这样做了之后,只需要拿着ipa包直接进行安装,然后启动WebDriverAgent服务就可以了。

注:ipa包类似于Android端的apk安装包,ipa是ios的安装包后缀格式。

一、下载WebDriverAgent

appium提供的:https://github.com/appium/WebDriverAgent

Airtest提供的:https://github.com/AirtestProject/iOS-Tagent

直接通过git clone下载到Mac电脑本地即可。

二、进行打包WDA.ipa

「检查当前是否满足前面的必要条件,没满足请先满足,否则后面无法进行或有各种各样的报错!」

  • 确保Mac电脑已经安装了Xcode14.0及以上版本(此处是为了兼容现在最新的ios16设备)

  • 确认ios设备和Mac电脑已经连接(插上数据线就行,弹出信任按钮点击信任即可)

  • 确保Mac电脑有足够的内存,Xcode很大!

1、指定xcode运行路径

启动终端,运行xcodebuild进行检查配置 , 如果没报错可以进行第2步,有报错跟着我一起解决

  1. (base) QA-IPv6:Downloads avidly$ xcodebuild

  2. xcrun: error: active developer path ("/Applications/Xcode.app/Contents/Developer") does not exist

  3. Use `sudo xcode-select --switch path/to/Xcode.app` to specify the Xcode that you wish to use for command line developer tools, or use `xcode-select --install` to install the standalone command line developer tools.

  4. See `man xcode-select` for more details.

报错解决一:path does not exist

这里报错的错误日志提醒也非常明显,大意就是说没有找到你的Xcode.app这个路径下的/Contents/Developer这些文件,所以我们要指定一下Xcode.app的路径,这个路径就是你下载Xcode解压之后所放的位置,由于我当初下载的是Xcode-beta14.0版本,所以我就指定的是Xcode-beta.app,可以按需更改这个文件的名字。

并且在日志中给出了解决办法:

sudo xcode-select --switch path/to/Xcode.app

用这个命令进行指定你所要使用的Xcode。

「实操指定路径命令」

sudo xcode-select --switch /Users/avidly/Downloads/Xcode-beta.app

实际运行效果:

  • 执行的时候要输入密码,这个密码是你Mac电脑的密码

  1. (base) QA-IPv6:Downloads avidly$ sudo xcode-select --switch /Users/avidly/Downloads/Xcode-beta.app

  2. Password:

  3. (base) QA-IPv6:Downloads avidly$

报错解决二:not contain an Xcode project, workspace or package.

除了第一个报错,我们还可能遇到这个报错

xcodebuild: error: The directory /Users/avidly/Downloads does not contain an Xcode project, workspace or package.

这个报错,如果没有从事过xcode开发或者对xcode不是很熟悉的话,可能不是很清楚他的含义。

这里作为一个门外汉,通过自己的实践经验做个说明:

这个报错表示,「当前所运行的文件目录下,没有找到xcode类型的文件项目。」

「解决方案:」

  • 1、打开Xcode,参考我之前的文章,打开对应的WebDriverAgent文件,选好各项配置,填好开发者账号(公司级别)

  • 2、打开Xcode,File -> Save As Workspace...

  • 3、保存名字可以任意取,我保存的是xiaozaiTest.xcworkspace

  • 4、将该文件放到和xcode.app同一目录下。

2、按步骤执行命令

第一步
  • 执行如下命令前,需要cd到第一步中我们保存的xcode项目文件目录下

$ xcodebuild build-for-testing -scheme WebDriverAgentRunner -sdk iphoneos -configuration Release -derivedDataPath /tmp/derivedDataPath

「实操截图展示」

这里需要等一小会,直到出现「TEST BUILD SUCCEEDED」,就表示成功了。

第二步

执行如下命令

 
  1. $ cd /tmp/derivedDataPath

  2. $ cd Build/Products/Release-iphoneos

  3. $ mkdir Payload && mv *.app Payload

第三步

执行如下命令

$ zip -r WDA.ipa Payload

执行完毕后,你在当前目录下可以看到有个WDA.ipa文件,这就代表我们成功了。

「这个时候我们就可以脱离Mac,直接使用windows操作了。」

之后也不需要再来xcode进行构建WebDriverAgent了,直接安装这个ipa包即可。

三、安装ipa文件

前面我们把ipa文件构建出来了,接下来就是需要进行安装了。

安装ipa文件可以通过iTools,也可以通过其他第三方进行安装,比如我比较推荐的是tidevice,它可以使用python编写批量安装,批量启动的脚本,这些我均已在公司落地。

下载tidevice

直接通过pip进行下载,这里我给大家加个速,我自己配置了全局加速,相关文章可以查看我之前写的pip设置全局镜像源

tidevice的相关命令在之前也有写过,可以进行翻阅

$ pip install tidevice -i https://pypi.tuna.tsinghua.edu.cn/simple

安装

「只连接了一台ios设备可以通过如下命令安装」

$ tidevice install WDA.ipa

「连接了多台设备可以通过如下命令指定设备安装」

$ tidevice --udid 设备的UDID号 install WDA.ipa

四、启动WebDriverAgent服务

这个我之前有写过批量启动的文章:

公众号 : python非阻塞模式批量启动ios设备的WebDriverAgent

博客:python批量启动ios设备的WebDriverAgent

这里给一个示列:

tidevice --udid 49687f67a4c70fbd027e19b4a5e40218acdc06e4 xctest -B com.facebook.WebDriverAgentRunnerxzz.xctrunner -e USB_PORT:8118
  • --udid : 表示指定设备运行

  • 49687f67a4c70fbd027e19b4a5e40218acdc06e4 :ios设备的udid

  • com.facebook.WebDriverAgentRunnerxzz:xcode打包构建时写的包名

  • USB_PORT:8118 通过8118端口进行连接

看到WebDriverAgent start successfully则表示WebDriverAgent服务启动成功了!

总结

主要命令如下:

  1. $ xcodebuild build-for-testing -scheme WebDriverAgentRunner -sdk iphoneos -configuration Release -derivedDataPath /tmp/derivedDataPath

  2. $ cd /tmp/derivedDataPath

  3. $ cd Build/Products/Release-iphoneos

  4. $ mkdir Payload && mv *.app Payload

  5. $ zip -r WDA.ipa Payload

  6. $ tidevice install WDA.ipa

行动吧,在路上总比一直观望的要好,未来的你肯定会感 谢现在拼搏的自己!如果想学习提升找不到资料,没人答疑解惑时,请及时加入扣群: 320231853,里面有各种软件测试+开发资料和技术可以一起交流学习哦。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

相关文章:

IOS自动化—将WDA打包ipa批量安装驱动

前言 CSDN: ios自动化-Xcode、WebDriverAgent环境部署 ios获取原生系统应用的包 如果Mac电脑没有配置好Xcode相关环境,可以参考以上文章。 必要条件 Mac电脑,OS版本在12.4及以上(低于这个版本无法安装Xcode14,装不了Xcode14就…...

SAP PP学习笔记12 - 评估MRP的运行结果

上一章讲了MRP的概念,参数,配置等内容。 SAP PP学习笔记11 - PP中的MRP相关概念,参数,配置-CSDN博客 本章来讲 MRP跑完之后呢,要怎么评估这个MRP的运行结果。 1,Stock/Requirements List and MRP List 在…...

AndroidStudio的Iguana版的使用

1.AndroidStudio介绍 Android Studio 是用于开发 Android 应用的官方集成开发环境 (IDE)。Android Studio 基于 IntelliJ IDEA 强大的代码编辑器和开发者工具,还提供更多可提高 Android 应用构建效率的功能,例如: 基于 Gradle 的灵活构建系统…...

通过方法引用获取属性名的底层逻辑是什么?

很多小伙伴可能都用过 MyBatis-Plus&#xff0c;这里边我们构造 where 条件的时候&#xff0c;可以直接通过方法引用的方式去指定属性名&#xff1a; LambdaQueryWrapper<Book> qw new LambdaQueryWrapper<>(); qw.eq(Book::getId, 2); List<Book> list bo…...

自学错误合集--项目打包报错,运行报错持续更新中

java后端自学错误总结 一.项目打包报错2.项目打包之后运行报错 二.项目运行报错 一.项目打包报错 javac: &#xfffd;Ҳ&#xfffd;&#xfffd;&#xfffd;&#xfffd;ļ&#xfffd;: E:\xx\xx\xx\docer-xx\src\main\java\xx\xx\xx\xx\xx\xx.java &#xfffd;&#xff…...

KUKA机器人故障报警信息处理(一)

1、KSS00276 机器人参数不等于机器人类型 ①登录专家模式 ②示教器操作&#xff1a;【菜单】—【显示】—【变量】—【单个】 ③名称输入&#xff1a;$ROBTRAFO[] 新值&#xff1a;TRAFONAME[] ④点击【设定值】。 2、电池报警&#xff1a; ①“充电电池警告-发现老化的蓄电池…...

数仓开发:DIM层数据处理

一、了解DIM层 这个就是数仓开发的分层架构 我们现在是在DIM层&#xff0c;从ods表中数据进行加工处理&#xff0c;导入到dwd层&#xff0c;但是记住我们依然是在DIM层&#xff0c;而非是上面的ODS和DWD层。 二、处理维度表数据 ①先确认hive的配置 -- 开启动态分区方案 -- …...

echars设置渐变颜色的方法

在我们日常的开发中&#xff0c;难免会遇到有需求&#xff0c;需要使用echars设置渐变的图表&#xff0c;如果我们需要设置给图表设置渐变颜色的话&#xff0c;我们只需要在 series 配置项中 添加相应的属性配置项即可。 方式一&#xff1a;colorStops type&#xff1a;‘lin…...

SpringBoot3项目打包和运行

六、SpringBoot3项目打包和运行 6.1 添加打包插件 在Spring Boot项目中添加spring-boot-maven-plugin插件是为了支持将项目打包成可执行的可运行jar包。如果不添加spring-boot-maven-plugin插件配置&#xff0c;使用常规的java -jar命令来运行打包后的Spring Boot项目是无法找…...

Spring Cloud Gateway的部署

不要将 Spring Cloud Gateway 部署到 Tomcat 可以将Spring Cloud Gateway打成jar包&#xff0c;并通过jar包部署&#xff0c;步骤&#xff1a; 1. 修改构建配置 确保你的pom.xml文件中的打包方式为jar。 <packaging>jar</packaging> 2 打包项目 mvn clean pack…...

算法提高之树的最长路径

算法提高之树的最长路径 核心思想&#xff1a;树形dp 枚举路径的中间节点用f1[i] 表示i的子树到i的最长距离,f2[i]表示次长距离最终答案就是max(f1[i]f2[i]) #include <iostream>#include <cstring>#include <algorithm>using namespace std;const int N …...

git/gerrit使用遇到的问题

Push时出现的多个问题及其解决 branch【...】not found 这个错误通常出现在 Git 命令中指定的分支名称中包含特殊字符或者语法错误时。需要确保指定的分支名称是正确的&#xff0c;并且没有任何不支持的字符。 例如&#xff0c;如果分支名称是 feature/branch&#xff0c;应该…...

机器学习第二天(监督学习,无监督学习,强化学习,混合学习)

1.是什么 基于数据寻找规律从而建立关系&#xff0c;进行升级&#xff0c;如果是以前的固定算式那就是符号学习了 2.基本框架 3.监督学习和无监督式学习&#xff1a; 监督学习&#xff1a;根据正确结果进行数据的训练&#xff1b; 在监督式学习中&#xff0c;训练数据包括输…...

Rust 解决循环引用

导航 循环引用一、现象二、解决 循环引用 循环引用出现的一个场景就是你指向我&#xff0c;我指向你&#xff0c;导致程序崩溃 解决方式可以通过弱指针&#xff0c;而Rust中的弱指针就是Weak 在Rc中&#xff0c;可以实现&#xff0c;对一个变量&#xff0c;持有多个不可变引…...

ICC2:如何解决pin density过高引起的绕线问题

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧? 拾陆楼知识星球入口 为了追求极致的利用率,综合往往会使用大量的AOI/OAI等多pin cell,然而后端实现过程中,工具为了解决绕线难题,又会通过降低local density的方法实现反向奔赴,即便如此,绕线后仍会残留不少问题,…...

Buuctf-Misc题目练习

打开后是一个gif动图&#xff0c;可以使用stegsolve工具进行逐帧看。 File Format:文件格式 Data Extract:数据提取 Steregram Solve:立体试图 可以左右控制偏移 Frame Browser:帧浏览器 Image Combiner:拼图&#xff0c;图片拼接 所以可以知道我们要选这个Frame Browser …...

费马小定理详解

费马小定理 定义&#xff1a; 设 p 为素数&#xff0c;a 为整数&#xff0c;则 a p ≡ a ( m o d p ) a^p \equiv a\ (\mod p) ap≡a (modp) &#xff0c;若 p ∤ a p \nmid a p∤a &#xff0c;则 a p − 1 ≡ 1 ( m o d p ) a^{p-1} \equiv 1\ (\mod p) ap−1≡1 (modp)…...

PXE批量安装

系统装机的三种引导方式 u盘光盘网络装机 光盘&#xff1a; 1.类似于usb模式 2.刻录模式 系统安装过程 加载boot loader Boot Loader 是在操作系统内核运行之前运行的一段小程序。通过这段小程序&#xff0c;我们可以初始化硬件设备、建立内存空间的映射图&#xff0c;从…...

stm32f103c8t6最小系统板

STM32F103C8T6最小系统板是为基于ARM Cortex-M3内核的STM32F103C8T6微控制器设计的电路板&#xff0c;它包含了单片机正常运行所需的最基本组件。以下是构成STM32F103C8T6最小系统板的基本部分&#xff1a; 单片机芯片&#xff1a;STM32F103C8T6本身&#xff0c;它是一款32位微…...

QCefView 在 Linux 下的编译(更新)

在前面的文章《QT 应用程序中集成浏览器》中已经介绍过 QCefView 的构建。这几天发现 QCefView 代码进行了更新,构建方式也发生了一点点变化,所以在此更新一下 QCefView 的编译方法。 QCefView 其实包含了两个项目,一个就是 QCefView 项目本身,另外一个就是 CefViewCore。…...

AD画完板子别急着下单!5分钟搞定DRC规则检查,避开这些坑才能顺利发嘉立创

AD设计必看&#xff1a;DRC规则检查深度解析与实战避坑指南 在PCB设计领域&#xff0c;完成布线只是成功的一半。许多工程师在AD(Altium Designer)中精心设计完电路板后&#xff0c;常常因为忽略DRC(Design Rule Check)检查而遭遇生产返工、延迟甚至完全报废的惨痛经历。本文将…...

大模型应用开发指南:从入门到实践,收藏这份从Demo到生产落地的完整攻略

本文分享了AI应用开发中从Demo到生产落地的完整实践&#xff0c;涵盖技术选型、架构设计、核心算法优化及部署经验。通过LangGraph、RAGFlow和Langfuse等工具&#xff0c;解决上下文超限、Prompt管理混乱等问题&#xff0c;最终实现准确率提升25%的工业级AI系统。适合程序员和小…...

麒麟系统上跑32位老程序,别再折腾了!用这个离线打包法,5分钟搞定依赖

麒麟系统32位程序兼容方案&#xff1a;离线依赖打包全流程指南 在国产化操作系统迁移浪潮中&#xff0c;许多企业面临一个共同难题——那些关键业务依赖的32位遗留程序如何在仅支持64位的新系统上运行&#xff1f;本文将以麒麟系统为例&#xff0c;详解一套经过实战检验的离线依…...

STM32F103C8T6的MODBUS-RTU从机实战:基于RS485的寄存器读写

1. MODBUS-RTU与STM32F103C8T6的工业应用价值 在工业自动化领域&#xff0c;设备间的可靠通信是系统稳定运行的基础。STM32F103C8T6作为一款性价比极高的Cortex-M3内核微控制器&#xff0c;配合MODBUS-RTU协议和RS485物理层&#xff0c;能够构建出稳定高效的设备监控网络。这种…...

从C++代码到机器指令:用OD和IDA手把手拆解一个简单的main函数(附寄存器图解)

从C代码到机器指令&#xff1a;用OD和IDA手把手拆解一个简单的main函数&#xff08;附寄存器图解&#xff09; 在逆向工程的世界里&#xff0c;理解高级语言如何转化为底层机器指令是一项基础而关键的技能。本文将以一个最简单的C main 函数为例&#xff0c;带你一步步追踪其从…...

告别手动重启!用Python+PyAutoGUI写个游戏防崩溃守护脚本(附完整源码)

告别手动重启&#xff01;用PythonPyAutoGUI打造游戏防崩溃守护脚本 深夜挂机刷副本时突然游戏崩溃&#xff0c;第二天醒来发现角色还在主城发呆&#xff1f;竞技场自动匹配因为断线重连失败而错过赛季奖励&#xff1f;这些问题对于MMO玩家和挂机游戏爱好者来说简直如同噩梦。本…...

别再手动算镀膜了!用Ansys Zemax非序列模式,5分钟搞定二向分色分光镜仿真

5分钟极速仿真&#xff1a;Ansys Zemax非序列模式下二向分色分光镜的实战技巧 在光学系统设计中&#xff0c;二向分色分光镜的仿真往往成为效率瓶颈。传统方法需要手动计算镀膜参数、反复调试光线路径&#xff0c;消耗工程师大量时间。本文将揭示如何利用Ansys Zemax非序列模式…...

功能安全计划:从ISO 26262到IEC 61508的系统性工程实践

1. 项目概述&#xff1a;为什么我们需要一个“功能安全计划”&#xff1f;在汽车和工业领域&#xff0c;一个简单的软件Bug或硬件失效&#xff0c;其后果可能远超一次蓝屏或服务中断。想象一下&#xff0c;一辆高速行驶的汽车&#xff0c;其电子稳定程序&#xff08;ESP&#x…...

告别PS!用ImageMagick命令行5分钟搞定100张图片格式批量转换(附Windows/Mac安装避坑)

告别PS&#xff01;用ImageMagick命令行5分钟搞定100张图片格式批量转换&#xff08;附Windows/Mac安装避坑&#xff09; 在数字内容爆炸式增长的今天&#xff0c;图片处理已成为开发者、设计师和内容运营人员的日常刚需。当面对上百张需要统一转换格式、调整尺寸的图片时&…...

从《魔兽世界》到你的项目:深入拆解Recast导航网格生成与优化的全流程

从《魔兽世界》到现代项目&#xff1a;Recast导航网格技术的深度实践指南 1. 导航网格技术的演进与核心价值 2004年《魔兽世界》的发布不仅是MMO游戏史上的里程碑&#xff0c;更悄然改变了游戏AI寻路技术的演进轨迹。当数百万玩家在艾泽拉斯大陆自由探索时&#xff0c;鲜少有人…...