1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > Xcode Server 教程1:入门

Xcode Server 教程1:入门

时间:2018-08-08 17:22:18

相关推荐

Xcode Server 教程1:入门

/82240/ Xcode Server 教程1:入门

/09/08 ·iOS开发·Xcode Server

分享到:1 本文由伯乐在线-zaishaoyi翻译,唐尤华校稿。未经许可,禁止转载!

英文出处:@czechboy0。欢迎加入翻译组。

这篇文章是Xcode Server系列教程的第一部分。新的文章将会在我的Twitter(@czechboy0)上发布。

我们都知道Xcode Server是如何工作的。你的iOS团队成员花费数周的时间做一个特征分支,并且在这段时间里他没有把别人所做的修改合并到自己的代码里面。当PM催促团队成员交付既定的功能时,他会创建一个pull请求。人们快速浏览代码(因为它包含四千多行追加代码),完成代码审核之后,合并代码,一切就完成了,对吗?

并非如此。

你着手于新特征,期待有喝彩和掌声,因为这也预示着接下来几周要辛苦工作。然而,你却沉溺于Twitter。最终,你没有对新特征进行适当的测试,应用程序在32位设备上崩溃了。

这并不是一个真实的故事,但却时有发生。我们大多数人都在这样团队工作过:持续集成(CI)不是他们工作的一部分。或许他们认为自己的团队太小没必要使用这么先进的工具,也或许他们太忙没有时间安装。

持续集成是一种软件开发实践,即了解你合并的内容,时常合并。

这是我个人对持续集成的理解。在上面的事例中,这两个特性都被破坏了。首先,团队不知道他们在合并什么东西(一个bug使得他们的app无法在32位设备上使用)。其次,由于没有时常合并代码,导致最后存在大量差异,无人可以对这样的代码进行合理评审。只要他们使用CI工具,遵循CI实践,这两个问题都是可以避免的。

如果你的团队还没有使用CI,或者你们已经使用了集成工具但使用效果并不令人满意,那么这篇文章就是为你而准备的。今天,我将展示如何使用Apple公司开发的持续集成服务器——XCode Server(简写为“XCS”)。

XCS之所以能成为我所有项目的专用解决方案,原因有很多:

免费自托管可以在已连接的iOS设备上进行测试支持应用程序的OTA安装,即时可用你可以控制它的XCode版本(不需要等别人来为你更新)最重要的是,XCS是由XCode的维护者开发的,这意味着你可以得到XCode最新版本和最新特性的支持,这些特性包括代码覆盖图、行为测试结果等等。简直是无与伦比。

今天,我将展示如何进行基本的配置。在这个系列的后续文章中,我将解释如何从中获取CocoaPods(甚至是私有pod)之类的工具,如何归档Ad Hoc 和App Store版本,如何插入诸如“Buildasaur”和“fastlane”之类的工具,甚至如何编写相对于Xcode Server API的程序。总的说来,我会展示如何充分利用XCode Server。

这个系列主要讲述如何使用XCode Server。如果你想了解XCode Server内部是如何工作的,我已经写过这样的一篇文章。

所需软件清单

为了深入理解这篇文章,你需要:

装有OS X10.10或者以上版本的Mac,Xcode 6或者更高版本访问Developer Portal的苹果开发者账号

环境

我选择使用XCode 7 beta 3和OS X Server5 beta 3,尽管它们都是测试版。与OS X Server 4和XCode 6 没有太大区别。所以都使用旧一点的版本应该也没有问题(只是屏幕看上去会有些许不同)。

本文主旨

本文中,我们要在你的Mac上安装OS X Server,并使得它与XCode可以一起使用。然后我们在XCode Server上创建一个Bot,来测试一个从GitHub下载下来的iOS 应用程序。 就这样。非常简单易懂,这篇文章接下来的部分,我们会更接近一个真实的,更为复杂的iOS开发团队建立。

我们开始吧!

1.下载OS X Server

XCode需要 OS X Server开启持续集成服务。在Mac App Store上下载OS X Server一般要花费19.99美元。然而,iOS和Mac 开发者可以免费下载。接下来我们要进行免费下载。

浏览开发者门户的OS X 下载区,下载最新版本的OS X Server5(你需要登录你的开发者账户。)

现在点击已下载的安装包,安装OS X Server。

2.启用XCode Server

启动OS X Server(在你的应用程序文件夹下,名字为“Server.app”),点击Services下面的Xcode。

然后你需要告诉 OS X Server 使用哪一个XCode,点击“Choose Xcode…”,选择你的XCode 7(XCode 6 也可以)就可以了。

