Xcode Server简单介绍(一) —— Xcode Server的安装和配置(一)

版本记录

版本号 时间
V1.0 2020.11.12 星期四

前言

Continuous Integration (CI)可以让你的开发流程更加的迅速,并具有持续性,下面我们就一起学习下如何使用Xcode Server

开始

第一我们看下主要内容:

在本教程中,您将学习如何安装和配置Xcode Server,以便将其用于持续集成(Continuous Integration)。内容来自翻译。

接着看下写作环境:

Swift 5, iOS 14, Xcode 12

无论您是iOS工程师的大团队还是独立开发人员的一员,Continuous Integration(CI)都可以使您的开发工作流程快速且一致,从而使您可以将更多时间花在您真正喜爱的事情上 – 编写美丽的代码。在本教程中,您将学习有关如何使用Xcode Server进行操作的所有信息。

在现实世界中,如果您需要保持一致的方法来构建某些东西,则几乎总是依赖某种形式的自动化。例如,如果您要生产一批蛋糕,并且想要保持一致的味道和质地,则可能涉及某种自动化,以确保每次都使用一样的食谱和一样的烹饪技术是时候生产出同样一致且美味的蛋糕了。

Continuous Integration (CI for short)是软件开发中这种方法的名称。这是在开发代码时一遍又一遍地自动运行iOS应用构建的一种方法。一般,您在专用CI服务器上运行构建,该CI服务器可以是物理计算机,也可以是云中的共享计算机。 CI服务器将在每次提交代码时构建您的应用程序并运行测试。这样,您将立即知道何时发生了故障,并能够立即对其进行修复。

Continuous Integration有多种口味(就像上面提到的美味蛋糕一样),在本教程中,您将探索Apple基于云的Xcode Server。你将学到如何:

  • 设置Xcode Server
  • 设置您的第一个Bot
  • 每次提交都运行集成
  • 在集成中运行测试套件

是时候让那些Bot工作了!

Xcode Server简单介绍(一) —— Xcode Server的安装和配置(一)

在本教程中,您将使用Fruits,这是一个超级简单的SwiftUI应用,其中列出了水果,由于全世界显然需要更多的水果列表应用。

注意:该示例项目可与任何raywenderlich.com教程一起下载。但是,在使用Xcode Server时,您需要将项目存储在源代码控制下,由于Xcode Server将在构建时从中获取代码。

下载示例项目,以浏览代码,但是本教程的第一步是派生一个已经存在的存储库,以在源代码控制下获取自己的代码。

本教程还假设您知道如何对Git存储库进行提交。如果您想了解Git的最新知识,请访问beginner Git tutorial。

要使Xcode Server运行,您需要使项目处于源代码控制之下,因此请第一进行设置。在本教程中,您将使用GitHub,但随时可以使用自己的偏好设置-逻辑保持不变。

注意:如果您还没有GitHub帐户,请在GitHub.com上免费创建一个。确保验证您的电子邮件,以便您可以创建新的存储库。

1. Forking the Repository

GitHub中,fork是您自己的存储库副本。 您可以在不影响原始的情况下进行更改fork。 您将创建一个Fruitsfork,以便您进行一些更改。

登录GitHub,然后访问Fruits repository并单击右上角的Fork按钮。

forkFruits之后,将其克隆到本地工作站。 单击绿色的Code按钮,然后单击剪贴板图标以将URL添加到剪贴板。

接下来,打开终端并键入以下命令,用您的存储库的URL取代:

# 1
mkdir ~/Fruits
# 2
cd ~/Fruits
# 3
git clone [The-Repository-URL-You-Just-Copied-Here] .

这些命令:

  • 1) 在主目录的根目录中创建一个目录来保存代码。
  • 2) 切换到新目录。
  • 3) 将存储库克隆到新目录中。 注意ending space and period,由于两者都需要。

目前,您在本地工作区中有了代码的副本。

接下来,打开Fruits.xcodeproj并构建并运行。

Xcode Server简单介绍(一) —— Xcode Server的安装和配置(一)

祝贺,您目前可以使用本地版本的Fruits进行自动化了!


Setting Up Xcode Server

