關(guān)于fastlane已存在的證書復(fù)用問題

前言

iOS開發(fā)在團(tuán)隊(duì)項(xiàng)目協(xié)作中,面臨著許許多的挑戰(zhàn),除了被大家詬病的nib文件和故事板以外,還有就是今天要說的證書管理問題,相信做過iOS開發(fā)的用戶對fastlane已經(jīng)不陌生了,它提供了很多有用的功能來幫助開發(fā)者從繁瑣的重復(fù)性勞動(dòng)中解脫出來,這里列舉出一些:


fastlane.png
  • deliver: 上傳截圖, 元數(shù)據(jù), app應(yīng)用程序到App Store
  • supply: 上傳Android app應(yīng)用程序和元數(shù)據(jù)到Google Play
  • snapshot: 自動(dòng)捕獲iOS app應(yīng)用程序本地截圖
  • screengrab: 自動(dòng)捕獲Android app應(yīng)用程序本地截圖
  • frameit: 快速截屏并將截屏放入設(shè)備中
  • pem: 自動(dòng)生成和更新推送通知配置文件
  • sigh: 開發(fā)證書和描述文件下載
  • produce: 使用命令行在iTunes Connect上創(chuàng)建新的app和開發(fā)入口
  • cert: 自動(dòng)創(chuàng)建和配置iOS代碼簽名證書
  • spaceship: Ruby 庫訪問 Apple開發(fā)者中心和 iTunes Connect
  • pilot: 最好的方式管理你的TestFlight 測試人員和從終端構(gòu)建
  • boarding: 最簡單的方式邀請你的TestFlight beta測試人員
  • gym: iOS app打包簽名自動(dòng)化工具
  • match: 使用Git同步你的團(tuán)隊(duì)證書和配置文件
  • scan: 最簡單方式測試你的 iOS 和 Mac apps

今天說的其實(shí)是match,我們知道,蘋果公司在個(gè)人開發(fā)者賬號上面對于證書的生成是有嚴(yán)格的數(shù)量限制的,developmentdistribution證書類型只能生成2個(gè),所以如果按照fastlane每次build不同的target或者不同的Bundle ID的話,它都會(huì)重新去生成一個(gè)新的證書并以此生成對應(yīng)的描述文件,這樣以來,我們也只能最多同時(shí)用該開發(fā)者賬號簽名兩個(gè)App安裝在真機(jī)上,想用第三個(gè)就必須revoke掉以前生成的證書,當(dāng)然了,一旦把證書revoke掉了,這也就意味著我們用該證書簽名的App也不能在真機(jī)上面使用了。所以就得考慮一下,該如果復(fù)用現(xiàn)有證書。

1. 拿到你想要復(fù)用證書的ID

關(guān)于這個(gè)證書ID,從鑰匙串和openssl工具庫中沒有找到方法來取到,但是可以通過spaceship這個(gè)庫來實(shí)現(xiàn),下面是相關(guān)腳本:

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

執(zhí)行上面代碼,會(huì)輸出所有證書的相應(yīng)信息,你可以從中找到你想復(fù)用的那個(gè)證書的ID。

2. 創(chuàng)建遠(yuǎn)程倉庫來保存證書。

建立一個(gè)遠(yuǎn)程倉庫,并在該目錄下創(chuàng)建certs/distributioncerts/development目錄,分別存放生產(chǎn)和開發(fā)環(huán)境下的相關(guān)證書文件。

3. 通過鑰匙串導(dǎo)出你想要復(fù)用的那個(gè)證書

導(dǎo)出對應(yīng)的cer文件和p12文件。

4. 執(zhí)行下面命令,導(dǎo)出私鑰文件

openssl pkcs12 -nocerts -nodes -out key.pem -in certificate.p12

5. 生成最后需要的證書

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

這里的cert_id是上面我們保存的證書id,其中執(zhí)行完上述步驟后,就生成了fastlane match想要的證書,當(dāng)執(zhí)行fastlane match development/adhoc/appstore命令后,match就不會(huì)在Apple Development Center重新生成證書了,而是用現(xiàn)有的。
將證書分別放到對應(yīng)的git倉庫目錄中,提交并推送到遠(yuǎn)程倉庫。

6. 在開發(fā)者網(wǎng)站上面生成App ID

fastlane produce -u <your@apple.id> -a <your_app_bundle_id> --skip_itc

如果你的App需要在ITC(iTunes Connect)中創(chuàng)建,則移除--skip_itc選項(xiàng)。

7. 生成證書對應(yīng)的描述文件

fastlane match <type> 

其中type有四種:development/adhoc/distribution/appstore
如果執(zhí)行過程中,出現(xiàn)輸入Git Repo密碼后,密碼錯(cuò)誤導(dǎo)致的不能解密repo,可以嘗試著用fastlane match change_password來重置密碼。如果修改密碼后,發(fā)現(xiàn)還是不行的話,可以在與distribution同級目錄下創(chuàng)建一個(gè)txt文件:"match_version.txt",內(nèi)容為fastlane版本號即可,再重新執(zhí)行。