接下来,XCode Server需要花费大约30秒完成准备工作。之后点击右上角的ON 开关,状态文本将会变成“Starting”。当所有准备工作完成,开始运行的时候,可以看到一个绿色的圆点和“Available on your localnetwork…”。

好了,你建立起一个XCode Server!

3.检出我们的测试工程

现在,我们创建一个Bot来测试GitHub上的一个应用程序(这是我为你特别准备的,是不是很善解人意?)正如你期望的,它叫做,“XCSTutorial Project1”。它是一个带有iOS 应用程序目标的XCode工程。

创建Bot的一种方式是直接由XCode创建。为了后续工作顺利进行,首先需要将你的工程检出到本地。现在我们进行检出。打开终端,切换到工作路径下,比如在你的文档目录下,运行下面的三个命令:

这会把工程克隆到本地(向导的第一步)并在XCode中打开。请确保你正在使用的XCode与之前在XCode Server中选择的XCode是同一个(最好是XCode 7)。

4.在XCode中追加Server

在我们创建Bot之前,我们需要在XCode注册我们新创建的XCode Server。选择 XCode 的Preferences(CMD+,),然后选择“Accounts”,在底端点击加号按钮,选择“Add Server”。

在地址栏输入本机地址(127.0.0.1),因为刚刚在本机上安装了XCode Server……

然后输入凭证(与Mac账户的凭证相同,对我来说是User Name: honzadvorsky和我的登录密码。)

点击“Add”之后,你会看到你的服务器被追加到XCode的Preference里面。

5.创建一个Bot

我一直在说Bot,但是它们到底是什么东西呢?

Bot,是一个XCS 的专业术语,是一个构建工作的描述。它告诉XCode Server 代码位置,如何去生成以及测试代码,在生成结束以后通知哪些人等等。运行一次这样的Bot叫做集成。集成产生有价值的东西,比如archives、IPA、测试结果和日志。

现在来创建我们的第一个Bot。Bot的控制按钮隐藏在XCode左边区域的最后一列,Report导航栏下。

在左下方,点击齿轮图标和“CreateBot…”。

现在可以看到弹出了一个与下面类似的表单,注意,复选框要求你共享scheme。

这是什么意思呢?

Scheme 是你xcodeprojj和xcworkspace文件夹下的文件,描述了使用哪一个目标(例如XCSTutorialProject1 - iOS app)和如何生成(例如Debug或者Release)。只有共享的schema才可以检入到你的代码库,并且只有这些共享的schema可以被持续集成服务例如XCode Server使用。

总体而言,schema是一个生成方案。所以要确保XCode Server可以看到它,这里我们通过共享实现(当在XCode里面编辑scheme的时候,点击Shared 复选框,这会将scheme加入到我们的代码库中)。

第一次在你的项目中创建Bot,你会看到这个。通常,你会继续并让XCode提交scheme到你的代码库。但是我已经为你做完了这些。所以,点击Cancel,转到终端,在你的工程文件夹下运行下面的命令

然后重启XCode(抱歉,XCode不喜欢自己修改scheme),重复Bot创建过成。这一次,应该没有关于scheme的消息了,正如下面截图所示。

点击下一步,此处你的XCode将会检查是否有权访问你的(实际上,此处是我的)代码库。很有可能(如果你像我一样使用一个自签证书)会首先看到XCode抱怨“The server SSH fingerprint failed to verify.”这是XCode 7的新的特性,来防止MITM袭击。你需要点击“View”然后点击“Trust”。这意味着你声明:“没有问题,XCode。我了解并且相信这个XCode Server,不需要担心。”

然后,如果你还没有在XCode的Preferences -> Accounts中登录到你的代码库,XCode会要求你“登录”,它说“请提供证书,以便于XCode Server可以从这个代码库中检出文件。”点击“登录”,告诉XCode,是要创建新的SSH键还使用既存的。因为在~/.ssh/里面已经存在SSH键,所以我告诉XCode “使用既存的SSH键”。

你的Bot会获取选定分支上的变更,生成代码的最新版本。这意味着如果你想在多分支上测试代码,比如说masterrelease两个分支,你需要为它们创建两个独立的Bot(在后续的教程中,我们利用Buildasaur使得这个过程连贯起来)。

选择master,然后点击Next。等一下你会看到所有Bot的配置选项。我们来看一下这些都意味着什么(这段时间比较适合去喝一杯咖啡或者去趟洗手间……伦敦现在的天气不错,不是吗?……板球……好了,回到Bots!)

6.Bot配置

Schedule告诉Bot什么时候运行:

Periodical意味着Bot每小时,每天还是每周运行一次On Commit使得Bot每5分钟从代码库获取一次最新代码,并且无论何时,发现新的提交任务,都会启动新的集成。在master分支上的On Commit Bot可以帮助你快速的发现什么时候测试开始失败,而不需要每个人都记着去手工执行测试Manual只有当点击XCode中的“集成”时才会运行