完全启动和运行Xcode Server包含两个部分。

  • 1) 启用服务器。
  • 2) 配置集成,这是通过Xcode Bot完成的。

本教程将为您设置本地Xcode Server,但在现实世界中,您可能希望将其托管在您自己的个人计算机以外的其他位置。 例如,您可能想拥有一个Mac Mini,可以在团队中共享,或者您可以选择基于云的设置。

不过请不要惊慌:拥有本地版本后,很容易迁移到托管解决方案。

1. Enabling Xcode Server

在开始之前,必须在Xcode中启用Xcode Server

单击Xcode,然后单击Preferences

Xcode Server简单介绍(一) —— Xcode Server的安装和配置(一)

点击Server & Bots

Xcode Server简单介绍(一) —— Xcode Server的安装和配置(一)

在右上角,将Xcode Server切换到打开位置

Xcode Server简单介绍(一) —— Xcode Server的安装和配置(一)

Xcode目前显示一个弹出窗口,以选择哪个用户将充当Integration User

Xcode Server简单介绍(一) —— Xcode Server的安装和配置(一)

如果您要在专用CI / build服务器上安装Xcode Server,提议为此使用全新的用户User。 由于本文中您是在本地计算机上运行Xcode Server,因此将使用现有的用户帐户,因此请在下拉菜单中选择您自己的用户帐户。

Xcode目前安装了运行Xcode Server本地版本所需的各种工具。 这可能需要一段时间,所以这是在幕后高峰的好时机。


Seeing How Xcode Server Works

等待期间,是时候介绍Xcode Server背后的一些理论以及幕后发生的事情了。

目前,Xcode Server当前正在本地计算机上运行。 在幕后,它创建了一组特殊的服务来运行Xcode Server。 您可以自己查看这些。 让我们继续并立即执行此操作。

打开终端并运行以下命令:

open /Applications/Xcode.app/Contents/Developer/usr/share/xcs

这是在计算机上本地运行的Xcode Server的所有组件。 这是从Xcode中打开Xcode Server时生成的整个设置。 最好的部分是,所有这些内容都可以根据您的核心内容进行自定义。 您可以根据需要进行更改,包括对所有dashboards进行更改。

Xcode Server简单介绍(一) —— Xcode Server的安装和配置(一)

Xcode Server使用nginx,Redis,Node.jsCouchDB仅举几例。 谁会想到Xcode内置了Node.js


Creating a New Server

目前,您已经启用了Xcode Server,目前该创建一个新实例了。

单击Xcode,然后单击Xcode Preferences

Xcode Server简单介绍(一) —— Xcode Server的安装和配置(一)

点击Accounts

Xcode Server简单介绍(一) —— Xcode Server的安装和配置(一)

如果您已经关联了Apple Developer帐户,那么您应该会看到您的Apple ID; 如果您看不到,请不要太担心。

点击+图标创建一个新帐户。

Xcode Server简单介绍(一) —— Xcode Server的安装和配置(一)

单击Xcode Server,然后单击Next

目前,您会在计算机上看到可用服务器的列表。除非连接了另一台计算机,否则您应该只看到一台计算机(自己的计算机)。

选择您的服务器计算机,然后单击Next

系统将提示您使用设置服务器时使用的用户User(您自己的用户帐户)登录。输入凭据,然后单击Add

目前,您已经使用自己的用户帐户创建了在计算机上运行的Xcode Server的本地版本。

注意:如前所述,如果您是独立开发人员,但思考将其移至基于云的解决方案或团队中每个人都可以访问的共享Mac Mini上,则可以这样做。

如果您的确 思考使用基于云的解决方案,则业内知名的MacStadium,它提供了一种将macOS托管在云中的付费解决方案。

继续我们的蛋糕制作类比,您目前拥有使蛋糕保持一致的口味和质地的设备。不过,真正重大的是细节,食谱和确切的烹饪温度。

您可以在软件开发中对此进行关联,在该软件开发中,您要确保每次都运行完全一样的脚本,从而使您知道失败是真实的,而不是环境问题。这也意味着每次都以一样的方式剪切构建,就像蛋糕一样。


Adding a New Bot

Xcode Server包含一个称为Xcode Bot的概念。 最终,在表面之下,这是一个单独的Scheme,其中包含您要定义的一些配置。 最大的区别是Xcode Bot是用于在Xcode Server上运行Integrations的。

