iOS開發(fā)fastlane從入門到入土(三):證書管理

match

前言

match是一種全新的證書和配置文件管理工具,它會把所有需要用到的證書傳到git私有庫上,任何需要配置的機器直接用match同步證書。團隊所有成員共享一份代碼簽名,以減免不必要的證書創(chuàng)建。

本文主要介紹match的使用方法,另外順帶講一下另外兩種證書配置方法certsigh。如果你還對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,比如 sighcertproducepilotboarding

使用

在命令行中嘗試運行 fastlane spaceship ,然后就會自動啟動 spaceship playground。這要求你使用 sudo gem install pry 安裝 prypry 不會默認安裝,因為大部分的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,你必須生成并使用一個特殊密碼:

  1. 訪問 appleid.apple.com/account/manage
  2. 生成一個新的特殊密碼
  3. 使用環(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

  1. 兩步驗證的處理辦法 ?

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,237評論 6 537
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 98,957評論 3 423
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,248評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,356評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,081評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,485評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,534評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,720評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 49,263評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,025評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,204評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,787評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,461評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,874評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,105評論 1 289
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,945評論 3 395
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,205評論 2 375