使用 GitLab 和 fastlane 将 iOS 应用程序发布到 App Store

使用 GitLab 和 fastlane 将 iOS 应用程序发布到 App Store

GitLab 与 fastlane 如何收集、签署 iOS 应用程序并将其发布到 App Store。

我们最近有 关于如何快速构建和运行 Android 应用程序的帖子 与 GitLab 和 快车道。 在这里,我们将了解如何构建和运行 iOS 应用程序并将其发布到 TestFlight。 看看有多酷 我正在使用 GitLab Web IDE 在 iPad Pro 上进行更改,我在开发该应用程序的同一台 iPad Pro 上进行了程序集并获取了该应用程序测试版本的更新。

这里我们将采取 Swift 上的简单 iOS 应用,我和他一起录制了视频。

关于Apple Store配置的几句话

我们需要一个 App Store 应用程序、分发证书和一个配置文件来将所有内容连接在一起。

这里最困难的事情是在 App Store 中设置签名权。 我希望你能自己解决这个问题。 如果您是新手,我会为您指出正确的方向,但我们不会在这里谈论管理 Apple 证书的复杂性,而且它们在不断变化。 这篇文章将帮助您入门。

我的应用

您需要 App Store Connect 中有一个应用程序,以便您有一个用于配置的 ID .xcodebuild。 配置文件和应用程序 ID 结合了代码构建、定价和可用性以及用于向用户分发测试应用程序的 TestFlight 配置。 不要进行公开测试,如果您的团队规模较小、设置简单且不需要 Apple 的额外权限,则私人测试就足够了。

初始化配置文件

除了应用程序设置之外,您还需要在 Apple 开发人员控制台的“证书、标识符和配置文件”部分中创建 iOS 分发和开发密钥。 所有这些证书都可以组合成一个配置文件。

将进行身份验证的用户需要能够创建证书,否则步骤如下 证书和叹息 你会看到一个错误。

其他选项

除了这个简单的方法之外,还有其他方法来配置证书和配置文件。 因此,如果您的工作方式不同,您可能必须适应。 最重要的是你需要配置 .xcodebuild,它将指向必要的文件,并且钥匙串必须在构建计算机上可供运行运行程序的用户使用。 对于数字签名,我们使用 fastlane,如果出现问题或者您想了解更多信息,请查看他们的详细信息 有关数字签名的文档.

在这个例子中我使用的方法 证书和叹息,但对于实际使用来说,它可能更适合 匹配.

准备 GitLab 和 fastlane

准备 CI 运行器

收集完所有这些数据后,我们继续在 MacOS 设备上配置 GitLab 运行器。 不幸的是,您只能在 MacOS 上制作 iOS 应用程序。 但一切都会改变,如果您期望在该领域取得进展,请密切关注诸如此类的项目 xcbuild и 符号,以及我们的内部任务 gitlab-ce#57576.

设置跑步者非常简单。 跟随电流 在 macOS 上设置 GitLab Runner 的说明.

笔记。 运行者必须使用可执行程序 shell。 这是在 macOS 上构建 iOS 以直接作为用户而不是通过容器工作所必需的。 如果您正在使用 shell,构建和测试是作为运行者用户直接在构建主机上执行的。 它不如容器安全,所以最好浏览一下 安全文件所以你不会错过任何东西。

sudo curl --output /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-darwin-amd64
sudo chmod +x /usr/local/bin/gitlab-runner
cd ~
gitlab-runner install
gitlab-runner start

必须在此主机上配置 Apple Keychain,以便能够访问 Xcode 需要构建的密钥。 测试这一点的最简单方法是以将运行构建的用户身份登录并尝试手动构建它。 如果系统要求钥匙串访问,请选择始终允许 CI 工作。 可能值得进去观察前几个管道,以确保他们不再要求钥匙串。 麻烦的是,苹果并没有让我们轻松使用自动模式,但一旦你开始使用,一切都会好起来的。

快速通道初始化

