移动端设计研发

Jenkins+Xcode实现自动打包 上

2017-10-20  本文已影响0人  oneday527

每次打包都会占用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开始支持更多的参数

Xcode8.3 developmentExport.plist Xcode9.0 ExportOptions.plist

以下是遇到的坑

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 导出包1
Xcode9 导出包2
Xcode9 导出包3
Xcode9 导出包4

以上是新的导出流程,帮助理解exportOptionsPlist的内容

以上就是自动打包的核心命令。
稍微加工一下,就可以实现一键打包了。

但是仅仅导出IPA包并不能满足我们的需求,我们希望导出新的IPA包后,能够自动通知相关人员,让测试同事及时跟新测试包。

请移步下一篇文章

Jenkins+Xcode实现自动打包 下

上一篇下一篇

猜你喜欢

热点阅读