Actions告诉Bot要做那些工作:

Perform analyze action运行静态分析Perform test action运行应用程序测试Perform archive action存档你的应用程序,以备在TestFlight或者应用程序商店发布时使用。允许查看测试覆盖了哪些代码,这个选项会迫使XCode Server收集覆盖率数据而无需在scheme中将偏好设置为on。如果在本地运行测试,你不想收集覆盖率数据,但又需要利用在CI 服务器运行时的覆盖率,这个特性就显得非常有用。标记和导出,应用程序从生成档案中通过Wi-Fi直接安装到iOS设备上,以后我会专门写一篇文章介绍你应该如何实现这一操作。

Configuration允许重写Bot的生成配置(Debug,Release……)。我总是选择默认的“Use SchemeSetting”。

Cleaning通过定期地清除它的所有资源并从scratch上检出代码库,确保Bot不会依赖于DerivedData的状态,或者它的源文件夹。你曾经遇到过损坏的Pods文件夹吗?这是一种在新的集成(从scratch上检出所有的东西)开始之前移除所有的产品、中间文件和源文件夹的方式。选项有:

Always– 每次集成前移除所有的产品和中间产物Once a day– 每天只有第一次集成从scratch开始Once a week– 每周只有第一次集成从scratch开始Never– 不能自动移除产品

选项很多,是吗?但是,无需担心,一般使用默认值就可以了。如果不做任何更改,应该是不会有问题的。

现在请确保“Perform test action”被选中,点击下一步。

在这里,XCode 7 Beta 4 似乎有一个bug,XCode崩溃了。并不是对所有用户都出现,但是如果你的XCode此时崩溃了,请安装 XCode7 Beta 5或者以上版本来代替之前的XCode。

你将会看到一个标题为“Choose the devices that this bot will test with”的页面,这正是我们现在要选择的。在顶端的下拉框中有一个值是“iOS”,并且是不可用的。这是因为在一开始选择的这个scheme告诉XCode Server 我们在一个iOS 目标上生成。

Test With给了你四个选项:

All iOS Devices and Simulators– 在所有已连接的iOS设备和模拟器上进行测试。这会花费一定的时间,因为每个版本的iOS都有10多个模拟器。如果你安装了两个XCode,像我现在这样,就要测试iOS8.4和 iOS 9.0,一共有20多个设备。然而,如果是只花费几秒钟的单元测试,这个时间是可以的。All iOS Devices– 所有已连接的iOS设备,不包含模拟器。All iOS Simulators–所有的iOS模拟器,不包含已连接的iOS设备。Specific iOS Devices– 指定的模拟器和已连接的iOS设备。

我们选择最后一个选项,指定的iOS设备,选择3个设备进行测试。如果你已经连接了一个开发设备,它会直接显示在列表中,你可以将它包含到你的测试进程(超简单)。

一直点下一步,直到看到一个叫做“Configure Bottriggers”的页面。

触发器是一种在集成之前或者之后运行的行为。XCode Server支持两种触发器类型:脚本和发送邮件通知。

使用脚本,你基本上可以实现实现所有功能:运行pod install,或者fastlane,甚至是当生成结束以后通知其他成员。

Weirdness Alert– 有个地方特别容易出错。当XCode Server检出代码库的时候,没有把路径变更到附录文件夹(就像你运行git clone ...到本地的时候,你需要将路径改变到你的工程目录)。因此在你的脚本中,需要做的第一件事情是cd PROJECT_NAME(在我们的案例中是cd XCSTutorialProject1)然后再运行pod install或者fastlane。

第二个触发器类型是发送邮件通知,它并不是你期望的那样。当集成结束的时候它会给你发送一封邮件。然而它比这更聪明。它可以发送邮件给所有的提交者,因为它知道谁在上一次集成后提交过代码。这样,只有变更代码的人会被通知。如果想让某些地址总是可以收到这些邮件,你也可以追加。

你也可以指定当集成失败的时候只通知你,你也可以控制这些邮件的内容。非常棒!

创建一种类型的邮件通知,追加上你的邮件地址。但是,不要勾选Bot中发送给所有的提交者复选框。否则,我会收到你完成集成的邮件(因为我是所有这些内容的提交者。)这是XCode Server一个非常有趣的地方——它的邮件系统不是为开源项目设计的。

你点击“Create”之后,应该可以看到你创建第一个Bot的请求成功了。

祝贺你!创建了第一个Bot。

很好奇你刚才做的这些有什么意义?看一下教程2,在那篇文章中我们将详细讲解集成结果!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。