Jenkins+Xcode实现自动打包 上
每次打包都会占用10-20分钟的时间,因此对于自动打包有着急切的需求。
首先来介绍一下自动构建命令xcodebuild。支持哪些参数可以通过$ man xcodebuild查看
本文只介绍Xcode8.2、Xcode8.3、Xcode9自动打包命令
自动打包的核心命令
Xcode改成手动管理证书,导出包使用指定证书
示例工程使用了cocoapods
1、$ cd /Users/xxx/Desktop/Test8 #切换到项目目录,如果不愿意切换可以使用绝对路径,只要能确保找到你的xcworkspace即可。
2、$ xcodebuild archive -workspace Test8.xcworkspace -scheme Test8 -configuration Debug -archivePath /Users/xxx/Desktop/xcodebuild/Test8
workspace:工程名. xcworkspace路径;
scheme:通常是工程名,command+< 选择manage schemes 查看;
configuration:debug或是release,如果
archivePath:归档文件存放的位置
scheme
configuration选项
不同的Xcode版本,对应的打包命令参数有变化不同
如果安装多个Xcode可以使用xcode-select切换
$ sudo xcode-select --switch /Applications/Xcode8.app
Xcode8.2
3-1、$ xcodebuild -exportArchive -exportFormat ipa -archivePath /Users/xxx/Desktop/xcodebuild/Test8.xcarchive -exportPath /Users/xxx/Desktop/xcodebuild/Test8 -exportProvisioningProfile "DeveYouCN" -configuration development
archivePath:归档文件存放的位置
exportPath:IPA包存放的位置
exportProvisioningProfile:provisioningProfile文件名
configuration:四个选项 app-store、ad-hoc、enterprise、development
Xcode8.3
3-2、$ xcodebuild -exportArchive -archivePath /Users/xxx/Desktop/xcodebuild/Test8.xcarchive -exportPath /Users/xxx/Desktop/xcodebuild -exportOptionsPlist /Users/xxx/Desktop/developmentExport.plist
Xcode9.0
3-2、$ xcodebuild -exportArchive -archivePath /Users/xxx/Desktop/xcodebuild/Test8.xcarchive -exportPath /Users/xxx/Desktop/xcodebuild -exportOptionsPlist /Users/xxx/Desktop/ExportOptions.plist
xcode8.3开始放弃了exportProvisioningProfile这个参数,通过使用plist文件配置打包参数。
Xcode8.3与Xcode9区别于plist文件内容,9开始支持更多的参数
以下是遇到的坑
1、 error: exportArchive: No applicable devices found.
上边的报错网上都说是ruby版本跟Xcode要求的版本不一致,切换到系统版本就可以了。
$ rvm use system
然并卵,并不能解决我的问题,后来才发现我犯了一个低级错误,我Xcode8.2使用的是8.3版本的导出命令,所以一直报这个错。
2、2017-10-20 09:58:34.825 xcodebuild[8732:4616796] [MT] IDEDistribution: -[IDEDistributionLogging _createLoggingBundleAtPath:]: Created bundle at path '/var/folders/t0/y8frtq713x3_fyj0sq81dbwn83s1v3/T/Test8_2017-10-20_09-58-34.824.xcdistributionlogs'.
2017-10-20 09:58:36.313 xcodebuild[8732:4616796] [MT] IDEDistribution: Step failed: <IDEDistributionSigningAssetsStep: 0x7fc798048a60>: Error Domain=IDEDistributionSigningAssetStepErrorDomain Code=0 "Locating signing assets failed." UserInfo={NSLocalizedDescription=Locating signing assets failed., IDEDistributionSigningAssetStepUnderlyingErrors=(
"Error Domain=IDEProvisioningErrorDomain Code=9 \"\"Test8.app\" requires a provisioning profile.\" UserInfo={NSLocalizedDescription=\"Test8.app\" requires a provisioning profile., NSLocalizedRecoverySuggestion=Add a profile to the \"provisioningProfiles\" dictionary in your Export Options property list.}"
)}
error: exportArchive: "Test8.app" requires a provisioning profile.
Error Domain=IDEProvisioningErrorDomain Code=9 ""Test8.app" requires a provisioning profile." UserInfo={NSLocalizedDescription="Test8.app" requires a provisioning profile., NSLocalizedRecoverySuggestion=Add a profile to the "provisioningProfiles" dictionary in your Export Options property list.}
** EXPORT FAILED **
这个是因为exportOptionsPlist 使用的是Xcode8.3版本的,plist文件缺少必要参数,NSLocalizedRecoverySuggestion=Add a profile to the "provisioningProfiles" dictionary in your Export Options property list.
关于Xcode9 的exportOptionsPlist各种参数的理解
Xcode9 导出包1Xcode9 导出包2
Xcode9 导出包3
Xcode9 导出包4
以上是新的导出流程,帮助理解exportOptionsPlist的内容
以上就是自动打包的核心命令。
稍微加工一下,就可以实现一键打包了。
但是仅仅导出IPA包并不能满足我们的需求,我们希望导出新的IPA包后,能够自动通知相关人员,让测试同事及时跟新测试包。
请移步下一篇文章