是时候创建您的第一个Xcode Bot!

选择Product ► Create Bot…

Xcode Server简单介绍(一) —— Xcode Server的安装和配置(一)

为您的Xcode Bot提供一个唯一的名称(一般是“Product Name” + “Bot”)。

Xcode Server简单介绍(一) —— Xcode Server的安装和配置(一)

单击服务器下拉菜单,然后选择新创建的服务器。

Xcode Server简单介绍(一) —— Xcode Server的安装和配置(一)

点击Next

1. Repositories

此时,Xcode会询问您新bot的源代码控制详细信息。 目前,这里的结果将取决于您过去使用Xcode的方式。 如果您以前已经链接了GitHub帐户,这将很容易。 但是,如果您之前从未登录过,请单击Sign In…

Xcode Server简单介绍(一) —— Xcode Server的安装和配置(一)

您应该输入您先前创建的GitHub凭据,或者,如果您使用的是SSH,请导航至SSH密钥的位置(一般存储在〜/ .ssh中)。

这赋予Xcode Bot克隆存储库的权限。

如前所述,完全由Bot决定如何在项目中执行它以及如何执行。它包含了Cookie剪切iOS版本所需的所有信息。

点击Next

2. Setting the Configuration

目前,您应该看到构建配置屏幕。这是此屏幕上每个选项的含义:

  • SchemeBot将在项目内部执行的Scheme。您将其保留为Fruits
  • Actions:您可以在此处指定对每个集成运行哪些操作。

    • Analyze:在代码上运行clang static analyzer
    • Test:运行单元测试和UI测试。您可以选择指定是否启用代码覆盖率以及运行测试所使用的语言和区域。
    • Archive:对应用程序进行存档。Export定义您是否要将应用程序导出为IPA,并提供多种选项供您选择。
  • Configuration:要使用的构建配置。例如,您可以强制将其设置为Debug configuration。一般您会在这里选择Use Scheme Setting

填充字段以匹配以下屏幕截图:

Xcode Server简单介绍(一) —— Xcode Server的安装和配置(一)

注意:您目前将暂时停用Test和导出产品,但不久之后将进行更多操作。

点击Next

3. Setting the Schedule

目前是时候为集成设置schedule时间了,您可以选择:

  • Periodically:每小时或每天或每周在设置的时间运行集成。
  • On CommitBot会定期检查GitHub是否有新提交以启动集成。
  • Manually:您必须通过手动过程触发构建。

选择On Commit时,由于您希望Bot在开发人员每次对存储库进行更改时都运行。

您可以允许Xcode BotXcode升级后运行您的集成,因此请暂时选中此选项。

最后,将Clean选项更改为Always。 这意味着在开始构建应用程序之前将运行清理。 始终提议这样做,以使您对构建有一个清晰的了解,以避免在存在先前的构建工件的情况下,由于构建不同而引起的任何问题(或被掩盖)。

Xcode Server简单介绍(一) —— Xcode Server的安装和配置(一)

点击Next

4. Selecting Devices

目前该决定应该为Bot配置哪种设备了。 此应用仅支持iOS,这就是第一个下拉菜单设置为iOS并显示为灰色的缘由(没有其他选择!)。 但是,您可以选择是针对设备,模拟器还是针对两者进行构建。 对于本教程,请选择iOS Simulators,由于您目前只想检查它是否可以成功构建,而模拟器可以做到这一点。

Xcode Server简单介绍(一) —— Xcode Server的安装和配置(一)

点击Next

5. Signing

是时候让可怕的Provisioning ProfileCertificate高兴了! 幸运的是,您无需在此处做太多事情,因此只需单击Next

Xcode Server简单介绍(一) —— Xcode Server的安装和配置(一)

6. Defining Environment Variables and Build Options

在此屏幕上,您可以定义自定义标志以传递给xcodebuild以及自定义环境变量,以在Bot构建应用程序时进行设置。 在本教程中,您无需在此处进行任何设置。

Xcode Server简单介绍(一) —— Xcode Server的安装和配置(一)

单击Next跳过此部分。

7. Adding Triggers

