GitLab 与 fastlane 如何收集、签署 iOS 应用程序并将其发布到 App Store。
我们最近有
这里我们将采取
关于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 应用程序。 但一切都会改变,如果您期望在该领域取得进展,请密切关注诸如此类的项目
设置跑步者非常简单。 跟随电流
笔记。 运行者必须使用可执行程序 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
。 只需关注
在您的项目目录中,运行以下命令:
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
Всеотлично! 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_BUILD_ID
(对于增量构建)
fastlane 的另一个很酷的功能是
在评论中告诉我们您的体验,并分享您改进 GitLab iOS 应用程序开发的想法。
来源: habr.com