0%

WWDC21 10267 一窥 Xcode Cloud

有幸参与《WWDC 21 内参》的工作,欢迎 订阅 该专栏!

Xcode Cloud 是为 Apple 平台开发者所设计的一项易用的集持续集成(Continuous Integration)和持续交付(Continuous Delivery)于一体的服务。

持续集成指的是周期性地合并发生变动的代码,这样能尽早地发现问题解决问题,以提高代码质量。

一个典型的持续集成工作流程如下图所示:

  1. 将发生变动的代码推送至远端代码仓库。
  2. 项目开始构建、运行测试代码和其他自定义步骤。
  3. 如若通过质量测试(构建成功、测试通过等),保存构建产物,并发出通知至其他团队成员。

再让我们看一下 iOS 应用常见的开发流程:

  1. 修复 Bug 和完成新的需求。
  2. 根据团队内部 Code Review 的反馈,对代码作相应的修改。
  3. 通过自测后,将应用分发至测试团队手中。
  4. 根据测试用户的反馈,及时地修复问题。

高效地运作上图所示流程是构建高质量应用的关键。

嘭! Xcode Cloud 此时闪亮登场!

在上述持续集成的流程之上,Xcode Cloud 把应用开发、应用测试和应用分发三点连接起来,提供给开发者一条完整的开发流水线:

  1. 应用开发
  2. 应用测试
  3. 应用分发
  4. 收集使用反馈
  5. 根据反馈,进行快速迭代

立马上手 Xcode Cloud

Fruta 是 Apple 用来演示 Xcode Cloud 的 App。在 Xcode 13 本地打开的 Xcode Cloud 控制台页面大致如上图所示,左边侧边栏展示了已完成/正在执行中的工作流,右边则是对多个工作流的总览,从中我们可以粗略了解整个团队开发的进度。

什么是 Xcode Cloud Workflow?

我们可以把 Xcode Cloud 工作流理解成某种配置。Xcode Cloud 会读取该配置的内容,从而明白自己在何时执行何种任务。某个工作流执行的过程称为一次构建。Xcode Cloud 依托于 Apple 自管理的云端基础设施。该基础设施提供代码签名,同时也能帮助开发者访问多种不同版本的操作系统和 Xcode,例如最新版的 macOS Monterey 和 Xcode 13。

在左侧边栏中点选某个工作流,展现在我们面前的是该工作流单次运行的总览。从这里,我们能看到测试代码运行的结果与相应的日志,甚至可以双击报错处,直接定位到导致出错的某一行代码。

这些内容可不只是在 Xcode 本地才能看到,也可以在 App Store Connect 网页中获取到,包括开始构建、管理工作流、检阅构建产物、与团队成员共享构建报告和管理通知等。比如,在构建完成后,可以在网页中设置结果通知到 Slack 等交流协作工具,以帮助团队成员在第一时间知道结果。

值得一提的是:网页版的 Xcode Cloud 提供与 Xcode 应用内一致的全功能体验

One More Thing…

Xcode Cloud 不光是团队开发以及协作流程的好帮手,而且 Apple 一贯良好的隐私保护也未曾在它身上缺席,源代码的管理是软件工程中的核心之一。Xcode Cloud 的方方面面均是为保护用户数据而设计的:

  • 构建环境的信息过一段时间会被删除
  • 从不存储项目源代码
  • 构建数据会被加密存储在 CloudKit 数据库中
  • 用户可随时随地删除数据,且数据会被从 Xcode Cloud 系统中完全移除

为你的工程配置 Xcode Cloud


在 Xcode 13 中(满足一些前提条件之后)仅需几步操作即可为你的工程配置 Xcode Cloud。


接着,选中接入 Xcode Cloud 的应用(这里以 Fruta 为例),·


然后,开始预览一个工作流。工作流最基本的四个要素为:

  • 启动的条件
  • 构建的环境
  • 执行的任务
  • 结束后执行的任务

想要深入了解工作流的编辑过程,请参考 WWDC21 10268 探索 Xcode Cloud 工作流


然后需要给 Xcode Cloud 授权以获取 Fruta 源代码。授权范围不光光是代码主仓库,也包括名下的子模块以及私有的 Swift Package。

Fruta App 使用到两个托管于 GitHub 上的私有仓库,所以点击「Grant Access」会跳转到 App Store Connect 网页界面。值得一提的是:这个流程取决于工程代码是如何托管的。Xcode Cloud 要求使用 Git 来管理工程代码,且仅支持以下几种源代码管理提供商:

  • Bitbucket Cloud 和 Bitbucket Server
  • GitHub 和 GitHub 企业版
  • GitLab 和自建版本的 GitLab

