基于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。苹果建议是使用一个特定的,非管理员权限的用户,不过也可以使用当前登录的用户。在这里,可以直接选择当前登录用户。


WX20171011-064822.png

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


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'。


WX20171011-071233.png

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

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


WX20171011-072117.png

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

2.3连接到代码仓库

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


WX20171011-214926.png

2.4设置构建配置

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。


WX20171011-220137.png

2.6设置签名信息

WX20171011-220249.png

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

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

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

2.8 设置触发器

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


WX20171011-224106.png

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

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

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


WX20171011-224734.png

构建时的一些目录

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

接下来

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

参考

XcodeServer and Continuous Integration Guide

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,560评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,104评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,297评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,869评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,275评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,563评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,833评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,543评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,245评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,512评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,011评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,359评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,006评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,062评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,825评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,590评论 2 273
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,501评论 2 268

推荐阅读更多精彩内容