在你对我的问题生气之前,我知道没有一种设置 Fastlane 的最佳方法,但我想更好地了解当你开始使用它时可以采取的不同方法。
我正在为一个项目设置 Fastlane。现在我只在我的本地机器上拥有它,但我想在 CI 环境中设置它(在我的情况下是 GitLab-CI,但我想它并不那么重要)。
披露,我不仅是设置 Fastlane 的新手,而且是自己设置 CI 的新手(不过我都使用过,)
在阅读了代码签名的文档(https://docs.fastlane.tools/codesigning/getting-started/)之后,我可以看到不同的替代方案,但我不确定它们在 CI 环境中的限制是什么。总而言之,在以下情况下签署构建的最佳实践是:提交到 Testflight、运行单元测试、提交到 AppStore 等等。
选项包括:
match
cert
和sigh
- Xcode 的代码设计功能
- 手动
到目前为止我的论文:
match
:- 设置和使用比其他选项更困难,但有一个指南:https ://codesigning.guide/
- 在我看来,它是最“专业”的选择。
- 我知道,对于现有项目,它会撤销当前证书。
- 只是第一次的意思吗?
- 如果 Fastlane 已经在使用新证书,那么撤销当前证书的陷阱是什么?我看到很多人试图阻止这种情况(例如this)。但是,现在只有我作为开发人员,我们没有任何 CI,所以我猜它不会对我产生太大影响。然而,这对于其他项目设置来说很方便。
- 对于此设置,您需要一个私有存储库来存储加密证书。
- 当我与我的 Android 同事讨论这个问题时,他对使用版本控制系统来存储证书感到非常惊讶。
- 究竟是什么原因?我的理解(也许我错了)是,通过这种方式,团队中的所有开发人员都可以受益于
match
拥有一个有效的开发配置文件。不确定发布到 Testflight/Appstore 的好处。
cert
和sigh
:要使用它,只需要在 build_app 之前添加几行代码:
get_certificates # cert get_provisioning_profile # sigh build_app
它在项目的根目录中下载证书和配置文件。
- 我想应该有一种方法可以指定将它们放在哪里而不是那里,也许?
- 之后我们应该忽略这些文件或清理存储库。我认为它们不应该提交到存储库。
- 它需要这个带有 app_identifier、apple_id 等的 Appfile,或者至少是我第一次设置 Fastlane 时 Fastlane 自动创建的那个。
Xcode 代码设计功能:
给 build_app 额外参数:
build_app(workspace: "Chordify.xcworkspace", scheme: "Chordify", export_xcargs: "-allowProvisioningUpdates")
这相当于在 Xcode 上自动管理签名(但在命令行上默认禁用)
- 这个设置对 CI 有意义吗?
- 我猜它还需要这个带有 app_identifier、apple_id 等的 Appfile。
手动:
- 我对此的唯一结论是手动设置并不容易。我不确定我做错了什么,但我无法使用这个设置构建(甚至从 Xcode),所以我放弃了这个选项。
Fastlane 有一组真实的例子,所以你可以看到他们的 Fastfile、Appfile、Gymfile、Metadata,......(https://github.com/fastlane/examples)。这很棒,但是,没有共同的模式,我看不出他们采用这种或那种方法的原因。
我对使用 Fastlane 进行代码签名的其他一般性问题:
我们需要带有苹果 ID 的 Appfile 吗?在这种情况下,为此目的创建一个特定的 ID 是有意义的,对吧?例如,开发人员角色?
安全性 vs 实用性 vs 易用性/设置。这些概念是否与一种方法紧密相关?
在什么情况下什么是最好的?(想想大团队和小团队;每个人都应该能够使用它而不是应该有一些安全限制;需要 CI 集成;...)
最后但并非最不重要的... CI 环境在代码签名方面是否有任何特殊考虑?
- 我曾被提示输入我正在使用的苹果 ID 的凭据。当然,在 CI 环境中,您无法提示输入任何凭据,因为它在某处的构建服务器上运行