前两天苹果的 WWDC 2024结束,每次苹果召开 WWDC 都是苹果平台开发者的节日。听完 Keynote,大家往往就想最先下载测试版本的操作系统和 Xcode 来尝鲜。
但是这里也有一个矛盾,一般来说从测试版到正式版要1个多月的时间。而测试版的 Xcode-beta 是无法提交 App。也就是尝鲜的话,你就有一个多月没办法提交你的 App。
解决的方法,一般是如果自己有多台 mac,其中一台不升级,专门留着用来提交 App。还有一种就是安装多系统。
但是前几年,苹果推出了 Xcode cloud,我就想是不是可以利用 Xcode cloud来解决这个问题呢?果然解决了。
大概做法如下:
首先,打开 Xcode 打开你的代码工程文件。然后按键盘 ⌘+9 。这会打开侧边栏的 report 页面,如下图,选择 Cloud。即可看到常见 Xcode cloud的向导。
点击 Get Started… 按钮,然后按照向导一步步执行即可。
过程包括选择 product,授权 Xcode 访问你的 Github 代码库等步骤。
完成后,Cloud 页面如图:
主要显示的是,Build的历史记录,对勾和叉,代表了成功的构建和失败的构建,这很一目了然。
默认的设置是每次代码提交到 Github 就会自动 build 一次。熟悉其他 CI 系统的人应该很好上手。也可以在 Xcode 当前界面右侧的详情页,右上角点击 Start Build 手动 Build。
在 App Store Connect 网站的 App 页面也可以找到 Xcode cloud 的页面,也可以用页面右上角的 “启动构建版本” 按钮来手动构建。
- 这样直接设置的 Xcode cloud 工作流,直接 build 往往会失败。因为我们往往会用 CocoaPods 或者 Carthage 来管理我们依赖的第三方库。直接从 Github 拉出来的代码不包含这些库的代码,就无法正常编译。我自己用的是 CocoaPods 下面就介绍一下。
这需要自定义的 build 脚本,不过不用担心,非常简单,如果你熟悉其他的 CI 系统就更容易理解。
Xcode Cloud 的构建过程如下图:
- 创建临时环境
- Clone 代码
- 执行 Post-Clone 脚本(自定义的在 Clone后做处理的脚本)
- 解决依赖关系
- 执行 Xcodebuild 之前的前置脚本
- 执行 xcodebuild 命令
- 执行 Xcodebuild 之前的后置脚本
- 保存结果
图中蓝色部分,都是系统自动执行的。而3,5,6部分分别对应三个自定义脚本。
ci
处理 clone 代码后续的处理。ci_pre_xcodebuild.sh 文件处理执行 Xcodebuild 之前的前置工作。ci_post_xcodebuild.sh 文件处理执行 Xcodebuild 之后的后续操作。
在你的代码目录下创建一个 ci_scripts 目录,在里面创建这三个文件就可以。加入 CocoaPods 的第三方依赖处理代码,我觉得可以放在 ci_post_clone.sh 里,也可以放在 ci_pre_xcodebuild.sh。区别不大,我做的时候,放在 ci_pre_xcodebuild.sh 里了。
我找到的一个建议 CocoaPods 处理代码为:
#!/bin/sh
gem install cocoapods
pod install
经测试失败,因为 xcode build 环境是 gem 2.6 而且不可直接安装新的库。
我经过测试,自己写的处理代码为:
#!/bin/bash
\curl -sSL https://get.rvm.io | bash -s stable
source /Users/local/.rvm/scripts/rvm
rvm install 2.7.2
rvm use 2.7.2 --default
gem install cocoapods
pod install
经测试,完全没问题。
手动给脚本加上执行权限 chmod +x ci_pre_xcodebuild.sh,然后提交到 Git 以后,就OK了。
最后一个操作是在 App Store Connect 的你的 App 的 Xcode Cloud 页面选择“管理工作流程”:
然后点击你的工作流程,我这里是Default(默认的名称)。
在详情页面里,找到操作:
分发准备里面,选择 App Store Connect。
默认是无,就是只做 build 不提交到 App Store,把这个改好后,每次 build 成功,就会自动把 build 好的 App 提交到 App Store,然后你选择是 TestFlight,还是正式提交了。
昨天我的英语轻松读的最新版本 1.21,使用 Xcode-beta 开发,使用 Xcode cloud build 的版本已经提交到了 App Store,也过审了。
这个版本,加入了调整文章行间距的功能。
最后,如果 build 失败,该怎么调试呢?
你可以在 Xcode 侧栏的 report 页面,选择失败的 Build,然后在右边详情页面,选择 log。然后查看具体的 log,根据 log 的提示去修改你的 build 脚本即可。
参考文献: