前言
match是一種全新的證書和配置文件管理工具,它會把所有需要用到的證書傳到git私有庫上,任何需要配置的機器直接用match同步證書。團隊所有成員共享一份代碼簽名,以減免不必要的證書創(chuàng)建。
本文主要介紹
match
的使用方法,另外順帶講一下另外兩種證書配置方法cert
和sigh
。如果你還對Fastlane
不了解,請先閱讀我上一篇文章《iOS開發(fā)fastlane從入門到入土(一):自動打包》
一、CredentialsManager
證書配置之前,必須先講一下CredentialsManager
憑據管理工具。
這個工具主要是提供登錄iTunes connect 的憑證,一般在fastlane初始化的時候,如果選擇打包到appstore,會提示你添加登錄憑證。
命令行方式
- 添加Credential
fastlane fastlane-credentials add --username felix@krausefx.com
Password: *********
Credential felix@krausefx.com:********* added to keychain.
- 移除Credential
fastlane fastlane-credentials remove --username felix@krausefx.com
password has been deleted.
使用環(huán)境變量
以上方式會將felix@krausefx.com自動存入“鑰匙鏈”,如果你不想存入“鑰匙鏈”可以通過設置環(huán)境變量”FASTLANE_DONT_STORE_PASSWORD”為”1”
在.env
文件中加入:
#iTunes connect登錄用戶名
FASTLANE_USER = "felix@krausefx.com"
#iTunes connect登錄密碼
FASTLANE_PASSWORD = "xxxxxxx"
#不存入“鑰匙鏈”
FASTLANE_DONT_STORE_PASSWORD = "1"
更多詳情見github
二、Spaceship
spaceship
暴露了 Apple Developer Center 和 iTunes Connect API。這些快速和強大的API已經是 fastlane 的一部分,能夠實現更多 fastlane 的高級功能。腳本化 Developer Center 的工作流從未如此簡單。
spaceship
已經是fastlane
的一部分了,很多 fastlane tools 已經使用了 spaceship
,比如 sigh
, cert
, produce
, pilot
和 boarding
。
使用
在命令行中嘗試運行 fastlane spaceship
,然后就會自動啟動 spaceship playground
。這要求你使用 sudo gem install pry
安裝 pry
。pry
不會默認安裝,因為大部分的fastlane用戶不需要 spaceship playground
。你可以在 Gemfile
文件里添加 pry
依賴。
兩步驗證[1]
如果你的蘋果賬戶開啟了兩步驗證,將會自動詢問你使用手機進行驗證。結果會話將會存儲在 ~/.spaceship/[email]/cookie
中。這個會話在一個月內是有效的,當然沒有辦法真的等到一個月后來測試。
使用以下命令生成一個web session:
fastlane spaceauth -u user@example.org
這個將會給你授權,并提供一個會話字符串:
export FASTLANE_SESSION='---\n- !ruby/object:HTTP::Cookie\n name: DES5c148586dfd451e55afbaaa5f62418f91\n value: HSARMTKNSRVTWFla1+yO4gVPowH17VaaaxPFnUdMUegQZxqy1Ie1c2v6bM1vSOzIbuOmrl/FNenlScsd/NbF7/Lw4cpnL15jsyg0TOJwP32tC/NguPiyOaaaU+jrj4tf4uKdIywVaaaFSRVT\n domain: idmsa.apple.com\n for_domain: true\n path: "/"\n secure: true\n httponly: true\n expires: 2016-04-27 23:55:56.000000000 Z\n max_age: \n created_at: 2016-03-28 16:55:57.032086000 -07:00\n accessed_at: 2016-03-28 19:11:17.828141000 -07:00\n'
從 ---\n 開始復制所有的東西,然后當做環(huán)境變量提供,配置環(huán)境變量vim ~/.bash_profile
,變量名是 FASTLANE_SESSION,你也可以放在.env
里,不過需要去掉export,效果一樣。
FASTLANE_SESSION='---\n- !ruby/object:HTTP::Cookie\n name: myacinfo\n value: xxx\n'
發(fā)包
如果你想通過fastlane上傳構建到TestFlight/App Store Connect,你必須生成并使用一個特殊密碼:
- 訪問 appleid.apple.com/account/manage
- 生成一個新的特殊密碼
- 使用環(huán)境變量名
FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD
提供這個特殊密碼.
更多詳情見github
三、Cert、Sigh使用
Cert
當新證書需要創(chuàng)建時,cert
會執(zhí)行以下步驟:
- 創(chuàng)建一個新的私鑰
- 創(chuàng)建一個新的簽名請求
- 生成,下載并安裝證書
- 導入所有生成文件到鑰匙串中
cert
不會撤銷您現有的證書。如果您不能創(chuàng)建更多證書,cert將引發(fā)異常,這意味著您必須撤銷現有的證書之一,以便為新證書騰出空間。
cert
無法從Apple Developer Portal下載現有證書+私鑰,因為私鑰永遠不會離開您的計算機。
示例如下:
lane :create_cert do
cert(
username: ENV['APPLE_ID'], # Apple ID
team_id: ENV['TEAM_ID'], # Team ID
development: true, # 創(chuàng)建一個開發(fā)證書
force: "false", # 即使存在現有證書,也要創(chuàng)建證書,默認為false
filename: "dev_cert", # 存儲文件名
output_path: "./certs/development", # 存儲所有證書和私鑰的目錄的路徑
)
end
更多cert的詳細用法,請參考cert doc
Sigh
Sigh
可以創(chuàng)建、更新、下載和修復配置文件(使用一個命令)。它支持App Store、Ad Hoc、Development 和 Enterprise,并支持一些不錯的功能,比如自動添加所有測試設備。
你可以通過下面這行命令列出本地安裝的所有provisioning profiles:
fastlane sigh manage
也可以刪除所有失效的provisioning profiles:
fastlane sigh manage -e
provisioning profiles所在目錄:~/Library/MobileDevice/Provisioning Profiles
。
你可以使用ProvisionQL在Finder中快速預覽profiles文件,使用brew cask install provisionql
快速安裝。
使用示例如下:
lane :create_adhoc_profile do
#如果沒有在Apple Developer創(chuàng)建證書的話,get_certificates會幫你自動創(chuàng)建證書
sigh(
username: ENV['APPLE_ID'], # APPle ID
team_id: ENV['TEAM_ID'], # team ID
app_identifier: ENV['APP_IDENTIFIER'], # bundle id
# cert_id: xxx, # 使用的證書id
provisioning_name: 'com.xx.FastLane_AdHoc', # 開發(fā)者中心上面的描述文件名稱
ignore_profiles_with_different_name: true, # 與provisioning_name參數聯合使用,true:當描述文件名稱完全匹配provisioning_name時才下載,false:不完全匹配也下載
force: true, # 更新描述文件并忽略其狀態(tài),同時自動為ad hoc profiles添加所有設備
filename: "xxx.mobileprovision", # 存儲文件名
output_path: "./profiles/adhoc", # 存儲的路徑
skip_install: false, # 默認會自動添加證書到你的本地機器上,設置該參數可以跳過該步驟
# development: false, # 更新開發(fā)證書而不是生產證書
# readonly: true, # 只獲取,不生成新的
adhoc: true # true:生成AdHoc profiles,false:生成App Store Profiles
)
end
更多sigh的詳細用法,請參考sigh doc
四、Match
建議使用這種方式管理證書,在使用match管理證書前,要先注冊一個私有倉庫,名字官方建議為certificates,本文管理倉庫放在碼云上。
初始化
進入項目目錄執(zhí)行
fastlane match init
系統(tǒng)會提示輸入git倉庫的鏈接,需確保當前賬戶有git倉庫的訪問權限。執(zhí)行完成后會在fastlane目錄下生成一個Matchfile文件,里面保存著你剛才輸入的git倉庫鏈接,以后操作match,會默認讀取該URL。
git_url("https://gitee.com/xxx/certificates.git")
storage_mode("git")
type("development") # The default type, can be: appstore, adhoc, enterprise or development
# app_identifier(["tools.fastlane.app", "tools.fastlane.app2"])
# username("user@fastlane.tools") # Your Apple Developer Portal username
# For all available options run `fastlane match --help`
# Remove the # in the beginning of the line to enable the other options
# The docs are available on https://docs.fastlane.tools/actions/match
刪除舊證書和pp文件
官方建議通過命令清除之前的證書和描述文件,畢竟我們想從一個干凈的環(huán)境出發(fā)。
企業(yè)賬號慎用,銷毀描述文件可能會導致App無法打開。
fastlane match nuke development ---開發(fā)證書
fastlane match nuke distribution ---apple store 和 adhoc使用此命令 ?
fastlane match nuke enterprise ---企業(yè)證書
生成證書和pp文件
lane :manageCert do
match(
git_url: "path", # 指定包含所有證書的git私有倉庫地址
#git_branch: "branch", # 指定所使用的git分支
type: "appstore", # 指定創(chuàng)建證書的類型,可用選項:appstore, adhoc, development, enterprise
username: ENV['APPLE_ID'], # APPle ID
team_id: ENV['TEAM_ID'], # team ID
app_identifier: ["tools.fastlane.app", "tools.fastlane.sleepy"], # 程序的bundle identifier(s),多個時用逗號分隔
readonly: true, # true:僅獲取已經存在的證書和描述文件,而不生成新的
force: true, # 每次執(zhí)行match時,是否更新描述文件
force_for_new_devices: true, # 當Apple Developer Portal上的設備數量發(fā)生變化時,是否更新描述文件
output_path: "./certs/development", # 導出的證書密鑰以及profile文件路徑
verbose: true # 打印詳細信息
)
end
首次執(zhí)行時,會要求輸入一個密碼,用來對證書進行加密,后續(xù)其他機器獲取證書時使用該密碼進行解密,輸入密碼后繼續(xù)按照終端提示進行下一步操作,match會創(chuàng)建新的證書和描述文件,之后執(zhí)行會拉取倉庫已經存在的。
完成后,git倉庫就會生成對應的certs及profiles文件夾來存放證書和配置文件。
注冊新設備
- 注冊單臺設備
fastlane run register_device
- 注冊多臺設備
desc "注冊設備"
lane :add_devices do
register_devices(
#devices_file: "./devices.txt", # 指定包含設備信息的文件路徑,文件具體格式參考https://devimages.apple.com.edgekey.net/downloads/devices/Multiple-Upload-Samples.zip
devices: {
"Luka iPhone 6" => "1234567890123456789012345678901234567890",
"Felix iPad Air 2" => "abcdefghijklmnopqrstvuwxyzabcdefghijklmn"
}, # 指定要注冊的設備列表,格式為:設備名稱 => UDID
username: "xx@apple.com" # 設置Apple ID
)
end
團隊管理
關掉Automatically manage signing,使用手動管理證書。
新成員接入時,執(zhí)行以下命令獲取對應的證書文件:
fastlane match development --readonly
fastlane match adhoc --readonly
fastlane match appstore --readonly
更多match的詳細用法,請參考match doc
五、PEM
如果需要有效的推送配置文件,pem將創(chuàng)建新的.pem、.cer和.p12文件。pem不包括將文件上載到服務器。
lane :notification_cert do
pem(
development: true, # true:更新開發(fā)推送證書,false:更新生產推送證書
generate_p12: true, # 生成p12和pem文件
force: true, # true:即使舊推送描述文件依然可用,仍然創(chuàng)建新的推送描述文件
app_identifier: 'com.apple.xxx', # Bundle ID,
save_private_key: true, #保存RSA私鑰
p12_password: '123456', # 所生成p12文件的密碼
pem_name: 'notifier', #pem文件名
username: ENV['APPLE_ID'],
team_id: ENV['TEAM_ID'],
output_path: "./certs/development",
new_profile: proc do |profile_path| # 如果生成了新的推送描述文件,該block會被調用
puts profile_path # 新的PEM文件的絕對路徑
# 添加上傳PEM文件到服務器的代碼
end
)
end
-
兩步驗證的處理辦法 ?