1.目的
做ios ui自动化测试过程中,想通过试验命令行自动打包到特定的ios模拟器,以便后期集成到shell脚本
2.思路
先了解下整个手动安装包的流程,开发用xcode写完代码,并编译就可以打出安装包,测试把包安装到手机上测试
自动化就是想办法可以让他自动完成xcode的一些操作,自动安装到手机,但跑自动化测试的话一般会放到模拟器上
这个时候自动化就分为了两步,一自动打包,二自动安装
3.涉及到的知识
自动打包的命令涉及到xcodebuild
自动安装的命令涉及到xcrun
iOS安装包的类型有两种,一种是.ipa安装到真机上的,一种是.app安装到ios模拟器上的,之所以不同是因为ios真机(i386/x64)和模拟器(armv7/arm64…)的架构不一样,这些设置可以在xcdoe build setting里的Excluded Architectures进行修改,但用命令行打包可以不用管这里
4.实践
1.有一个可以打包的xcode账号,一般问开发要就可以
2.git clone对应项目到本地
3.进到项目文件夹下
4.打开模拟器
open /Applications/Xcode.app/Contents/Developer/Applications/Simulator.app
5.打包
-scheme 一般是你们在xcode里运行项目时product-scheme里选中的那个选项,我这个直接是app的名称
-workspace 这个看你们项目一般用.workspace还是.proj运行,如果有.workspace的话就用👇的,如果是.proj就把-workspace xxx.xcworkspace换成-project xxx.proj
-destination后面加打包到的机型,如果不填,默认是打iphone的包而不是iphonesimulator
xcodebuild -scheme xxx -workspace xxx.xcworkspace -destination 'platform=iOS Simulator,name=iPhone 13,OS=15.0' -derivedDataPath build
6.运行完后,会在项目文件夹的build里生成.app包,进行安装
xcrun simctl install booted build/Build/Products/Debug-iphonesimulator/xxx.app
就大功告成啦
5.踩的坑
1.最开始的想法是先打开模拟器,再进行打包,,只不过打包的命令里没有标明-destination,觉得他一定会把包安装到那个打开的模拟器上,但是打出来的包安装到模拟器上会报:
This app needs to be updated by the developer to work on this version of iOS.
Failed to find matching arch for input file: /Users/user/Library/Developer/CoreSimulator/Devices/CCE1509C-91B3-47A9-A61E-E8B02627B454/data/Library/Caches/com.apple.mobile.installd.staging/temp.aOBiJl/extracted/xxx.app/App
2.看到This app needs to be updated by the developer to work on this version of iOS.,我以为是因为iOS15的系统有签名的问题,网上查了我的签名是好的
3.看到Failed to find matching arch搜了下,可能和架构有关,那就可能和打的包有关,再看下打包命令没有带-destination, Products下打出的包默认是其实是iphone真机包,所以没有办法安装到ios模拟器上的,加了destination后就可以正常打成模拟器包啦,所以要安装到模拟器的包,xcodebuild打包命令里一定要带-destination这个参数!!!!!!!!!!!!!
版权归原作者 踩坑记 所有, 如有侵权,请联系我们删除。