对现有证书使用快速通道匹配,而无需吊销它们

Fastlane匹配极大地改善了代码签名,即使对于小型团队而言,其唯一的问题是默认情况下它不适用于现有证书,这对试图在现有项目上使用它的任何人来说都是一个停滞点。 但是,有一种欺骗快速通道匹配的方法来使用您现有的证书。

match是https://codesigning.guide概念的实现。 match创建所有必需的证书和配置文件,并将它们存储在单独的git存储库中。 每个有权访问该存储库的团队成员都可以使用这些凭据进行代码签名。 匹配还会自动修复损坏和过期的凭据。 这是在团队之间共享签名凭证的最简单方法

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

让我们开始吧,首先,您需要设置fastlane和fastlane匹配,为了不重复文档,只需按照那里的设置步骤进行操作:

https://docs.fastlane.tools/getting-started/ios/setup/

https://docs.fastlane.tools/actions/match/#setup

重要提示:我建议您花些时间阅读整个文档,但在匹配指南上,请仅遵循设置步骤! 不要执行其余步骤,因为这会导致Fastlane为您的应用生成新的证书/配置文件。

现在您有了匹配设置,但是证书为零,并且由于它将证书存储在加密的存储库中,因此您不能简单地将现有证书添加到其中, 它将无法正常工作。

正确的方法是使用fastlane文档中的隐藏功能,该功能使您可以解密匹配存储库并对其进行更改。

在此之前,请确保已将证书和私钥导出到计算机上的某个位置。 为此,请打开“钥匙串”应用程序并转到“ Certificates类别。 选择您要使用的证书(该证书必须是您的应用程序正在使用的证书),然后通过打开上下文菜单并选择“导出:…”来导出该证书:

选择“证书(.cer)”作为“ 文件格式” ,然后保存在您记得的地方。

现在对“ 导入的私钥 ”执行相同的操作,这次选择“个人信息交换(.p12)”作为“文件格式”,然后保存。 不要在导出的密钥上放置密码,否则match将无法导入它。

下一步是验证该证书的ID,此信息不容易看到,因此我们需要使用Spaceship来抓取它,它是一个由fastlane直接创建的Ruby库。 由于您已经设置了快速通道,因此您已经可以访问它。

通过在终端上运行irb启动交互式红宝石外壳。

输入require 'spaceship'并按回车键,这将在当前shell会话中导入库。 现在运行以下命令在Apple Portal上登录,如果正确设置了快速通道,它将检查您的凭据并登录。

 飞船登录 

现在有必要获取您帐户中可用证书的列表,有两种方法可以使用

 太空飞船证书 

基本上打印所有证书,或者使用限制性更强的调用

 宇宙飞船证书发展 

 太空飞船证书生产 

取决于您要使用的证书类型。

该列表将包含每个证书的所有属性,您需要查找刚刚保存的证书的详细信息,查找名称和创建/到期日期。 找到要查找的密钥后,请重命名先前保存的密钥和证书,以将该ID作为名称。

注意: Fastlane更改了下一步需要使用的一些方法,因此,在必要时,我将明确地将命令分为两部分,一个用于Fastlane版本≤2.105.2,另一个用于较新版本。 有关更改的更多详细信息,请参见https://github.com/fastlane/fastlane/issues/13521。

打开加密的存储库

在交互式外壳上运行以下命令,以设置一些稍后将使用的变量:

版本≤2.105.2

  irb(main):001:0>需要“匹配” 
irb(main):002:0> git_url ='git@github.com:path-to / the-encrypted-certs-repo.git'
=> “ git@github.com:path-to / the-encrypted-certs-repo.git” irb(main):003:0> shallow_clone = false
=>错误
irb(main):004:0> manual_password ='要解密的密码
=> “密码来解密存储库”

较新的版本

  irb(main):001:0>需要“匹配” 
irb(main):002:0> git_url ='git@github.com:path-to / the-encrypted-certs-repo.git'
=> “ git@github.com:path-to / the-encrypted-certs-repo.git”
irb(main):003:0>浅克隆=假
=>错误
irb(main):004:0> ENV [“ MATCH_PASSWORD”] ='要解密的密码
=> “密码来解密存储库”
irb(main):005:0> branch ='master'
=> “大师”

现在,我们需要克隆存储库并对其解密,我们可以使用以下命令来做到这一点(请注意,结果已分配给变量,以便稍后在需要重新加密存储库时可以重复使用):

版本≤2.105.2

 irb(main):005:0> workspace = Match::GitHelper.clone(git_url, shallow_clone, manual_password: manual_password) 
[21:17:30]: Cloning remote git repo...
[21:17:31]: 🔓 Successfully decrypted certificates repo
=> "/var/folders/5s/5cgmqxkx4fx6bllwgp1y5dlh000gp/T/d2018-0411-3701-148akjh"

较新的版本

  irb(main):006:0> storage = Match :: Storage.for_mode('git',{git_url:git_url,浅层克隆:浅层克隆,git_branch:分支,clone_branch_direct:false}) 
irb(main):007:0> storage.download
irb(main):008:0>加密= Match :: Encryption.for_storage_mode('git',{git_url:git_url,working_directory:storage.working_directory})
irb(main):009:0> encryption.decrypt_files
[21:17:42]:🔓成功解密了证书回购文件irb(main):010:0> storage.working_directory
=> “ / var / folders / ql / 4rgq9x7j51n_971xb332w9lc0000gn / T / d20181105–65220–1oalh6v”

查看它如何在/var/folders开头的路径上克隆存储库,打开该文件夹。

现在,根据您的证书类型,您将需要创建相应的文件夹层次结构。

如果是发行证书,则为certs/distribution ;如果是开发certs/development ,则为certs/development 。 将.cer.p12文件放入其中。

您可能需要对配置文件进行相同的操作,否则匹配将失败,因为它无法在存储库中找到它们,这是相同的过程,但是您可以从Apple Developers Portal下载它们,而不是从钥匙串导入配置文件:

您需要保存配置文件的路径取决于配置文件的类型。 但基本上是以下之一

个人资料/adhoc/AdHoc_.mobileprovision

配置文件/appstore/AppStore_.mobileprovision

个人资料/开发/开发_ .mobileprovision

之后,让我们加密文件并将它们提交到仓库:

版本≤2.105.2

 irb(main):006:0> Match::GitHelper.commit_changes(workspace, "add certificate, private key and provisioning profiles", git_url) 

较新的版本

  irb(main):010:0> encryption.encrypt_files 
irb(main):011:0> files_to_commit = Dir [File.join(storage.working_directory,“ **”,“ *。{cer,p12,mobileprovision}”)]]
irb(main):012:0> storage.save_changes!(files_to_commit:files_to_commit)

这就对了! 现在,您应该能够运行快速通道匹配来获取该证书和配置文件:

  fastlane比赛分布-只读 

请注意--readonly ,始终传递此标志很有趣,因此,如果前面的步骤出了问题,则无法进行匹配以创建新的证书/配置文件!