[22:57:23]: Cloning remote git repo...
[22:57:28]: Migrating to new match...
[22:57:28]: Enter the passphrase that should be used to encrypt/decrypt your certificates
[22:57:28]: This passphrase is specific per repository and will be stored in your local keychain
[22:57:28]: Make sure to remember the password, as you'll need it when you run match on a different machine
Passphrase for Git Repo: ******
Type passphrase again: ******
[22:57:34]: ?? Successfully encrypted certificates repo
[22:57:34]: Cloning remote git repo...
[22:57:39]: Couldn't decrypt the repo, please make sure you enter the right password!
version: 256
class: "inet"
::::
::::

關(guān)于注冊新設(shè)備

在這之前我們都是通過開發(fā)者中心來添加和管理更新設(shè)備以及描述文件,有了fastlane提供的match命令則可以幫助我們做這些事情。
注冊新設(shè)備
我們可以通過添加action的方式更新Fastfile文件:

  1. 直接添加設(shè)備
register_devices(
  devices: {
    "Luka iPhone 6" => "1234567890123456789012345678901234567890",
    "Felix iPad Air 2" => "abcdefghijklmnopqrstvuwxyzabcdefghijklmn"
  }
) # Simply provide a list of devices as a Hash
  1. 通過文件添加設(shè)備
register_devices(
  devices_file: "./devices.txt"
) # Alternatively provide a standard UDID export .txt file, see the Apple Sample (http://devimages.apple.com/downloads/devices/Multiple-Upload-Samples.zip)

文件格式參考demo:http://devimages.apple.com/downloads/devices/Multiple-Upload-Samples.zip

你也可以添加參數(shù):

register_devices(
  devices_file: "./devices.txt", # You must pass in either `devices_file` or `devices`.
  team_id: "XXXXXXXXXX",         # Optional, if you"re a member of multiple teams, then you need to pass the team ID here.
  username: "luka@goonbee.com"   # Optional, lets you override the Apple Member Center username.
)

更新描述文件

match(type: "adhoc", force_for_new_devices: true)

注意這里的type,對應(yīng)我們前面提到的幾種類型
除此之外,我們也可以通過命令行的方式來更新描述文件:

fastlane match adhoc --force_for_new_devices

這樣以來,fastlane會(huì)重新更新描述文件并提交到我們的證書倉庫。
后面我們需要做的就是,只需重新打包,然后將包通過Airport安裝到新的設(shè)備上就可以了,經(jīng)測試以前用該描述文件打的包也可以安裝到新設(shè)備上面去。

關(guān)于Apple ID開啟雙重驗(yàn)證

如果開啟雙重驗(yàn)證,默認(rèn)蘋果會(huì)在新設(shè)備登錄時(shí),需要手動(dòng)輸入驗(yàn)證碼,這時(shí)候如果是在CI上面構(gòu)建,就會(huì)帶來問題,此時(shí)我們可以通過以下方式解決:

  1. 訪問Apple ID網(wǎng)站,找到 安全 - App 專用密碼,生成一個(gè)專用密碼
  2. 然后在構(gòu)建服務(wù)器上面配置環(huán)境變量: vim ~/.bash_profile
export FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD=<YOUR_PASSWORD>
  1. 執(zhí)行 fastlane spaceauth -u <YOUR_APPLE_ID> 按提示獲取session信息
  2. 復(fù)制session信息(很長一大段) 配置環(huán)境變量: vim ~/.bash_profile
export FASTLANE_SESSION=‘YOUR SESSION’

參考

  1. Simplify your life with fastlane match
  2. register_devices - fastlane docs
  3. match - fastlane docs
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • fastlane運(yùn)行所需要的環(huán)境: OS X 10.9以上 Ruby 2.0 以上 Xcode 擁有一個(gè)開發(fā)者賬號...
    阿姣_0405閱讀 3,258評論 0 4
  • 引言關(guān)于開發(fā)證書配置(Certificates & Identifiers & Provisioning Prof...
    molake閱讀 48,887評論 7 62
  • 最近使用fastlane,每當(dāng)新建一個(gè)project/target的時(shí)候,當(dāng)執(zhí)行 match developmen...
    jacinzhang閱讀 2,797評論 2 6
  • 月光是個(gè)大舞臺 孩子們靈活的小手 變化出千奇百怪的影像 上映著奇妙的戲劇 月光是一簾輕紗 孩子們的剪刀手 裁出月光...
    深淺慧閱讀 467評論 0 0
  • http://m.acfun.tv/v/?ac=3331270 如果全世界停止轉(zhuǎn)動(dòng),只有你是自由的,你會(huì)選擇這樣的...
    濮水之中閱讀 445評論 0 0

友情鏈接更多精彩內(nèi)容