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。…...
第19节 Node.js Express 框架
Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...
从零实现富文本编辑器#5-编辑器选区模型的状态结构表达
先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...
对WWDC 2025 Keynote 内容的预测
借助我们以往对苹果公司发展路径的深入研究经验,以及大语言模型的分析能力,我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际,我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测,聊作存档。等到明…...
DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI
前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...
【HTML-16】深入理解HTML中的块元素与行内元素
HTML元素根据其显示特性可以分为两大类:块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...
Axios请求超时重发机制
Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...
【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分
一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计,提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合:各模块职责清晰,便于独立开发…...
代理篇12|深入理解 Vite中的Proxy接口代理配置
在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...
安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)
船舶制造装配管理现状:装配工作依赖人工经验,装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书,但在实际执行中,工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...
站群服务器的应用场景都有哪些?
站群服务器主要是为了多个网站的托管和管理所设计的,可以通过集中管理和高效资源的分配,来支持多个独立的网站同时运行,让每一个网站都可以分配到独立的IP地址,避免出现IP关联的风险,用户还可以通过控制面板进行管理功…...