最后一项是自定义触发器。 这些实质上是构建阶段,但对于您的Bot而言。 这里有许多可能性,例如添加一个post-hook,以在构建完成后触发Slack通知。 您不会在本文中设置任何触发器,因此只需单击Create

Xcode Server简单介绍(一) —— Xcode Server的安装和配置(一)

祝贺,您目前在Xcode Server上运行了Xcode Bot! 目前,只要对存储库进行新的提交,就可以“执行其任务”。 这就提出了一个问题:它到底是什么东西? 答案是Integrations


Integrations

CI术语来说,Integration是单次运行的名称。 用Xcode Server术语来说,这就是Xcode Bot满足您在创建bot时设置的要求的时候。 回想一下,您已指定在提交GitHub存储库时触发集成。

因此,如果您的Xcode Bot运行了12个集成,则意味着您已经构建了12次项目。

1. Creating your First Integration

思考到这一点,是时候继续本教程并触发第一个集成了!

Xcode中打开Report导航器。

Xcode Server简单介绍(一) —— Xcode Server的安装和配置(一)

您可能已经熟悉此面板,但是从本质上讲,它显示了有关构建的最新报告,测试目标的运行以及目前从Xcode Server进行的集成。

单击您的Xcode Bot

Xcode Server简单介绍(一) —— Xcode Server的安装和配置(一)

此屏幕显示Xcode Bot的一些统计信息。 您可以在此处查看构建和测试的历史记录以及统计信息,例如运行的集成总数和成功率。 一旦开始更定期地运行Xcode Bot,此屏幕将填充许多有用的数据,您可以使用它们来查看构建的性能。

Report导航器中,展开Fruits Bot行。

目前,单击显示的行,即Integrate (1)

Xcode Server简单介绍(一) —— Xcode Server的安装和配置(一)

该屏幕显示了特定集成的所有信息。 它会告知您集成是正在进行还是完成。 它还会告知您是否存在任何警告,错误,分析失败或测试失败。

如果集成仍在处理中,则可以:

  • Cancel Integration。 这将停止集成并将其标记为Canceled
  • View Screen。 这使您可以与机器进行屏幕共享以观看正在进行的构建。 如果计算机在团队中共享,这将超级有用。

由于配置缘由,您还指定了要存档的文件,该文件在Build Results标题下可见。

Xcode Server简单介绍(一) —— Xcode Server的安装和配置(一)

您将进一步深入了解此显示及其含义,但就目前而言:祝贺! 您刚刚让Xcode Bot首次成功集成!


Running Unit Tests and UI Tests

持续集成的一个好用例是单元测试和UI测试。 每次您签入新代码时,CI服务器都会启动并执行您的测试套件。 如果您犯了一个错误并且测试失败了,那么您会知道在那儿,然后您最近的更改使某些事情发生了变化,从而使您可以在问题仍在内存中的同时进行修复。

Xcode Server对此提供了全面的支持,并且可以提供其他信息,例如代码覆盖率。

Fruits项目中,您将进行一些基本的单元和UI测试,以便您执行Xcode Bot

单击Integration屏幕上的Edit Bot

Xcode Server简单介绍(一) —— Xcode Server的安装和配置(一)

单击Configuration,选中Test框,并确保将Code Coverage设置为Enabled

Xcode Server简单介绍(一) —— Xcode Server的安装和配置(一)

另外,您还要确保测试可以在iPhone模拟器和iPad模拟器上运行,由于您想同时测试两个设备类别。

选择Devices选项卡,然后选择Specific iOS Devices and Simulators。 从列表中选择iPhoneiPad模拟器。

Xcode Server简单介绍(一) —— Xcode Server的安装和配置(一)

单击Done,然后单击Integrate以开始新的集成。

Xcode Server简单介绍(一) —— Xcode Server的安装和配置(一)

使用新的更改,集成将构建您的项目并在iPhone / iPad上运行单元和UI测试。


Pulling Out Build Reports

Xcode Server将生成构建报告,这些报告称为Integration Reports。 这意味着您可以询问每个集成并提取与该集成有关的特定构建报告。

选择新创建的集成,称为Integrate (2)

Xcode Server简单介绍(一) —— Xcode Server的安装和配置(一)

