Canoe

Xcode Server自动打包

2018.04.23

之前项目中一直使用的jenkins来持续集成,之后也使用过fastlane来自动打包,然而总感觉这两种打包方式集成起来较为复杂,对于证书配置以及Xcode版本更新变动的时候会很麻烦,那么有没有一种较为方便而且能满足我们需求的自动打包工具呢?

需求

首先我们分析一下我们的自动打包的需求。

  1. 从项目develop分支上checkout一份代码下来。
  2. 执行pod install操作。
  3. 每天6点按时执行打包流程。
  4. api包上传到蒲公英。
  5. 通知测试以及开发人员。

根据需求,我发现其实在Xcode9之后内置的Xcode Server就可以做到,通过Xcode server我们可以创建bot,bot可以认为是Xcode给我们提供的打包机器人。Xcode Server是苹果官方提供的持续集成方案,在Xcode9之前就已经存在,不过需要从App Store下载并安装OS X Server,并且是付费的,Xcode9内置了之后,整个CI环境的搭建过程就可以变得非常简单而且方便。

集成原理

官方一张图可以很好的表现整个流程。

Xcode Server给我们提供了一个服务器,我们需要有一台mac电脑来配置Server,创建自动执行机器人,然后在开发过程中,将代码不断合并到git上,在指定的时间由创建好机器人就会将git上的代码拉取到Server上,并且执行需要的操作,例如pod install以及创建ipa上传到蒲公英等,执行完成之后会生成执行报告,如果有自动化测试的话,还会输出测试统计数据。

集成步骤

一、设置Xcode服务器

1.选择Xcode> Preferences,然后点击Servers&Bots。
2.打开开关。选择用于运行Xcode Sever的账户。可以使用当前的账户,也可以新创建一个单独的账户。

3.设置超时时间,超过时间后就会自动取消,这里可以使用默认时间10分钟,但是如果项目仓库较大并且网速较慢第一次拉取会很耗时,可以先设置长一点时间。
4.配置创建和查看机器人的权限。

5.配置邮件通知。

二、创建bot

1.选择Xcode>Product>Create Bot
2.输入机器人名字和选择服务器,点击下一步。如果Sever搭建在另一台机器上,也可以在创建bot之前将Xcode Server添加到Accounts中。

3.配置git仓库,一般Xcode会自动关联到git仓库中,有些仓库可能需要输入账号和密码。

4.编译配置。

share and commit scheme 意思是commit编译的方案配置,如果scheme是没有被共享的状态,需要选中。
Actions>Analyze 代码静态分析。
Actions>Test 测试。
Actions>Archive 打包
Export选项分别是:

  • Do Not Export Product:归档后不要导出应用程序。
  • Installable Product:导出安装包。
  • Installable Product & Thinned Variants:导出瘦身后的安装包。
  • Use Custom Export Options Plist:使用ExportOptions.plist来导出自定义的安装包。至于ExportOptions.plist,可以通过下面的办法得到:手动执行Product->Archive,然后导出你所需要环境的安装包,在导出的目录中,就包含了一个ExportOptions.plist文件,直接用这个文件即可。

Configuration:这里选择打release版本的包。
5.配置触发器。可以选择周期性构建,每次提交构建,手动构建。以及什么时候需要clean。
6.设置是否允许Xcode Sever管理你的证书和描述文件,以及自动注册设备到开发者账号。
7.为参数xcodebuild和环境变量添加参数,然后单击下一步。这里项目中不需要配置。
8.最后我们配置在集成之前或者之后做的操作。

分别对应于集成前所执行的脚本,集成后执行的脚本,新建issue邮件,定期邮件报告。
针对于我们的需求,我们需要在集成前执行pod install操作,以及在集成后上传到蒲公英。
pod install

#!/bin/sh

export LC_ALL="en_US.UTF-8"

# 进入工程根目录

cd Demo

# 执行pod install

/usr/local/bin/pod install --verbose --no-repo-update


上传蒲公英

#!/bin/sh

IPA_NAME=$(basename "${XCS_ARCHIVE%.*}".ipa)

IPA_PATH="${XCS_OUTPUT_DIR}/ExportedProduct/Apps/${IPA_NAME}"

echo ${IPA_PATH}

#请根据蒲公英自己的账号,将_api_key的值替换为相应的值。

curl -F "file=@${IPA_PATH}" -F "_api_key=你的apikey" https://www.pgyer.com/apiv2/app/upload


9.点击下一步,创建完成!

三、bot使用

创建成功之后,我们先可以手动触发一次测试一下是否能够成功打包,第一次拉取时间一般较长。

运行错误时,可以在log中查看到打印出来的错误,根据提示进行修改。

成功之后可以在主页面看到一些报告和统计。

邮件通知我们可以在bot中配置,但是我更加建议在蒲公英中去设置,操作简单而且可以直接微信通知,邮件通知和短信通知。


以上就是对Xcode Sever的一些总结,如果有什么错误的地方欢迎指正,或者有更好的持续集成方式欢迎一起交流。

参考:
iOS Xcode Server 持续集成(一)(环境配置) - 简书
基于Xcode9和Xcode Server的iOS持续集成-基础篇 - 简书
Xcode Server 配置苹果官方文档
蒲公英 - 文档中心 - API 2.0

Comments
Write a Comment