最近使用fastlane,每当新建一个project/target的时候,当执行 match development/adhoc/appstore
时候,不同的bundle id对应的target,每次都会去重新生成certificate,注意不是Provision Profile,这就很麻烦了,因为苹果的个人开发者账号,certificate生成是有数量限制的。 development
和 distribution
证书类型貌似都是只能生成2个。所以如果按照fastlane那种做法的话,我们只能给两个app装到真机里面玩玩。这就怕不能愉快的玩下去了,所以我们就得考虑如何复用已存在certificate,下面就是介绍如何复用。
合并已有证书到fastlane match
首先一个很重要的概念就是cert id, 拿到已有证书的cert id并告诉fastlane, fastlane知道了就不会去重新生成certificate,只会去生成Progision Porfile
。
下面一段ruby
代码就是获取cert id:
require 'spaceship'
Spaceship.login('your@apple.id')
Spaceship.select_team
Spaceship.certificate.all.each do |cert|
cert_type = Spaceship::Portal::Certificate::CERTIFICATE_TYPE_IDS[cert.type_display_id].to_s.split("::")[-1]
puts "Cert id: #{cert.id}, name: #{cert.name}, expires: #{cert.expires.strftime("%Y-%m-%d")}, type: #{cert_type}"
end
执行上述代码,会输出相应的证书信息,如果该账号下有多个certificat,会全部输出,包括development
和distribution
保持好你需要的复用的证书cert id。
创建一个远程git仓库,保存你的certificates和provisioning profiles
- iOS/macOS证书的工作主要就是围绕certificates和provisioning profiles这两个文件进行的。
- 仓库目录下创建
certs/distribution
和certs/development
目录,分别存放生成和开发环境下的相关证书文件
生成符合fastlane match的证书
钥匙串中导出已有证书的certificate.cer和certificate.p12文件
run
openssl pkcs12 -nocerts -nodes -out key.pem -in certificate.p12
.
It will extract the private key to a key.pem file.-
encrypt the files with
openssl aes-256-cbc -k your_password -in key.pem -out cert_id.p12 -a openssl aes-256-cbc -k your_password -in certificate.cer -out cert_id.cer -a
执行完上述步骤后,就生成了fastlane match
想要的certificate,当执行match development/adhoc/appstore
命令后,match
就不会去Apple Development Center重新生成certificate了,而是拿现有的了,然后分别丢进对应git仓库目录中,提交、推送到远程。