分类
iOS开发 MacOS 技术

用 Xcode cloud 解决 Xcode-beta 无法提交 App 的问题

前两天苹果的 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 的页面,也可以用页面右上角的 “启动构建版本” 按钮来手动构建。

  1. 这样直接设置的 Xcode cloud 工作流,直接 build 往往会失败。因为我们往往会用 CocoaPods 或者 Carthage 来管理我们依赖的第三方库。直接从 Github 拉出来的代码不包含这些库的代码,就无法正常编译。我自己用的是 CocoaPods 下面就介绍一下。

这需要自定义的 build 脚本,不过不用担心,非常简单,如果你熟悉其他的 CI 系统就更容易理解。

Xcode Cloud 的构建过程如下图:

  1. 创建临时环境
  2. Clone 代码
  3. 执行 Post-Clone 脚本(自定义的在 Clone后做处理的脚本)
  4. 解决依赖关系
  5. 执行 Xcodebuild 之前的前置脚本
  6. 执行 xcodebuild 命令
  7. 执行 Xcodebuild 之前的后置脚本
  8. 保存结果

图中蓝色部分,都是系统自动执行的。而3,5,6部分分别对应三个自定义脚本。

ci_post_clone.sh 文件处理 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 脚本即可。

参考文献:

打赏

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据