上一篇文章中介绍介绍了Xcode Server的搭建过程,需要参考的同学请自行传送XcodeServer持续化集成。但是在实际工作当中,我们需要更加自动化的流程体验,让开发者从繁琐的测试、打包、发布平台中解放出来。Xcdoe Server提供的Triggers功能给我们带来了极大的便利,我们只需添加自定义的脚本,基本上可以实现一键一条龙服务。
1、流程
- 开发完成后,开发人员手动设置标识符(
后面会详细说明
)、选择证书并上传代码。 - Server服务器检测到代码更新,开始集成。集成成功后运行脚本。
- 脚本中判断标识符,识别当前是开发版、测试版还是正式版。
- 根据版本进行平台发布。
2、细节
- 标识符可以是一个文件,也可以是一个字段,大家可以结合自己的项目任意设定。我是在项目的配置文件中声明了一个
APP
变量,它的状态表示开发版、测试版、正式版。上传代码前我需要修改APP
的值。 -
由于我的流程中需要Server服务器在有代码更新的时候开始集成,所以Schedule需设置成On Commit。
12.png - Triggers可以在Integration前后添加脚本,其实更合理的做法应该是在Before Integration中添加脚本判断标识符,如果仅仅是提交更新并不希望打包,在这里exit,但本人没有找到打断Integration的方法,所以只能放弃。
- 现在的做法是所有操作在After Integration的脚本中执行。
- 开发版:只打包,不做其他操作。
- 测试版:给开发人员测试的版本,证书选择开发证书,可以上传到蒲公英。
if [ "$APP" = "TEST" ];then
echo "测试版,上传到蒲公英"
IPA_NAME=$(basename "${XCS_ARCHIVE%.}".ipa)
IPA_PATH="${XCS_OUTPUT_DIR}/ExportedProduct/Apps/${IPA_NAME}"
curl -F "file=@${IPA_PATH}" -F "uKey=userkey" -F "_api_key=apikey" http://www.pgyer.com/apiv1/app/upload
- 正式版:选择生产证书,直接上传到AppStore,如果需要发布到TestFlight,需要登录iTunesConnect设置。
if ["$APP" = "RELEASE"];then
echo "正式版,上传到TestFlight"
altoolPath='/Applications/Xcode.app/Contents/Applications/Application Loader.app/Contents/Frameworks/ITunesSoftwareService.framework/Versions/A/Support/altool'
IPA_ARCHIVE=$(basename "${XCS_ARCHIVE%.}".ipa)
IPA_ARCHIVE_PATH="${XCS_OUTPUT_DIR}/ExportedProduct/${IPA_ARCHIVE}"
"$altoolPath" --upload-app -f ${IPA_ARCHIVE_PATH} -u "username" -p "password"
- 上传到AppStore需要用到Altool这个工具,路径如下
/Applications/Xcode.app/Contents/Applications/Application\ Loader.app/Contents/Frameworks/ITunesSoftwareService.framework/Support/altool
如果使用上面路径出现问题,请参考`正式版`代码。 - 如果出现下面报错
altool[] *** Error: Exception while launching iTunesTransporter: Transporter not found at path: /usr/local/itms/bin/iTMSTransporter. You should reinstall the application.
在终端输入下面代码即可 (修改/usr权限`sudo chmod -Rf 777 usr/*`)
ln -s /Applications/Xcode.app/Contents/Applications/Application\ Loader.app/Contents/itms /usr/local/itms
```
- Altools详细用法请参考Altools使用说明 。
-
Xcode Server还提供了邮件通知服务。只是我在使用的过程中似乎并没有效果,知道使用方法的童鞋请不吝指教🙏。
14.png
有关Xcode Server 的更多用法,期待大家的交流。
网友评论