
带有fastlane的GitLab如何在App Store上收集,签名和发布iOS应用。
我们最近发表了一篇关于如何使用GitLab和fastlane 快速构建和运行Android应用程序的文章 。 在这里,我们将看到如何构建和运行iOS应用程序并将其发布到TestFlight。 看看我使用GitLab Web IDE在iPad Pro上进行了多酷的更改,在我开发iPad Pro的同一iPad Pro上进行构建并获取应用程序测试版本的更新。
在这里,我们使用Swift上的一个简单iOS应用程序录制了视频。
关于Apple Store配置的几句话
我们将需要在App Store中使用一个应用程序,发行证书和一个初始化配置文件来将所有内容绑定在一起。
这里最困难的事情是在App Store中配置签名权限。 希望您能自己解决。 如果您是初学者,我会为您指明正确的方向,但在这里我们不会谈论管理Apple证书的复杂性,并且它们在不断变化。 这篇文章将帮助您入门。
我的申请
您需要在App Store Connect中使用一个应用程序,以便具有.xcodebuild
配置的ID。 概要文件和应用程序ID结合了代码汇编,定价和可用性以及用于将测试应用程序分发给用户的TestFlight配置。 不要进行公共测试,如果您是一个小团体,只需简单的设置并且不需要Apple的其他许可,就可以使用private。
初始化配置文件
除了应用程序设置外,您还需要在Apple Developer控制台的“证书,标识符和配置文件”部分中创建的iOS分发和开发密钥。 所有这些证书都可以组合在初始化配置文件中。
认证用户需要具有创建证书的能力,否则您将在cert和sigh步骤中看到一个错误。
其他选择
除了这种简单的方法外,还有其他方法可以配置证书和配置文件。 因此,如果您以其他方式工作,则可能必须重新构建。 最重要的是,您将需要.xcodebuild
配置,该配置将指向必需的文件,并且钥匙串应该在生成计算机上可供运行者使用其名称的用户使用。 我们使用fastlane进行数字签名,如果有问题或您想了解更多信息,请查看有关数字签名的详细文档 。
在此示例中,我使用cert和sigh方法 ,但对于实际应用程序, 匹配可能更好。
准备GitLab和Fastlane
准备CI Runner
收集了所有这些数据后,我们继续在MacOS设备上配置GitLab运行程序。 不幸的是,制作iOS应用程序仅在MacOS上才是真实的。 但是事情可能会改变,如果您正在等待这方面的进展,请密切注意xcbuild和isign等项目以及我们的内部任务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钥匙串,以访问Xcode需要构建的钥匙。 最简单的测试方法是以开始构建并尝试手动构建的用户身份登录。 如果系统要求访问钥匙串,请选择“始终允许CI运行”。 可能值得进入并观察第一对管道,以确保它们不再要求一堆密钥。 问题在于,Apple并不能使我们更轻松地使用自动模式,但是当您修复它时,一切都会好起来的。
快速通道初始化
要在项目中使用fastlane,请运行fastlane init
。 只需按照安装和启动fastlane的说明进行操作 ,尤其是在Gemfile部分中,因为我们需要通过自动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和应用程序ID是正确的即可。
app_identifier("com.vontrance.flappybird") # The bundle identifier of your app apple_id("your-email@your-domain.com") # Your Apple email address
2. fastlane/Fastfile
Fastfile
定义了构建步骤。 我们使用了许多内置的快速通道功能,因此这里的一切也很清楚。 创建一条接收证书的行,构建并将其加载到TestFlight中。 如有必要,您可以将此过程划分为不同的任务。 所有这些操作( get_certificates
, get_provisioning_profile
, gym
和upload_to_testflight
)已包含在fastlane中。
get_certificates
和get_provisioning_profile
与cert和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
fastlane即可,如上所示。 结果,我们在TestFlight中获得了最后一个程序集的程序集,签名和部署。
我们还获得了工件,并将其保存在装配中。 请注意, .ipa
格式是签名的ARM可执行文件,不会在模拟器中运行。 如果需要模拟器的输出,只需添加产生它的程序集目标,然后将其包含在工件的路径中即可。
其他环境变量
有几个环境变量可以使所有工作正常进行。
FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD
和FASTLANE_SESSION
要在App Store中进行身份验证并上传到TestFlight,需要对快速通道进行身份验证。 为此,为将在CI中使用的应用程序创建一个密码。 详细信息在这里 。
如果您具有两因素身份验证,请创建FASTLANE_SESSION
变量(此处的指令)。
FASTLANE_USER
和FASTLANE_PASSWORD
为了使cert和 FASTLANE_USER
按需调用初始化配置文件和证书,必须设置FASTLANE_USER
和FASTLANE_PASSWORD
变量。 详细信息在这里 。 如果使用其他签名方法,则没有必要。
总结
在我的简单示例中,您可以看到它们的工作方式。
希望这对您有所帮助,我启发您在GitLab项目中使用iOS版本。 为了以防万一,这里有一些关于快速通道的CI提示 。 您可能想使用CI_BUILD_ID
(用于增量构建) 自动增加版本 。
Fastlane的另一个很酷的功能是App Store的自动屏幕截图 ,非常容易设置。
在评论中分享您的经验,并分享改进GitLab for iOS应用开发的想法。