iOS 使用fastlane實現打包,上傳到fir.im、pgyer及appstore

一、fastlane簡介

Fastlane是一套使用Ruby寫的自動化工具集,用于iOS和Android的自動化打包、發布等工作。

Github:https://github.com/fastlane/fastlane

官網:https://fastlane.tools/

文檔:https://docs.fastlane.tools/

工具集說明如下:
  1. scan
    • 自動運行測試工具,并且可以生成HTML文檔報告
  2. cert
    • 自動創建和管理iOS簽名證書(Certificates)
  3. sigh
    • 創建、更新、下載、修復Provisioning Profiles的工具
  4. pem
    • 自動生成、更新推送配置文件
  5. snapshot
    • 使用Xcode7的UITest功能實現自動化截圖
  6. frameit
    • 把截取的圖片套上一層外邊框
  7. gym
    • 自動化編譯工具,用來打包ipa或者pkg文件
  8. deliver
    • 自動上傳截圖、App的元數據、二進制(ipa)文件到iTunes Connect
  9. produce
    • 在iTunes Connect或者Apple Developer Center上創建新的iOS應用程序

備注:還有一些工具因為不常用或者被棄用了(比如:shenzhen),這里就不一一列舉了。

二、操作步驟

  1. 安裝fastlane

    • 確保安裝了最新版的Xcode command line tools
      xcode-select --install
    • 安裝fastlane
      [sudo] gem install fastlane -NV
      或者也可以使用brew cask 來安裝fastlane
  2. 初始化fastlane

    • 打開terminal(終端),進入項目根目錄下,初始化fastlane
      fastlane init
      出現如下選項,選擇4:
      DB610C68-5EC2-4FBF-8E3D-FDF8261444A1.png

      ① 自動化截圖
      ② 將測試版分發自動化到TestFlight
      ③ 自動上傳、發布到App Store
      ④ 手動設置 - 手動設置您的項目以使您的任務自動化
      然后,輸入開發者賬號密碼
      76080789-2B98-4218-9F67-EEEF0DD4F93F.png

      如果開發者賬號上沒有對應的bundle id的App,會提示是否創建一個新的App,這里我們選擇否(n),因為這樣快速創建的App設置的信息有限,只能設置App名稱等一些基本信息,我們可以通過produce工具創建一個可以設置更多信息的App
      image.png
  3. 使用produce,在iTunes Connect或者Apple Developer Center上創建新的iOS應用程序
    進入項目根目錄,找到fastlane文件夾下的Fastfile文件, 編輯文件,內容如下:


platform :ios do
 desc "create new app"
 lane :produce_app do
   produce(
     username: "xxxx@gmail.com",# APPle ID
     app_name: "小魚小魚吃蝦米",#App 名稱
     app_identifier: "com.test.www.FastlaneTest",#App bundle id
     app_version: "1.0",#App 版本
     sku: "10023500",#App sku
     language: "Simplified Chinese",#App 語言,默認English
   )
 end
end
2F7D1732-1771-41E4-A2AA-F9F20EFA4C8C.png

備注:language這個選項不能直接寫Chinese,語言選項如下
["Brazilian Portuguese", "Danish", "Dutch", "English", "English_Australian", "English_CA", "English_UK", "Finnish", "French", "French_CA", "German", "Greek", "Indonesian", "Italian", "Japanese", "Korean", "Malay", "Norwegian", "Portuguese", "Russian", "Simplified Chinese", "Spanish", "Spanish_MX", "Swedish", "Thai", "Traditional Chinese", "Turkish", "Vietnamese"]

在terminal中執行fastlane produce_app命令,創建成功提示如下:


938F5AFA-738A-44A0-82D2-B3AD2CC30279.png

