学习fastlane match时看到了这一条命令:
删除开发者网站上所有的certificates和provisioning profiles。
fastlane match nuke development
要在全新的环境下使用 就有点麻烦了。
所以这篇文章是针对于现有的证书环境下。
先看下官网的fastlane:https://docs.fastlane.tools/actions/match/
然后针对私有证书库 我们创建个新的空的分支,这个分支是没有父级的分支。因为我们有多个开发者证书,多个项目,因此用分支的形式来存储不属于同一个团队的cert和p12。
cd到私有证书项目目录下
git checkout --orphan [新分支名称]
提示:Switched to a new branch '新分支名称'
现在我们执行下
git branch -a
发现没有看到我们的branch 因为没有东西提交上去。还没有第一次的提交记录 也就不会显示出来
确保是新的空的分支 执行下
git rm -rf .
然后按照fastlane正常流程下的文件截图 创建文件夹。
�
然后从开发者网站上下载现有的证书,将证书导入到钥匙中,并导出生成p12文件
从网上搜索的生成加密后的证书的代码: {}里面的是要替换的
openssl pkcs12 -nocerts -nodes -out key.pem -in {证书}.p12 #生成.pem文件
输入加密密码 记住了 后续需要填写密码 验证。
openssl aes-256-cbc -k {密码} -in key.pem -out {Cert id}.p12 -a #生成加密后的p12
openssl aes-256-cbc -k {密码} -in {证书}.cer -out {Cert id}.cer -a #生成加密的证书
Cert id是从下面的方法获取到的
将以下代码复制一下,创建findcert.rb文件替换掉注释部分。
require 'spaceship'
Spaceship.login('xxxxxx@xxx.com') #输入对应的苹果账号
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
然后执行ruby findcert.rb 输入苹果账号对应的密码
显示的是
Cert id: XXXXXXX, name: iOS Development, expires: 2019-05-07, type: Development
Cert id: YYYYYYY, name: iOS Distribution, expires: 2019-05-07, type: Production
...
我们需要的就是Cert id。
然后把加密后的证书及P12放入git仓库的certs目录对应的类型下面。
git add
git commit
git push
再执行
*fastlane match development/adhoc/appstore --git_branch [新分支名称]
*输入私有库的地址 -> 对应的账号 -> 对应的bundleid(需要提前在开发者网站上的App IDs申请好)
注意:如果中间有出现输入密码的话 就是你本地产生的cert和开发者网站上的证书不匹配,开发者网站上就会产生两个相同的证书,后续就有错误。请重新生成加密证书。
注意:如果成功后 可以执行
git pull origin [新分支名称]
就会看到有个mobileprovision下载到私有库中,说明成功了!
注意:别忘记写 --git_branch 不然会match master分支 就会报错,找不到对应的。
全部做完以后 在其他的安装了fastlane的电脑上
fastlane match --git_branch [新分支名称] --readonly
大功告成,就可以愉快的开发了。