使用Xcode Server进行iOS持续集成的利与弊

持续集成aka CI是iOS开发过程中不可或缺的一部分,当在应用程序开发过程中出现问题时,它可以提供早期反馈。 在敏捷应用程序开发中,生产可运行的应用程序不仅在编写良好的代码,而且还建立了可连续交付的基础架构。 持续集成和自动化构建的过程可以帮助实现持续交付。 市场上有各种持续集成工具可供iOS团队使用。 CI服务器解决方案可以是自托管的或云的。 您可以在此处获得有关CI服务器的完整列表以及建议。 在iOS开发中,选择自托管CI服务器时,我们几乎没有挑战性的选择

  • Xcode服务器
  • 詹金斯
  • 团队城市

如果您正在寻找云解决方案,那么有一些有希望的服务,例如

  • TravisCI
  • CircleCI
  • BuddyBuild
  • 比特升
  • 温室CI

有多种工具,因此挑战在于如何选择和评估为什么一个要比另一个更好。 Cloud CI服务器易于设置,可以由其他公司进行管理,并且只要配置正确,它们就可以正常工作。 另一件事是在使用云CI解决方案时,我们不需要有人来管理服务器。 但是,在使用基于云的解决方案时,您必须注意各种事项,例如隐私,成本,易用性,可用性和平台支持。 选择自托管vs Cloud CI有其自身的优缺点,您应该考虑最适合您的团队的问题。 对于自托管CI,Xcode Server似乎是简单的选择,因为它由Apple管理并与Xcode深度集成。 在本文中,让我们看看使用Xcode Server进行iOS持续集成的优缺点。

Xcode服务器简介

Xcode Server是Apple开发的一个持续集成平台,用于分析,构建和测试以及存档iOS和macOS应用程序。 iOS开发中最痛苦的部分之一是证书和配置文件配置文件。 当我们想在CI服务器上设置证书和配置文件时,变得更加忙碌。 最新版本的Xcode Server解决了证书和配置文件方面的许多问题。 Xcode Server与Xcode紧密结合,因此设置和使用Xcode Sever进行持续集成变得非常轻松。 苹果在CI的Xcode Server设置上有非常全面的文档,但是我写了简短的教程来设置最新的macOS Server来运行Xcode机器人,该教程也在DZone上发布。 您可以参考这些指南来开始使用Xcode Server。 Xcode Server具有以下功能

  • 免费或廉价解决方案
  • 自托管并与Xcode深度集成
  • 设备测试
  • 无线(OTA)安装
  • 由苹果公司管理和维护

Xcode Server具有所有这些功能,但是有些人为使Xcode Server正常工作付出了很多努力。 让我们看看使用Xcode Server的优缺点

Xcode Server —优点

Xcode Server仅设计用于Apple操作系统,并且因为它由Apple管理,所以在其他自托管CI解决方案(例如Jenkins,TeamCity)中脱颖而出。 其他选项(例如Jenkins,TeamCity)由第三方公司管理,并且大多数以Java或其他某种编程语言编写。 自从Xcode 5首次发布以来,Xcode Server有了很大的改进。最新版本的macOS Server和Xcode Service具有执行有效的连续集成所需的所有功能。

易于设置

如Apple持续集成指南中所述,如果您有Mac / Mac mini和macOS服务器,只需单击几下即可设置Xcode Server。 在上一篇关于使用Xcode Server设置CI的文章中,我写下了一些基本步骤来启动和运行Xcode Server和Xcode bot创建。 本文也已在DZone上发布。 任何iOS / macOS工程师都可以在几个小时内完成设置。

便宜的

如果您已经支付了Apple Developer帐户,则几乎是免费的。 您可以通过兑换代码来获取macOS服务器。 如果您不是Apple开发人员,则只需14.99英镑。 此成本相对较低,而且只是一次投资。

与Xcode的深度集成

Xcode Bot直接集成到真正的Xcode中,而不是任何Xcode插件中,并与源代码和方案绑定在一起。 Xcode Server使用macOS Server中的Xcode服务器。 它是在服务器上运行的真正Xcode,因此它与Xcode深度集成。 开发人员可以直接在Mac上运行的Xcode中查看所有测试报告和代码覆盖率报告。 开发人员可以使用Xcode在本地计算机上创建,编辑和管理Xcode bot。 无需进入Web界面来管理CI作业,但是在Jenkins或TeamCity中,我们需要访问Web界面来管理CI作业。

无痛证书和配置文件设置

iOS开发中最痛苦的事情之一就是设置证书和配置文件。 自从Apple在WWDC 2016中介绍了新的代码签名方式“什么是新的代码签名”后,使用Xcode 8的过程变得如此简单和轻松。使用Xcode Server时,我们需要将所有证书和配置文件复制到’/ Library / Developer / XcodeServer / Certificates’和’/ Library / Developer / XcodeServer / ProvisioningProfiles’目录,我们完成了。

内置代码覆盖率

苹果在WWDC 2015的演讲“ Xcode中的持续集成和代码覆盖率”中介绍了生成代码覆盖率这一不错的功能。 生成代码覆盖率的过程很容易,只有我们需要做的就是在创建Xcode bot时打勾。 开发人员不需要使用其他任何第三方工具(例如“ Fastlane”或“ Xcov”)或其他工具来配置代码覆盖率。

现在,将为每个集成生成代码覆盖率。 最酷的是,它逐个文件显示代码覆盖率,因此我们知道在何处添加单元测试。

内置真实设备测试

Xcode Server支持在模拟器以及真实设备中进行测试。 如上图所示,它内置了“测试”服务,因此减轻了配置“快速扫描”或编写脚本“ xcodebuild”以使用XCTest运行我们的单元和UI测试的负担。 将iPhone,iPad等设备连接到服务器后,它们便开始出现在“设备”标签中,以便我们选择然后进行应用测试。