95F95FAC-7B1C-4297-8732-D49B74E9C543.png
  1. 使用cert創建簽名證書(Certificates)
    ① 在Fastfile中添加以下內容,生成開發證書:
  lane :create_certificates do
    cert(
      username: "xxxx@gmail.com",# APPle ID
      development: true,# 創建一個開發證書
      force: "false",#即使存在現有證書,也要創建證書,默認為false
      output_path: "./certs/development",#存儲所有證書和私鑰的目錄的路徑
    )
  end

結果如下:


6D2519C1-D251-4028-BFD5-F315CE0F90AE.png

② 生成生產證書

  lane :create_dcertificates do
    cert(
      username: "xxxx@gmail.com",# APPle ID
      development: false,# 創建一個開發證書
      force: "false",#即使存在現有證書,也要創建證書,默認為false
      output_path: "./certs/distribution",#存儲所有證書和私鑰的目錄的路徑
    )
  end
A252E1CE-C95F-4E4E-83DD-136BB7CD1E4E.png

開發和生產證書,修改development的boolean值及output_path路徑即可

  1. 使用sigh 生成描述文件(mobileprovision)
    在Fastfile中
    ①生成開發mobileprovision
lane :get_dev_provisioningProfile do
  get_provisioning_profile(
    username: "xxxx@gmail.com",# APPle ID
    development: true,# 創建一個開發mobileprovision
    app_identifier: "com.test.www.FastlaneTest",#bundle identifier
    output_path: "./certs/development",#存儲mobileprovision的目錄的路徑
    filename: "fastlane_dev.mobileprovision",#用于生成的供應配置文件的文件名(必須包含.mobileprovision)
  )
end
24FAC5E3-77CC-411F-8203-69EBCACF1A51.png

② 生成生產mobileprovision

 lane :get_provisioningProfile do
   get_provisioning_profile(
     username: "xxxx@gmail.com",# APPle ID
     development: false,# 創建一個開發證書
     app_identifier: "com.test.www.FastlaneTest",#bundle identifier
     output_path: "./certs/distribution",#存儲mobileprovision的目錄的路徑
     filename: "fastlane_distr.mobileprovision",#用于生成的供應配置文件的文件名(必須包含.mobileprovision)
   )
 end

47590B9B-5772-4C5F-93BF-4B6C843BEDB7.png

找到certs/development&&distribution目錄下的證書及.mobileprovision文件,并安裝到電腦上
FC980321-CAF1-4DCA-81DF-8C246C449AF7.png

  1. 使用gym來打包ipa
    • 插件(Plugins)
      可以在fastlane1.3.0以及更高版本的添加插件,通過添加插件,可以增加一些擴展功能,以便更好的使用
      查看所有可用插件
      fastlane search_plug
      查找插件
      fastlane search_plugins [query]
      添加插件
      fastlane add_plugin [name]
      這里介紹兩個將會用到插件:
      ① astlane-plugin-versioning => 用來修改build版本號和version版本號。
      Fastlane內嵌的actionincrement_build_number使用的是蘋果提供的agvtool,agvtool在更改Build的時候會改變所有target的版本號。這時如果你在一個工程里有多個產品的話,每次編譯,所有的Build都要加1。
      有了fastlane-plugin-versioning不僅可以指定target增加Build,而且可以按照「語義化版本」規范增加Version,當然也可以直接設定Version。
      ② fastlane-plugin-firim => 直接把AdHoc或者InHouse打包的ipa上傳到fir.im,供測試下載。
      安裝以上兩個插件
   fastlane add_plugin versioning
   fastlane add_plugin firim

