以下所有內(nèi)容均為個人觀點阿趁,轉(zhuǎn)載請注明出處<簡書--小蝸牛吱呀之悠悠 >伊履,謝謝刚陡!
使用fastlane打包過程,遇到了一直要求輸入密碼的問題培漏,即使密碼正確也還是報錯:Couldn't decrypt the repo, please make sure you enter the right password!為了解決這個打包的問題蚯姆,研究了一下fastlane的證書管理過程沧侥,記錄如下瞎疼。
fastlane的match功能,在團隊協(xié)作中起到不錯的證書管理效果割卖,能夠讓項目可以在整個團隊內(nèi)部打包通暢前酿,不需要過度關(guān)心證書和描述文件的事情。下面將簡單介紹一下我自己的實際應(yīng)用和遇到的問題究珊。
1薪者、 配置match環(huán)境
fastlane支持自動匹配證書,首先需要先準備一個倉庫用于存放證書剿涮。然后在fastlane目錄下執(zhí)行fastlane match init(如果沒有fastlane目錄言津,需要先在項目目錄執(zhí)行fastlane init)攻人,首先會提示讓你選擇存儲方式,然后再輸入倉庫地址悬槽,最后會生成一個 Matchfile 的配置文件怀吻。(這個環(huán)節(jié)根據(jù)命令提示往下走就行了,不過多贅述)接下來初婆,我們修改一下 Matchfile內(nèi)容:
函數(shù)說明:
git_url: 證書存儲的倉庫地址
git_branch: 倉庫分支蓬坡,不寫默認是master
storage_mode: 存儲方式
type: 默認的profile的類型,可以為: appstore, adhoc, enterprise , development
app_identifier: bundleId
readonly: true/false磅叛,true則優(yōu)先從倉庫獲取證書屑咳,沒獲取到則會去蘋果開發(fā)者中心創(chuàng)建;false則只去倉庫獲取
以上內(nèi)容也可以寫在fastlane文件里的sync_code_signing(matchi的別名)里面,效果是一樣的弊琴。當(dāng)然兆龙,這里面也可以配置蘋果賬號和密碼等信息,此處不贅述敲董,具體的根據(jù)需要翻閱文檔即可紫皇。修改完上述內(nèi)容后,我們可以通過終端執(zhí)行命令來觸發(fā):
fastlane match enterprise
也可以通過bundle來觸發(fā)action間接觸發(fā):
bundle exec fastlane ios enterprise
2腋寨、如何配置證書倉庫
將我們倉庫的名字命名為:certificates 聪铺,里面的目錄結(jié)構(gòu)為:
在這兩個文件夾中,可以配置需要的環(huán)境證書萄窜,例如:
文件夾和文件的命名具體規(guī)則如下:
-certs
-enterprise
-#{cert_id}.cer
-#{cert_id}.p12
-development
-#{cert_id}.cer
-#{cert_id}.p12
-distribution
-#{cert_id}.cer
-#{cert_id}.p12
-profiles
-enterprise
-InHouse_#{bundleID}.mobileprovision
-appstore
-AppStore_#{bundleID}.mobileprovision
-adhoc
-AdHoc_#{bundleID}.mobileprovision
-development
-Development_#{bundleID}.mobileprovision
注意: 文件夾和文件的名字铃剔,層級結(jié)構(gòu)必須是上述規(guī)則,否則match找不到對應(yīng)證書脂倦。其中番宁,certs證書需要放置原始的下載的.cer證書和電腦導(dǎo)出的p12證書,這樣才可以保證其他開發(fā)人員能夠正常打包赖阻。
注意,這一步非常重要:配置完倉庫目錄后踱蠢,需要將對應(yīng)的證書用openssl加密火欧,然后才能上傳到遠端倉庫,否則茎截,你將遇到下圖的情況苇侵,無論你輸入什么密碼,都無法通過校驗企锌。原因是:fastlane在管理遠程倉庫的證書時榆浓,會先將倉庫的對應(yīng)分支拉到本地臨時文件夾中,然后找到你打包項目的證書和描述文件撕攒,再對文件進行openssl解密(fastlane認為每個證書都是經(jīng)過加密的陡鹃,所以需要解密)烘浦,而你如果沒有事先加密,那自然無法通過校驗萍鲸。
openssl命令:
#加密
openssl aes-256-cbc -k "<password>" -in "<加密前證書路徑>" -out "<加密后證書路徑>" -a -e
#解密
openssl aes-256-cbc -k "<password>" -in "<解密前證書路徑>" -out "<解密后證書路徑>" -a -d
將加密后的證書放入對應(yīng)文件夾后闷叉,需要對certs文件夾下的證書修改文件名,格式:cer_id.cer脊阴。然而握侧,證書的詳情中并不能看到證書的id,需要使用ruby腳本來查找嘿期。
3品擎、使用ruby腳本查看證書id
首先需要安裝ruby環(huán)境,此處不闡述备徐,自行谷歌孽查;其次,需要新建一個ruby文件
touch ruby.rb
然后將下面代碼復(fù)制粘貼到ruby腳本文件中坦喘,并輸入對應(yīng)蘋果賬號:
require 'spaceship'
Spaceship.login('***') #輸入對應(yīng)的蘋果賬號
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
然后cd到該文件所在目錄盲再,終端執(zhí)行命令:
ruby ruby.rb
此時會打印出所有證書的信息來(如果你的蘋果賬號關(guān)聯(lián)多個開發(fā)者賬號,需要先選擇一下你想要查看的開發(fā)者賬號)瓣铣,找到對應(yīng)的證書答朋,并將倉庫里的證書文件名替換成id,podfile文件名修改為上文所述InHouse_bundleId的格式棠笑。
5梦碗、測試match
將準備好的證書上傳git,并確保matchfile文件中的信息正確后蓖救,在終端執(zhí)行:
fastlane match
此時會讓輸入證書openssl加密時設(shè)置的密碼(如果忘記了洪规,可以參考下文步驟7重新找回或重置。)循捺,輸入完成后斩例,會自動保存到鑰匙串中,查看方式下文介紹从橘。密碼校驗通過后念赶,如果你沒有在matchfile文件中提前配置好開發(fā)者賬號,此處需要輸入兩次開發(fā)者賬號恰力,如果通過叉谜,就算是成功了,再結(jié)合fastlane的打包命令使用就可以了踩萎。
6停局、證書更新
如果證書過期,或者證書被重置了,或者新增了環(huán)境需要增加證書董栽,就涉及到倉庫證書的更新了码倦。
我們拿到相對應(yīng)證書后,將證書加密后(每一個證書和profile都需要加密)裆泳,修改文件名為證書id叹洲,prodfile文件名修改為bundleId保持倉庫目錄不變,并上傳倉庫即可工禾。
7运提、忘記openssl加密的密碼怎么辦?
方法一:忘記密碼后闻葵,可以在你自己的鑰匙串中找到民泵,如果沒有找到,可以讓其他使用腳本打過包的同事在鑰匙串中查看一下告訴你槽畔,步驟如下:
注意:找到文件名和你bundleid一樣的那個才是
方法二: 重置密碼
1栈妆、首先,將倉庫內(nèi)容拷貝一份到本地厢钧,然后清空并上傳倉庫鳞尔。
2、在終端執(zhí)行fastlane match命令早直,會要求你輸入密碼寥假,這時候把新密碼輸入即可。
3霞扬、去蘋果開發(fā)者中心重新下載證書糕韧,并重新加密(密碼需要和你第2步設(shè)置的一致),然后按照規(guī)則修改名字和放置文件路徑喻圃。
4萤彩、重新上傳到倉庫,并重新執(zhí)行fastlane match即可斧拍。