前言

好久都没有水博客了,都快忘记自己的文字风格是什么鬼了。这大概率是今年的最后一篇文章了,提前祝大家新年快乐,哈哈哈。启动wda一直是iOS自动化测试最关键的一环,你要是旧的iOS系统,比如16之下的系统,这个时候的权限还是放的很宽的,各种iOS端的工具都可用比如fastbot,比如tidevice,跨平台运行如喝水一样简单。等到了17版本codeskyblue大佬更新的tidevice3里面会教你在打包的时候把.xctest框架的依赖都删掉就可以通过手动点击app的方式启动wda。现在已经是18+以上的版本了,苹果进一步收缩权限,离线打包的app一点就崩,fastbot完全不会动了。

前提

go-ios

环境的肯定是go-ios了,因为我在家所以用的是我自己的macos电脑来演示的,在公司的windows电脑也是可以跑的。
首先是安装到本地,https://github.com/danielpaulus/go-ios 自己去看官网看教程吧,看不懂就翻译或者ai 。Mac电脑装起来比较简单直接用npm install -g go-ios安装就行。Windows电脑安装的时候需要下载一个wintun.dll ,https://www.wintun.net/。你自己去下,访问不了自己想办法,这个文件放到ios.exe同目录。

.xctestrun文件

这个文件也完全需要靠自己打包打出来,别人的这个文件你也用不了,没办法苹果就是这么dog。你要打包的是https://github.com/appium/WebDriverAgent 他们还在维护的wda,你需要有自己的开发者证书,这个东西能参考的文章就太多了,哪怕是打包出离线的wda的ipa文件也有一堆文章可以参考,你可以参看我之前写的文章,或者是看看这个https://zhuanlan.zhihu.com/p/673319266。但是我门这套方法是可以不用删除xctest框架的,所以你直接打个离线包出来就好了。我们需要保存下离线包里的.xctestrun文件,后续我们依赖这个文件来启动wda
在这里插入图片描述

镜像

这个东西需要你第一次先在Xcode上给手机手动安装下wda,Xcode会自己准备,这是一次性工作,你装完就可以卸载wda了,然后用安装自己打的离线包或者其实保留旧的wda也可以。

实操

启动隧道

我这是Mac电脑的启动命令,windows可以设置ENABLE_GO_IOS_AGENT=user 把sudo去掉去启动,你自己应该是会把go-ios设置成环境变量的吧,然后类似下面的命令启动,一台设备的时候你可以不指定设备和端口

sudo ios tunnel start --udid=00008101-001179A43647001E --tunnel-info-port=60105

启动成功:
在这里插入图片描述
他上面跟你说 Tunnel server started,然后它又一直在滚就行了,就是启动成功了。
sudo免密码:

sudo visudo
# 在里面追加一行
username ALL=(ALL) NOPASSWD: /opt/homebrew/bin/ios

镜像挂载

ios image auto --udid=00008101-001179A43647001E

在这里插入图片描述

启动wda

你要参考自己的.xctestrun的路径来跑这个启动命令

ios runxctest \
  --xctestrun-file-path=WebDriverAgentRunner_iphoneos26.1-arm64.xctestrun \
  --udid=00008101-001179A43647001E

在这里插入图片描述
你会惊喜的发现这个手机的wda居然成功运行起来了,好的我们已经完成了最关键的一环,距离真正的成功还有一步之遥啦。

端口转发

ios forward 8100 8100 --udid=00008101-001179A43647001E

然后我们curl一下这个端口有没有东西

curl http://localhost:8100/status

在这里插入图片描述
当我们看到这样的一个json结构的返回信息说WebDriverAgent is ready to accept commands那就是一个大写的OK了,我们可以在任何平台稳定跑iOS的自动化了。

自动化的演示demo

我不懂你用的是什么自动化框架,appium的话你自己研究下吧,我很久没有用这个了,我演示的是facebook-wda来连接然后执行一个简单的点击指令
在这里插入图片描述
在这里插入图片描述
我就不给动图了,意思到了就行了,你自己去验证下

关键的提醒

同样的套路我们还可以转发手机9100端口到本地,这个是手机的mjpeg流,你可以自己保存成一个没有没有声音的视频,不过我没有实践我就不瞎教了。
请添加图片描述
上面这个gif想告诉你的是,我做了一个端口转发,把手机的9100端口转到电脑上的9100,默认是10帧的刷新率,我一直在手机上做点击和操作,这个同步率感觉是完全够用的,作为一个录屏日志已经满足我的需求了

写在最后的话

今年发现太多的大佬都没有热情继续贡献代码了,自己也确实挺感慨,自己在技术上是否能够说是独立研究,自成一体了。好像还不行,我的工作内容还是有很多参考开源的技术和框架,还是感慨离真正的底层会差个百八十里。不过我这篇文章目前看来应该是全中文网络第一份,希望你能帮我点点赞,让更多的人更容易搜到它。当然你觉得写的还不错的话。
最后写个比较感性的话结尾吧,希望你我能共勉:此或一时之明,弹指即灭,然燃灯之心,不因光灭而失,如果未来是你的,请证明给我看。
请添加图片描述

请添加图片描述

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