Xcode Cloud 也支持 Git 大文件存储(Git LFS)。

整个授权过程将 Apple ID 与源代码管理提供商的账号相关联,并使用源代码管理提供商原生的授权方式与 Xcode Cloud 的安全加密,以确保源代码和用户信息处于保护之下。


在 App Store Connect 上完成授权后就可以回到 Xcode 本地继续之前的流程。


点击 Complete 按钮,Xcode Cloud 将会帮助开发者把应用信息注册至 App Store Connect。


终于到了最后一步!点击 Start Build 按钮,就可以开始第一次构建。

检阅 Xcode Cloud 构建报告


以 Fruta 这次构建为例:从该构建报告中,我们可以清晰明了地知道构建耗时以及构建环境的配置。点击右上角的 Rebuild 按钮也能帮助我们重新开始构建。



Actions 一列中,点击单个 action,可以看到该次 Action 的日志和相应的产物。这样的设计使得整个团队都能很方便地获取到当前 CI 的信息。


喔嚯,在 Build 1 中的「 在 macOS 上归档(Archive)」这一任务失败了!是因为无法在 macOS 上使用 UIKit 框架。我们可以把鼠标移至报错处,点击 ➡️ 小箭头,会直接跳转到对应出错的代码文件。


根据之前的报错提示,我们可以快速定位问题。


在 Git 上推送最新的代码之后,Xcode Cloud 自动触发了新的构建——Build 2。

Xcode Cloud 中的团队协作

当团队中的另一位成员打开 Xcode Cloud 时,他/她也可以看到之前构建失败的 Build 1 和构建成功的 Build 2。

Build 1 和 Build 2 均是名为 Default 的工作流的两次不同的构建。但 Default 这个名字取得不够具体,让我们在它上面点击鼠标右键并在弹出的菜单中选择 Edit Workflow...,来看看是如何简单地编辑一个 Xcode Cloud 工作流吧!


将工作流的名称从 Default 修改为 Releases 更加符合该工作流的意图。


点选左侧边栏的 Start Condition 就可以开始编辑该工作流的触发条件。
类似地,我们在 Custom Branches 一栏中点击 + 号,添加 release/v1 分支。


Releases 工作流怎么能少了测试任务呢!点击 Actions 右边的小加号,并在弹出的菜单中选择 Test 即可添加对应的测试任务。

点选左侧边栏的 Environment 就可以开始编辑该工作流的环境配置。其中有一个可勾选的 Clean 选项。一旦勾选,Xcode Cloud 会在每次开始构建时清空 DerivedData 缓存文件夹。更多详细内容,请参考 WWDC21 10268 探索 Xcode Cloud 工作流 [06:02] 处。

由此可见,借助于 Apple 云基础设施的力量,整个团队的协作效能将大大提高。

一点自己的思考

鱼儿游于水,却困于水

Xcode Cloud 在 Apple 生态圈中如鱼得水,然而现实是:公司中往往需要搭建一套通用 CI、CD 流程,把 iOS 与 Android 两端统一管理。在这种情况下,第一顺位可能是社区内容更完善的 Fastlane。Fastlane 对 iOS、Android 和跨平台方案(如 Flutter)均提供不同程度的支持,也能方便地配合 GitLab CI、Jenkins 等一起协同工作。

何…何时能开始使用它呢?

WWDC21 上一公布 Xcode Cloud,我就第一时间申请 beta 版测试资格,到现在过去大半个月了,也没拥有测试资格。利用搜索引擎,我也只发现 @PastePalApp 的作者有收到测试资格,他用简单的图文描述了下 Xcode Cloud 的体验(相关链接)。

Xcode Cloud 应该会是依托于 Apple 基础设施的云服务,回想起国区 iBooks Store、iTunes Store 的昙花一现,Xcode Cloud 会如期而至吗?

“那么,古尔丹,代价是什么呢?”

你以为你的项目会像 Fruta 那样点一点就能很顺利地接入 Xcode Cloud 了吗?你错啦!
接入 Xcode Cloud 的前置条件还不少:

  • 得使用自 Xcode 10 以来的新版构建系统
  • 得使用自动代码签名
  • 得使用符合条件的源代码管理服务
  • ……

更多详情,请参考 Xcode Cloud 的使用要求