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步,有报错跟着我一起解决
-
(base) QA-IPv6:Downloads avidly$ xcodebuild -
xcrun: error: active developer path ("/Applications/Xcode.app/Contents/Developer") does not exist -
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. -
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电脑的密码
-
(base) QA-IPv6:Downloads avidly$ sudo xcode-select --switch /Users/avidly/Downloads/Xcode-beta.app -
Password: -
(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」,就表示成功了。

第二步
执行如下命令
-
$ cd /tmp/derivedDataPath -
$ cd Build/Products/Release-iphoneos -
$ 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服务启动成功了!
总结
主要命令如下:
-
$ xcodebuild build-for-testing -scheme WebDriverAgentRunner -sdk iphoneos -configuration Release -derivedDataPath /tmp/derivedDataPath -
$ cd /tmp/derivedDataPath -
$ cd Build/Products/Release-iphoneos -
$ mkdir Payload && mv *.app Payload -
$ zip -r WDA.ipa Payload -
$ 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,这里边我们构造 where 条件的时候,可以直接通过方法引用的方式去指定属性名: LambdaQueryWrapper<Book> qw new LambdaQueryWrapper<>(); qw.eq(Book::getId, 2); List<Book> list bo…...
自学错误合集--项目打包报错,运行报错持续更新中
java后端自学错误总结 一.项目打包报错2.项目打包之后运行报错 二.项目运行报错 一.项目打包报错 javac: �Ҳ����ļ�: E:\xx\xx\xx\docer-xx\src\main\java\xx\xx\xx\xx\xx\xx.java �ÿ…...
KUKA机器人故障报警信息处理(一)
1、KSS00276 机器人参数不等于机器人类型 ①登录专家模式 ②示教器操作:【菜单】—【显示】—【变量】—【单个】 ③名称输入:$ROBTRAFO[] 新值:TRAFONAME[] ④点击【设定值】。 2、电池报警: ①“充电电池警告-发现老化的蓄电池…...
数仓开发:DIM层数据处理
一、了解DIM层 这个就是数仓开发的分层架构 我们现在是在DIM层,从ods表中数据进行加工处理,导入到dwd层,但是记住我们依然是在DIM层,而非是上面的ODS和DWD层。 二、处理维度表数据 ①先确认hive的配置 -- 开启动态分区方案 -- …...
echars设置渐变颜色的方法
在我们日常的开发中,难免会遇到有需求,需要使用echars设置渐变的图表,如果我们需要设置给图表设置渐变颜色的话,我们只需要在 series 配置项中 添加相应的属性配置项即可。 方式一:colorStops type:‘lin…...
SpringBoot3项目打包和运行
六、SpringBoot3项目打包和运行 6.1 添加打包插件 在Spring Boot项目中添加spring-boot-maven-plugin插件是为了支持将项目打包成可执行的可运行jar包。如果不添加spring-boot-maven-plugin插件配置,使用常规的java -jar命令来运行打包后的Spring Boot项目是无法找…...
Spring Cloud Gateway的部署
不要将 Spring Cloud Gateway 部署到 Tomcat 可以将Spring Cloud Gateway打成jar包,并通过jar包部署,步骤: 1. 修改构建配置 确保你的pom.xml文件中的打包方式为jar。 <packaging>jar</packaging> 2 打包项目 mvn clean pack…...
算法提高之树的最长路径
算法提高之树的最长路径 核心思想:树形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 命令中指定的分支名称中包含特殊字符或者语法错误时。需要确保指定的分支名称是正确的,并且没有任何不支持的字符。 例如,如果分支名称是 feature/branch,应该…...
机器学习第二天(监督学习,无监督学习,强化学习,混合学习)
1.是什么 基于数据寻找规律从而建立关系,进行升级,如果是以前的固定算式那就是符号学习了 2.基本框架 3.监督学习和无监督式学习: 监督学习:根据正确结果进行数据的训练; 在监督式学习中,训练数据包括输…...
Rust 解决循环引用
导航 循环引用一、现象二、解决 循环引用 循环引用出现的一个场景就是你指向我,我指向你,导致程序崩溃 解决方式可以通过弱指针,而Rust中的弱指针就是Weak 在Rc中,可以实现,对一个变量,持有多个不可变引…...
ICC2:如何解决pin density过高引起的绕线问题
我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧? 拾陆楼知识星球入口 为了追求极致的利用率,综合往往会使用大量的AOI/OAI等多pin cell,然而后端实现过程中,工具为了解决绕线难题,又会通过降低local density的方法实现反向奔赴,即便如此,绕线后仍会残留不少问题,…...
Buuctf-Misc题目练习
打开后是一个gif动图,可以使用stegsolve工具进行逐帧看。 File Format:文件格式 Data Extract:数据提取 Steregram Solve:立体试图 可以左右控制偏移 Frame Browser:帧浏览器 Image Combiner:拼图,图片拼接 所以可以知道我们要选这个Frame Browser …...
费马小定理详解
费马小定理 定义: 设 p 为素数,a 为整数,则 a p ≡ a ( m o d p ) a^p \equiv a\ (\mod p) ap≡a (modp) ,若 p ∤ a p \nmid a p∤a ,则 a p − 1 ≡ 1 ( m o d p ) a^{p-1} \equiv 1\ (\mod p) ap−1≡1 (modp)…...
PXE批量安装
系统装机的三种引导方式 u盘光盘网络装机 光盘: 1.类似于usb模式 2.刻录模式 系统安装过程 加载boot loader Boot Loader 是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从…...
stm32f103c8t6最小系统板
STM32F103C8T6最小系统板是为基于ARM Cortex-M3内核的STM32F103C8T6微控制器设计的电路板,它包含了单片机正常运行所需的最基本组件。以下是构成STM32F103C8T6最小系统板的基本部分: 单片机芯片:STM32F103C8T6本身,它是一款32位微…...
QCefView 在 Linux 下的编译(更新)
在前面的文章《QT 应用程序中集成浏览器》中已经介绍过 QCefView 的构建。这几天发现 QCefView 代码进行了更新,构建方式也发生了一点点变化,所以在此更新一下 QCefView 的编译方法。 QCefView 其实包含了两个项目,一个就是 QCefView 项目本身,另外一个就是 CefViewCore。…...
JETSON平台SDKManager一站式部署指南:从刷机到外置存储系统迁移
1. 开箱即用:JETSON开发板基础准备 刚拿到JETSON开发板时,很多开发者会对着这块巴掌大的硬件发懵。以我经手过的几十块JETSON TX2 NX为例,正确的开箱姿势应该是先检查配件完整性。除了开发板本体,你还需要准备: 5V/4…...
嵌入式图像处理实战:中值滤波 vs 均值滤波在STM32上的性能对比(附代码)
嵌入式图像处理实战:中值滤波 vs 均值滤波在STM32上的性能对比(附代码) 在机器人视觉或工业检测系统中,一个突如其来的像素噪点可能导致整个识别算法崩溃。我曾亲眼见证过某产线机械臂因图像传感器受到电磁干扰,将正常…...
5步释放游戏潜能:面向玩家的原神帧率解锁完全指南
5步释放游戏潜能:面向玩家的原神帧率解锁完全指南 【免费下载链接】genshin-fps-unlock unlocks the 60 fps cap 项目地址: https://gitcode.com/gh_mirrors/ge/genshin-fps-unlock 一、问题发现:为什么你的高端显卡在原神中无法全力奔跑…...
嵌入式AI新篇章:Qwen3-ASR-0.6B在边缘计算设备上的部署与优化
嵌入式AI新篇章:Qwen3-ASR-0.6B在边缘计算设备上的部署与优化 1. 引言:当语音识别遇见边缘计算 想象一下,你对着一个巴掌大的智能音箱说话,它几乎在你话音落下的瞬间就理解了你的意思,并且完全不需要连接云端。或者&…...
DLSS Swapper智能工具:游戏性能优化与版本管理完全指南
DLSS Swapper智能工具:游戏性能优化与版本管理完全指南 【免费下载链接】dlss-swapper 项目地址: https://gitcode.com/GitHub_Trending/dl/dlss-swapper DLSS Swapper是一款专为游戏玩家设计的深度学习超级采样(DLSS)版本管理工具,能够自动扫描…...
【花雕学编程】Arduino BLDC 之使用互补滤波进行姿态控制的机器人
从专业工程视角来看,基于Arduino、使用互补滤波进行姿态控制的BLDC(无刷直流电机)机器人,是一个典型的嵌入式实时闭环控制系统。它集成了传感器数据融合、控制算法和电机驱动,广泛应用于对姿态稳定性有要求的场景。 1、…...
无人值守智能图书借阅系统 Java 后端开发实战
在无人值守智能图书借阅系统的Java后端开发实战中,需围绕系统架构设计、核心功能实现、关键技术选型及部署优化等核心环节展开,以下为具体开发方案:一、系统架构设计分层架构体系:采用经典的四层架构设计,包括表现层、…...
.NET源码生成器使用SyntaxTree生成代码及简化语法
一、SyntaxTree是什么SyntaxTree是语法树,是源代码的树形结构表示由Roslyn编译器生成在SourceGenerator中会自动生成整个源代码结构是1个SyntaxTreeSyntaxTree有一个根节点(SyntaxNode)每个SyntaxNode也包含一个SyntaxTree这样看整个源代码结构就是片“森林”public abstract p…...
揭秘Windows热键失踪案:Hotkey Detective侦探手册
揭秘Windows热键失踪案:Hotkey Detective侦探手册 【免费下载链接】hotkey-detective A small program for investigating stolen hotkeys under Windows 8 项目地址: https://gitcode.com/gh_mirrors/ho/hotkey-detective 你是否曾在Windows系统中按下熟悉的…...
革新性Koikatu体验增强工具:KK-HF_Patch效率提升指南
革新性Koikatu体验增强工具:KK-HF_Patch效率提升指南 【免费下载链接】KK-HF_Patch Automatically translate, uncensor and update Koikatu! and Koikatsu Party! 项目地址: https://gitcode.com/gh_mirrors/kk/KK-HF_Patch 你是否曾在《Koikatu》游戏中遇到…...