无需构建的分布式测试执行

以前,需要在测试之前构建应用程序,但是Xcode 8在“高级测试和持续集成”对话中引入了名为“ Build for Testing”的好功能,该功能在派生数据中生成“ xctestrun”文件,可用于运行测试无需使用最新的“ xcodebuild”进行构建,因此我们可以与多个Xcode服务器共享此文件以启用并行和分布式测试。

构建主机和OTA安装

Xcode Server可以“存档”并将其托管在Xcode Server计算机上。 可以将托管的构建分发给质量检查人员和产品人员以进行查看。 可以使用设备地址在浏览器(如Safari)中从设备下载版本。 将有一个“安装”在设备上构建的选项。 由于测试用户可以直接从Xcode Server下载构建,因此可以减少使用“ Crashlytics”或“ HockyApp”之类的构建托管服务的负担。

其余API和环境变量

有一个使用Xcode Server API和Environment变量的选项,以便我们可以根据项目需要编写Xcode Server脚本。 我们可以在“触发器”部分的集成前或集成后脚本中使用Xcode Server环境变量。 我们有能力定义自己的环境变量。

可自定义的触发器

Xcode Server使我们能够运行bash脚本,即在集成之前和集成之后触发。 在将构建作为“预集成”触发器的一部分运行之前,触发器对于设置依赖项(例如CocoaPods,Carthage或Swift软件包)非常有用。 Xcode Server还具有“集成后触发器”,可用于运行其他脚本来执行某些操作或发送电子邮件通知。

更少的快速通道

Xcode Server消除了使用大量Fastlane工具的需要,因为大多数事情都是预先配置的。 Fastlane是一个很好的工具,它建立在Apple的命令行工具之上,可以轻松配置复杂的脚本。 它使用多种工具自动执行iOS开发任务,以实现持续交付。 Xcode Server消除了对以下快速通道工具的需求

  • 扫描-使用Xcode Server内置进行测试
  • Xcov —内置代码覆盖率
  • Gym — Xcode Server可以构建应用
  • 叹息/匹配-Xcode 8中的代码签名变得更加容易

但是,某些快速通道工具(如引导,交付,快照)仍然有用,但主要任务由Xcode Server自动执行。

物理访问macOS服务器

Xcode Server是一个自托管的CI解决方案,我们可以物理访问计算机和计算机上安装的macOS Server。 如果需要,我们可以根据需要调整Xcode服务。 我们可以通过自定义选项在CI服务器上进行有趣的控制。

Xcode服务器—缺点

如我们所见,Xcode Server有很多有用的东西,但是使用Xcode Server有一些缺点。 在最新的Xcode中已消除了以前代码签名和证书的大部分麻烦。 使用Xcode Server时仍然存在一些问题,让我们介绍一下

没有拉取请求支持

假设我们大多数人都使用Github作为代码托管服务,则需要在合并主分支中的代码之前创建请求请求。 Xcode Server支持在不同的Github分支上进行集成,但是它仍然不支持对请求请求的测试,这是应用程序开发中最痛苦的部分。 为了启用拉取请求测试,我们编写了自己的Github Web钩子,并使用Xcode Sever API生成Xcode Bot。或者我们也有开源工具,例如“ Buildasaur”,需要进行额外的设置。

构建从未完成

一些开发人员抱怨说,如果出现问题,Xcode Bot会永远运行,并且调试非常困难。 当代码签名存在问题时,会发生此问题。

服务器和机器人的额外管理

Xcode Server是自托管CI解决方案,它可能无法在我们正确配置的前夕运行。 有人需要照顾机器和服务器,以确保一切正常运行。 这导致需要额外雇用TechOps的DevOps资源来管理那些服务器,或花费开发人员时间来管理服务器,这是很昂贵的。

OTA安装在公共域上失败

一些Xcode Server用户抱怨使用公共域配置Xcode Server。 空中安装并非始终在公共领域上进行。 它将引发“无法连接错误”。 一旦单击“安装”按钮,问题就没有发生,或者“安装”按钮从未出现。 它需要额外的加密,SSL证书和端口设置才能正常运行。 这说明了使用Xcode Server的痛苦

没有跨平台支持

Xcode Server设计为只能与Apple操作系统一起使用,因此不可能将这些服务器计算机用于其他任何平台(例如Android)。

不适合分布式团队

Xcode Server可以有效地与小型iOS团队一起使用,但是如果您的组织规模较大,并且希望在所有分布式团队中共享Xcode Server,则可能会忙于管理。 它要求对域和网络进行其他设置。

结论

Xcode Server是适用于iOS应用程序的Continuos Integration解决方案的有效选择,因为它由Apple维护,它具有内置的静态分析,测试,构建,归档和报告机制,以减轻开发人员的负担,但是我们需要考虑管理CI Server计算机的成本。

您对Xcode Server的体验是什么,您是否认为它将成为应用程序开发人员的第一选择? 在下面的评论中称呼!

像XCBlog的 XCTEQ 发布的帖子一样 您可能还喜欢我们的一些服务,例如访客博客或Mobile DevOps(CI / CD)或测试自动化。 Github 搜索我们的 服务 ,开源项目, 或者在 Twitter Facebook Youtube LinkedIn 上关注我们 下载我们的 XCBlog iOS应用程序以离线阅读博客。

X CTEQ 一家专门从事基于Mobile DevOps,CI / CD,Mobile,AI / ML的测试自动化Checkout XCTEQ产品和服务的公司, 网址 http://www.xcteq.co.uk 或写信给我们info@xcteq.co。英国..