基于Xcode9和Xcode Server的iOS持续集成-基础篇

Xcode Server是苹果官方提供的持续集成方案,在Xcode9之前就已经存在,不过需要从MAC App Store下载并安装OS X Server(付费软件),使用起来比较繁琐。在Xcode9中,Xcode Server被内置在了Xcode中,于是整个的CI环境搭建过程也大大的简化了。

搭建基本的持续集成环境

接下来我们要搭建一个基本的持续集成环境,这个集成环境可以:

  • 拉取指定仓库的特定分支的代码
  • 指定触发CI的条件
  • 执行Archive操作,并导出Ad-Hoc签名的安装包
  • 将此安装包上传到蒲公英,供测试人员去下载安装

这里以笔者自己的一个GitHub上的公有仓库作为例子,仓库地址为:https://github.com/buptwsg/iOSCoreAnimation

首先Clone此仓库到本地。

第1步,开启Xcode Server

打开Xcode->Preferences->Server & Bots,点击显示为OFF的开关,输入管理员密码后,在弹出的窗口中选择Integration User。苹果建议是使用一个特定的,非管理员权限的用户,不过也可以使用当前登录的用户。在这里,可以直接选择当前登录用户。


基于Xcode9和Xcode Server的iOS持续集成-基础篇_第1张图片
WX20171011-064822.png

点击Continue后,会去配置并启动Server,完成以后,界面如下:


基于Xcode9和Xcode Server的iOS持续集成-基础篇_第2张图片
WX20171011-065759.png

至此,Xcode Server就已经启动了。可以根据自己的需要,对Server进行配置,暂时我们不用修改任何设置。

第2步,创建Bot

2.1 在Xcode中打开项目,点击Product->Create Bot...

要创建Bot,必须在打开项目的状态下,否则'Product->Create Bot...'项是灰色的,无法点击。

2.2 连接到服务器

在弹出窗口中,可以为Bot命名,然后从下拉框中选择'Add New Server...'。
在接下来的界面中,从列表中选择Server,然后点击'Next'。
然后,输入用户名,密码,点击'Add'。


基于Xcode9和Xcode Server的iOS持续集成-基础篇_第3张图片
WX20171011-071233.png

在这里,我选择的是作为'Registered user'的身份连接到Server,然后输入当前登录用户的用户名和密码。回想一下,在开启Server的时候,我们选择的Integration User是当前登录用户。
如果选择'Guest',虽然也可以,但是之后会发现,无法对创建好的Bot进行编辑。

这一步的结果,实质上是创建了一个Xcode Server类型的Account,并添加到Xcode中。


基于Xcode9和Xcode Server的iOS持续集成-基础篇_第4张图片
WX20171011-072117.png

在写这篇文章的时候,Xcode有bug,添加了Xcode Server的Account以后,会发现之前添加的Apple ID类型的账户都没有了。

2.3连接到代码仓库

由于当前打开的项目,是Clone下来的Git仓库,所以Xcode很智能的读取出了仓库的信息。在下面的界面中,可以从下拉框中选择具体的分枝,然后点击Next。


基于Xcode9和Xcode Server的iOS持续集成-基础篇_第5张图片
WX20171011-214926.png

2.4设置构建配置

基于Xcode9和Xcode Server的iOS持续集成-基础篇_第6张图片
WX20171011-220027.png

Scheme: 选择要构建哪个scheme,被构建的scheme必须是共享的。所以如果scheme是未共享的状态,请保持'Share and commit scheme'被选中。

Actions:指定要执行哪些动作。一共有3类,Analyze(代码静态分析),Test(测试), Archive(打包)。
针对Export,笔者选择的是'Use Custom Export Options Plist',原因是因为如果不选择这项,打出来的包总是用iPhone Developer的证书进行的签名,无法打出Ad-Hoc类型的包。

至于ExportOptions.plist,可以通过下面的办法得到:手动执行Product->Archive,然后导出Ad-Hoc安装包,在导出的目录中,就包含了一个ExportOptions.plist文件,直接用这个文件即可。

Configuration: 这里选择Release版本。

2.5设置构建触发器

可以选择的类型:周期性构建,每次提交构建,手动构建。这里笔者选择的是手动构建。
另外还可以设置每次构建前是否Clean。


基于Xcode9和Xcode Server的iOS持续集成-基础篇_第7张图片
WX20171011-220137.png

2.6设置签名信息

基于Xcode9和Xcode Server的iOS持续集成-基础篇_第8张图片
WX20171011-220249.png

在这里可以将指定的证书和Provisioning Profiles添加到Server。
另外要将Xcode工程设置为手动管理签名,也就是不选中'Automatically Manage Signing'。

2.7 设置环境变量以及传递给xcodebuild的参数

这一步可以根据需要进行设置,目前我们不需要。

2.8 设置触发器

该步骤中,可以设置构建前执行的脚本,构建后执行的脚本,以及邮件相关的触发器。由于我们需要将构建出的IPA包上传到蒲公英,因此需要添加一个构建后执行的脚本,并指定只在构建成功时才执行。


基于Xcode9和Xcode Server的iOS持续集成-基础篇_第9张图片
WX20171011-224106.png

点击Done,一个基本的Bot就配置好了,第一次的Integration自动开始。在集成结束的时候,打包出的IPA文件会被上传到蒲公英。

查看集成的结果并管理Bots, Integrations

在Xcode中,转到Report Navigator,选择Bot或是某次集成,在右侧的窗口区域,可以查看集成结果,触发一次新的集成,以及对Bots进行管理,如编辑,删除等。


基于Xcode9和Xcode Server的iOS持续集成-基础篇_第10张图片
WX20171011-224734.png

构建时的一些目录

/Library/Developer/XcodeServer/IntegrationAssets:这个目录会保存所有的Bot的每一次的集成结果,IPA文件,符号文件都可以在目录中找到。
~/Library/Caches/XCSBuilder/Bots/xxx/:xxx代表一个Bot的ID,在该目录下的Source目录,存放的是从仓库中拉到的代码。

接下来

现在虽然可以满足基本的持续集成需求,但是缺少了重要的邮件通知功能。在下一篇中,会讲述如何配置邮件功能,来对开发人员和测试人员进行通知。

参考

XcodeServer and Continuous Integration Guide

你可能感兴趣的:(基于Xcode9和Xcode Server的iOS持续集成-基础篇)