使用gym打包ipa

  • 打包之前,先使用xcode的archive一下,保證項目可以運行起來
  • 打包企業版
  lane :inhouse do
  # 以下兩個action來自fastlane-plugin-versioning,
  # 第一個遞增 Build,第二個設定Version。
  # 如果你有多個target,就必須指定target的值,否則它會直接找找到的第一個plist修改
    increment_build_number_in_plist(target: 'FastlaneTest')
    increment_version_number_in_plist(
      target: 'FastlaneTest',
      version_number: '1.0'
    )
    # gym用來編譯ipa
    gym(scheme: 'FastlaneTest',#打包scheme
    export_method:"enterprise",#打包類型app-store, ad-hoc, enterprise, development
    output_directory: "./build",#ipa打包存放路徑
    output_name: 'inhouse.ipa'#ipa名稱
    )
  end
  • 上傳到firim
    firim(firim_api_token:'38536e6737457d269979734fdsfdsfa')
    打包其他版本只需要把export_method方法改成對應的字段即可,這里就一一敘述了
  1. 通過deliver 上傳截圖、App的元數據、二進制(ipa)文件到iTunes Connect
    ①在Deliverfile中填寫要上傳的App元數據
# For more information, check out the docs
# https://docs.fastlane.tools/actions/deliver/

# bundle identifier
app_identifier "com.test.www.FastlaneTest"

# Apple ID用戶名
username "xxxx@gmail.com"

# 版權聲明
copyright "#{Time.now.year} xiaoyuchixiami"

# 支持的語言
supportedLanguages = {
    "cmn-Hans" => "zh-Hans"
}

# 副標題
subtitle(
  'zh-Hans' => "小魚小魚,蝦米蝦米"
)

# App應用名稱
name(
  'zh-Hans' => "小魚小魚吃蝦米"
)

# 關鍵字
keywords(
  'zh-Hans' => "小魚小魚吃蝦米,小魚,吃蝦米"
)

# 營銷地址
marketing_url({
  'zh-Hans' => "https:www.xiaoyuchixiami.com"
})

# 隱私地址
privacy_url({
  'zh-Hans' => "https:www.xiaoyuchixiami.com"
})

# 支持網址
support_url({
  'zh-Hans' => "https:www.xiaoyuchixiami.com"
})

# 發行說明
release_notes({
  'zh-Hans' => "這是第一個版本哦"
})

# 應用說明
description({
  'zh-Hans' => "小魚小魚吃蝦米, 蝦米被小魚吃",
})

# App價格
price_tier 0

# 應用程序圖標的路徑
app_icon './fastlane/metadata/AppIcon.png'

# 屏幕截圖的文件夾的路徑
screenshots_path './fastlane/screenshots'

# ipa路徑
ipa './build/release.ipa'

# 自動發布 app: false,則需要手動發布
automatic_release false

# 提交審核信息:加密, idfa 等
submission_information({    
    export_compliance_encryption_updated: false,
    export_compliance_uses_encryption: false,
    content_rights_contains_third_party_content: false,
    add_id_info_uses_idfa: false
})

# 應用審核小組的聯系信息 app 審核信息
app_review_information(
  first_name: "楊",
  last_name: "過",
  phone_number: "13522945883",
  email_address: "10023500@gmial.com",
  demo_user: "測試賬號",
  demo_password: "測試密碼",
  notes: "account needed"
)

② 在Fastfile中編寫上傳元數據action

  lane :upload_message do
    deliver
  end

③ 在terminal中執行fastlane upload_message,會生成一份app元數據確認的htm,輸入y上傳


FEB6D95E-B214-41EF-83DF-861912D7CD90.png

925FDCDF-DB5D-4ADA-AA91-CE62D6DA539D.png

上傳成功截圖:


38C53584-7A71-4EE6-8E11-3BF6C08915AB.png

image.png

image.png

image.png

通過以上截圖,可以看到,我們打包的ipa包和其他元數據都上傳到了iTunes Connect

④ 發布應用
在Deliverfile文件中添加以下內容即可

# 上傳完成后提交新版本進行審查
submit_for_review: true
# 跳過HTML報告文件驗證
force: true

注意事項:

  1. 截圖文件需要區分語言,所以一個文件夾對應一種語言,以下是簡體中文對應的截圖,另外,同一個分辨率的圖片排序順序是根據字母順序排列的。


    image.png

    2.Deliverfile文件元數據是區分語言的,所以app名稱等信息需要加上語言標識,如下圖:


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

推薦閱讀更多精彩內容