如果构建仍在进行中,那么您将能够从集成屏幕中看到进度。 等待并等待它完成-您可能想让自己喝杯茶,由于运行所有测试可能需要很长时间!

完成后,您可能会注意到您刚遇到第一次失败的集成。 尽量不要惊慌,由于这很正常。 实际上,一旦您完全启用了此功能,这将超级适合您在应用程序准备就绪之前就发现问题。 那么,出了什么问题?

Report导航器中,展开Integrate (2)

Xcode Server简单介绍(一) —— Xcode Server的安装和配置(一)

目前,在集成中,您应该看到Tests, Coverage, Commits and Logs。 您可以真正地开始研究此特定集成的细节,这在出现问题时超级有用。

1. Inspecting Failed Tests

您应该能够快速看到一项测试失败。 单击Tests

Xcode Server简单介绍(一) —— Xcode Server的安装和配置(一)

您可以在UI测试旁边看到所有单元测试的列表,并且可以看到其中一个UI测试失败,但仅在iPad上。 您可能在想(特别是由于它仅在iPad上失败):“这与设备尺寸有关吗?”

单击iPad设备旁边的显示三角形。

Xcode Server简单介绍(一) —— Xcode Server的安装和配置(一)

目前,展开Assertion Failure并悬停在Automatic Screenshot上,然后单击“眼睛”图标(您可能对macOS上的QuickView熟悉此图标)。

Xcode Server简单介绍(一) —— Xcode Server的安装和配置(一)

XCUITesting具有内置的屏幕截图,并采用了真正的Apple风格,可直接在Xcode Bot中显示在这里(这太酷了!)。 如您所见,Fruits列表为空,这说明了该UI测试失败的缘由。

2. Fixing the Error

您将对Fruits进行代码更改,以使失败的UI测试再次成功。

打开ContentView.swift并将body替换为以下内容:

var body: some View {
  NavigationView {
    List(viewModel.fruits) { fruit in
      FruitRow(fruit: fruit)
    }
    .onAppear {
      viewModel.loadFruits()
    }
    .navigationBarTitle("Fruits")
  }.navigationViewStyle(StackNavigationViewStyle())
}

SwiftUI中,当在iPad上运行时,NavigationView的默认样式将为SplitView。 您可以通过将NavigationViewStyle设置为StackNavigationViewStyle来禁用此功能,如最后一行所述。

3. Running the Integration Again

好的,那很容易解决。 但是您如何告知Bot事情发生了变化?

请记住,Xcode Server可以与您在本教程开始时创建的存储库中的代码一起使用。 因此,您需要进行提交,然后Xcode Server将像往常一样执行并运行集成。

目前,使用新的和经过改善的代码进行提交。 您可以通过Xcode,在命令行或一般使用的git GUI中执行此操作。

然后返回到Report导航器,并通过单击报表导航器中的Fruits Bot再次运行Bot,然后进行Integrate

Xcode Server简单介绍(一) —— Xcode Server的安装和配置(一)

目前,您所有的XCUITests都通过了,并且集成成功!祝贺!您已经成功建立了Xcode Bot,并在崭新的CI系统上运行了您的前几个集成!

您仅在Xcode Server上进行了初步研究,可以执行许多不同的操作,例如:

  • 添加自定义构建脚本(Build Scripts)
  • 添加对hooks的支持,以便您可以在构建完成或失败时将消息发布到Slack

因此,继续探索。

记住,CI总是每次都用cookie剪切一样的版本。因此,请坐下来思考将iOS应用程序带到App Store所需的所有手动任务,并查看是否可以使它们自动化。

要了解有关Xcode Server的更多信息,请查看苹果公司的WWDC video,其中展示了对Xcode Server的最新更改。

有关Xcode Server的替代方法,请参见此截屏视频screencast。或者,查看我们的教程Continuous Integration With GitHub, Fastlane & Jenkins。

后记

本篇主要讲述了Xcode Server的安装和配置,感兴趣的给个赞或者关注~~~

Xcode Server简单介绍(一) —— Xcode Server的安装和配置(一)

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
无敌小kiii的头像 - 鹿快
评论 抢沙发

请登录后发表评论

    暂无评论内容