如何将现有证书适配支持 fastlane match
背景
Xcode 的 Automatically manage signing
虽然方便,但是不适合多人项目,尤其是在 CI/CD 机器上部署自动化流程的场景。
iOS 签名机制复杂,各种密钥、证书、配置文件等概念一堆。在本地机器配置好一整套证书已经颇为不易,要是同事编译项目问你要证书密钥,各种导出安装,想想就头皮发麻。
Fastlane 一声炮响,送出了 match 这个大杀器。轻轻地在键盘敲下 fastlane match init
和 fastlane match development|adhoc|appstore
,就可以从无到有创建一套完成的证书配置,有新同事加入时也仅需要通过match
命令在本地安装好所需要的证书。你给我翻译翻译,什么他妈的是他妈的惊喜。
fastlane match 的文档推荐把已有的证书清空,清清爽爽地使用 match 创建证书。如果你不在乎已有项目的证书配置等,fastlane 提供了 Nuke 命令帮助你删除,不过用之前认真考虑下。
但是如果你跟我一样,担心废弃旧证书会给正在开发的队友造成不必要的麻烦,且本意是为了方便后续加入开发的队友安装证书,你可以按照接下来的教程,手动地将现有的证书迁移到 fastlane match 仓库。
步骤
创建 fastlane match repository
fastlane match 依赖 git 仓库同步,可以创建一个空仓库。
将后续步骤中得到的文件放置在仓库中,文件结构应该如下。
1 | . |
准备 certificate id
fastlane match profile 仓库中证书都是 certificate_id.cer 命名,所以需要准备证书的 id,后面简称 cert id。
Michał Laskowski 提到 Keychain 中看不了 certificate id,给了下面一个 ruby 脚本从 Apple Developer Portal 获取。
1 | require 'spaceship' |
其实,我观察到还有一种方式可以获取到 cert id:在 Apple Developer Portal 点开具体的 certificate,在浏览器 Url Path 上显式展示了 cert id。
形式同 https://developer.apple.com/account/resources/certificates/download/cert_id
。
加密证书
从 KeyChain 中导出想要迁移到 match 的证书,导出为 certificate.cer 和 certificate.p12 ,通过以下步骤进行加密。
1 | # 1. |
按照证书类型,将 cert_id.p12 和 cert_id.p12 放置在 match 仓库中。
准备 Profile
从 Apple Developer Portal 下载类型为 development | Ad hoc | App Store 的 Profiles,根据证书类型和项目的 bundle id 进行命名,格式如下。然后放置在 match 仓库中。
1 | Development_your.bundle.id.mobileprovision |
使用
至此, fastlane match 仓库准备完成了,推到远端,按照 match 文档配置你的 Fastfile,进行尝试吧。