要在项目中使用 fastlane,请运行 fastlane init。 只需关注 安装和运行 fastlane 的说明,特别是在关于 文件,因为我们需要通过自动化 CI 管道快速且可预测地启动。

在您的项目目录中,运行以下命令:

xcode-select --install
sudo gem install fastlane -NV
# Alternatively using Homebrew
# brew cask install fastlane
fastlane init

fastlane 将要求进行基本配置,然后在项目中创建一个包含三个文件的 fastlane 文件夹:

1. fastlane/Appfile

这里没有什么复杂的。 只需确保您的 Apple ID 和 App ID 正确即可。

app_identifier("com.vontrance.flappybird") # The bundle identifier of your app
apple_id("[email protected]") # Your Apple email address

2. fastlane/Fastfile

Fastfile 定义构建步骤。 我们使用了很多 fastlane 的内置功能,所以这里的一切也很清楚。 我们创建一行来接收证书、执行组装并将其上传到 TestFlight。 如有必要,您可以将此过程分为不同的任务。 所有这些操作(get_certificates, get_provisioning_profile, gym и upload_to_testflight) 已经包含在 fastlane 中。

活动 get_certificates и get_provisioning_profile 与签署方式相关 证书和叹息. 如果您正在使用 匹配 或者无论如何,做出改变。

default_platform(:ios)

platform :ios do
  desc "Build the application"
  lane :flappybuild do
    get_certificates
    get_provisioning_profile
    gym
    upload_to_testflight
  end
end

3. fastlane/Gymfile

这是一个可选文件,但我手动创建它是为了更改默认输出目录并将输出放置在当前文件夹中。 这简化了 CI。 如果有兴趣,请阅读 gym 及其参数 文件资料.

https://docs.fastlane.tools/actions/gym/

我们的 .gitlab-ci.yml

因此,我们有一个用于该项目的 CI 运行程序,并且准备好测试管道。 让我们看看我们有什么 .gitlab-ci.yml:

stages:
  - build

variables:
  LC_ALL: "en_US.UTF-8"
  LANG: "en_US.UTF-8"
  GIT_STRATEGY: clone

build:
  stage: build
  script:
    - bundle install
    - bundle exec fastlane flappybuild
  artifacts:
    paths:
    - ./FlappyBird.ipa

Всеотлично! 我们根据需要将fastlane的格式设置为UTF-8,使用策略 clone 与执行程序 shell,这样我们就可以为每个程序集提供一个干净的工作空间,只需调用 flappybuild 快车道,如上所示。 结果,我们在 TestFlight 中得到了最新程序集的程序集、签名和部署。

我们还获取工件并将其与程序集一起保存。 请注意格式 .ipa 是一个签名的 ARM 可执行文件,不在模拟器中运行。 如果您想要模拟器的输出,只需添加生成它的构建目标,然后将其包含在工件路径中。

其他环境变量

这里有几个环境变量可以使一切正常工作。

FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD и FASTLANE_SESSION

需要进行 fastlane 身份验证才能在 App Store 中进行身份验证并上传到 TestFlight。 为此,请为将在 CI 中使用的应用程序创建一个密码。 细节 这里.

如果您有双因素身份验证,请创建一个变量 FASTLANE_SESSION (那里有说明)。

FASTLANE_USER и FASTLANE_PASSWORD

证书和叹息 根据请求调用初始化配置文件和证书,您需要设置变量 FASTLANE_USER и FASTLANE_PASSWORD。 细节 这里。 如果您使用不同的签名方法,则不需要这样做。

总之

您可以看到这一切是如何运作的 在我的简单例子中.

我希望这对您有所帮助并激励您在 GitLab 项目中使用 iOS 构建。 这是另一个 CI 技巧 用于快速通道,以防万一。 您可能想使用 CI_BUILD_ID (对于增量构建) 自动增加版本.

fastlane 的另一个很酷的功能是 自动截图 对于 App Store,设置非常简单。

在评论中告诉我们您的体验,并分享您改进 GitLab iOS 应用程序开发的想法。

来源: habr.com

添加评论