iOS使用fastlane一鍵打包、提交應(yīng)用

當(dāng)開發(fā)的應(yīng)用越來越多山析,或者應(yīng)用提交的頻率越來越高堰燎,就會(huì)體會(huì)到打包、提交這些重復(fù)的工作是多么枯燥且無聊還耗時(shí)笋轨;那么自然就會(huì)考慮讓機(jī)器幫我們完成這一系列的工作秆剪,fastlane無疑是這樣一個(gè)理想好用的工具;

fastlane初始化

  • 安裝正確的Ruby版本爵政,需要2.0及以上版本
ruby -v
  • 安裝fastlane
sudo gem install fastlane

或者

brew install fastlane
  • 初始化配置
    cd到項(xiàng)目路徑下仅讽,執(zhí)行命令
fastlane init
  1. 首先會(huì)提示讓你選擇fastlane用途,因?yàn)樾枰峤籄pp Store這里選擇3
  2. 輸入Apple ID和密碼及驗(yàn)證碼
  3. 選擇是否下載metadata(如果App Store上對(duì)應(yīng)的Apple ID已經(jīng)有相應(yīng)的App茂卦,則會(huì)自動(dòng)下載所有的app數(shù)據(jù))
init
metadata

metadata數(shù)據(jù)包括App的預(yù)覽/截屏圖片何什,圖片比較多比較大時(shí)可能只能下載到部分圖片组哩;
這時(shí)可以執(zhí)行以下命令單獨(dú)下載圖片:

fastlane deliver download_screenshots

如果在下載圖片這步報(bào)錯(cuò)等龙,需要添加--use_live_version

  • fastlane結(jié)構(gòu)
    初始化成功后,項(xiàng)目下會(huì)多出一個(gè)fastlane的文件伶贰,所有數(shù)據(jù)蛛砰、配置均在這個(gè)目錄下;
fastlane

如果fastlane目錄下的文件缺少Deliverfile黍衙、 metadata泥畅,可能是在fastlane init的第一步選錯(cuò)了選項(xiàng);可以執(zhí)行以下命令重新生成:

fastlane deliver init

fastlane配置

  • Appfile
    這個(gè)文件主要配置琅翻、app和apple id相關(guān)信息位仁;包括app_identifier,apple id方椎,team id聂抢;這個(gè)一般會(huì)根據(jù)你初始化填的Apple ID自動(dòng)生成;
  • Deliverfile
    這個(gè)文件就是配置App提交審核的相關(guān)信息棠众;有兩種方式:
    1. 使用metadata
      所有數(shù)據(jù)都會(huì)直接metadata文件下自動(dòng)讀取琳疏,這種方式Deliverfile配置比較簡(jiǎn)單:
 # The Deliverfile allows you to store various App Store Connect metadata
# For more information, check out the docs
# https://docs.fastlane.tools/actions/deliver/

metadata_path "./fastlane/metadata" # 根據(jù)你自己的metadata路徑配置
force true              # Skip verification of HTML preview file
submit_for_review false     # 提交審核
automatic_release false     # 自動(dòng)發(fā)布
#auto_release_date          # 自動(dòng)發(fā)布時(shí)間
skip_screenshots false      # 是否不更新預(yù)覽圖
overwrite_screenshots true  # 是否清空之前的預(yù)覽圖再添加
skip_binary_upload false        # 是否不上傳ipa
  1. 編寫腳本
    不使用metadata有决,相關(guān)信息直接編寫對(duì)應(yīng)的命令;這些命令和apple developer網(wǎng)站添加提交信息都是一一對(duì)應(yīng)的空盼,可以把它看成通過接口的形式添加應(yīng)用信息书幕;
    具體的命令可以參考官網(wǎng),說明的比較詳細(xì)了揽趾;
    貼一個(gè)比較詳細(xì)的配置:
# The Deliverfile allows you to store various App Store Connect metadata
# For more information, check out the docs
# https://docs.fastlane.tools/actions/deliver/

#metadata_path "./fastlane/metadata"
#skip_metadata true     # 是否使用metadata
#screenshots_path "./fastlane/screenshots"

force true              # Skip verification of HTML preview file
submit_for_review false     # 提交審核
automatic_release false     # 自動(dòng)發(fā)布
#auto_release_date          # 自動(dòng)發(fā)布時(shí)間
skip_screenshots false      # 是否不更新預(yù)覽圖
overwrite_screenshots true  # 是否清空之前的預(yù)覽圖再添加
skip_binary_upload false        # 是否不上傳ipa

primary_category 'BUSINESS' # 分類

copyright("@#{Time.now.year} xx版權(quán)所有 翻版必究") # 版權(quán)信息

keywords({              # 關(guān)鍵字
  "en-US" => "english is poor",
  "zh-Hans" => "關(guān)鍵詞1,關(guān)鍵詞2"
})

support_url({           # 技術(shù)支持網(wǎng)站
  "en-US" => "https://xxx.com",
  "zh-Hans" => "https://xxxx.com"
})

submission_information({        # 使用廣告的情況
    add_id_info_uses_idfa: true,
    add_id_info_serves_ads: false,
    add_id_info_tracks_install: false,
    add_id_info_tracks_action: false,
    add_id_info_limits_tracking: false
})

app_review_information(     # 審核信息
  first_name: "xx",
  last_name: "xx",
  phone_number: "+8618xxxxxxxx",
  email_address: "xx@xx.com",
  demo_user: "xxxxxxx",
  demo_password: "1234567",
  notes: ""
)

app_review_attachment_file "./fastlane/fastSign.MP4"   # 附件信息



app_version '5.7.8' 
#build_number '5.7.8'

name({                  # app名稱
  "en-US" => "english is poor",
  "zh-Hans" => "應(yīng)用名稱"
})

privacy_url({           # 隱私政策url
  "en-US" => "https://xx.xx.com/xxx",
  "zh-Hans" => "https://xx.xx.com/xxx"
})

release_notes({         # 版本新增內(nèi)容
  "en-US" => "english is poor",
  "zh-Hans" => "1) 升級(jí)測(cè)試第一行\(zhòng)n2) 升級(jí)測(cè)試第二行"
})

description({           # 描述
  "en-US" => "english is poor",
  "zh-Hans" => "應(yīng)用描述台汇。。篱瞎。励七。
"
})

需要注意的是,一些信息比如privacy_url奔缠,release_notes是區(qū)分地區(qū)的掠抬,配置時(shí)需要編寫兩套:en-USzh-Hans否則執(zhí)行會(huì)報(bào)錯(cuò)校哎;

  • Fastfile
    這個(gè)文件就是配置我們需要執(zhí)行的腳本两波;
    在對(duì) Fastfile 進(jìn)行配置前,我們先了解下幾個(gè)概念闷哆;
    1. lane
      lane可以理解為 fastlane 的執(zhí)行腳本腰奋,一個(gè)Fastfile 里可以編寫任意個(gè)lane,每個(gè)lane都可以獨(dú)立運(yùn)行抱怔,也可以嵌套運(yùn)行劣坊。
    2. fastlane actions
      actions相當(dāng)于就是對(duì)一些腳本的封裝,為了方便我們使用屈留,fastlane定義了很多actions供我們使用局冰,可以像函數(shù)調(diào)用一樣實(shí)現(xiàn)不同的功能;同時(shí)我們也可以自定義actions;
      官方定義好的actions:https://docs.fastlane.tools/actions/灌危,常用的actions有:gym,deliver,cocoapods

應(yīng)用打包到提交App Store審核的Fastfile大致如下:

# Uncomment the line if you want fastlane to automatically update itself
# update_fastlane

default_platform(:iOS)

platform :iOS do
  desc "sumbmit"        # lane描述
  lane :upload_app do
    # 打包
    gym(
        scheme: "your scheme",
        workspace: "your.xcworkspace",
        include_bitcode: false
     )

     # 發(fā)布
     deliver
  end
end

運(yùn)行

所有都配置好后康二,cd到項(xiàng)目路徑執(zhí)行需要的lane

fastlane upload_app

之后命令行就會(huì)輸出相應(yīng)的日志;
deliver階段勇蝙,如果Deliverfile配置缺少沫勿,命名行都會(huì)有錯(cuò)誤日志:

根據(jù)對(duì)應(yīng)的提示補(bǔ)充即可;
需要注意的是味混,上傳元數(shù)據(jù)時(shí)产雹,App Store要求使用專用密碼;否則將會(huì)報(bào)錯(cuò)

專用密碼可以在apple accout頁(yè)面設(shè)置

Multi-Target打包翁锡、發(fā)布

以上對(duì)單個(gè)應(yīng)用的配置相對(duì)比較簡(jiǎn)單蔓挖,但當(dāng)需要提交多個(gè)應(yīng)用,比如一個(gè)project中有多個(gè)target時(shí)盗誊,該怎么辦呢时甚;無需為每個(gè)target配置一份腳本隘弊,fastlane提供了Environment Variables,也就是環(huán)境變量荒适;可以通過配置不同的環(huán)境變量實(shí)現(xiàn)Multi-Target打包梨熙、發(fā)布;
具體步驟:

  • 新建Environment文件
    fastlane的Environment文件為.env文件刀诬,fastlane初始化后咽扇,默認(rèn)不會(huì)有.env配置文件,需要手動(dòng)添加文件陕壹;
    cd到fastlane文件目錄下质欲,為每個(gè)target創(chuàng)建.env文件
    touch .env.targetA
    touch .env.targetB
    

.開頭的文件為隱藏文件,添加后顯示隱藏文件即可看到添加的.env文件糠馆;

  • 配置不同的環(huán)境變量
    根據(jù)自己的業(yè)務(wù)需求嘶伟,歸納出變量并為每個(gè)target的.env文件配置;

.env.targetA

APP_IDENTIFIER = "com.xxx.targeta"

SCHEME = "targetA"

SCREENSHOTS_PATH = "./fastlane/targeta/screenshots"

APP_REVIEW_ATTACHMENT_FILE = "./fastlane/targeta/fastSign.MP4"

APP_VERSION = "5.0.0"

APP_NAME = "第一個(gè)APP"

DESCRIPTION = "第一個(gè)APP的描述"

.env.targetB也是一樣的配置又碌、只是value更換為自己需要的九昧;

  • 使用環(huán)境變量
    環(huán)境變量在Appfile、Deliverfile毕匀、Deliverfile等文件中均可使用铸鹰;使用語法:
ENV['變量KEY']

Appfile

app_identifier(ENV['APP_IDENTIFIER']) 

Deliverfile

app_version ENV['APP_VERSION']  
#build_number ENV['APP_VERSION']

name({                  # app名稱
  "en-US" => "english is poor",
  "zh-Hans" => ENV['APP_NAME']
})

description({               # 描述
  "en-US" => "english is poor",
  "zh-Hans" => ENV['DESCRIPTION']
})

  • 執(zhí)行
    執(zhí)行時(shí)需要指定對(duì)應(yīng)的環(huán)境變量
fastlane upload_app --env targetA
  • lane嵌套
    之前介紹lane時(shí)說過每個(gè)lane都可以獨(dú)立運(yùn)行,也可以嵌套運(yùn)行皂岔,對(duì)于需要一鍵打包提交多個(gè)target的蹋笼,我們就可以編寫嵌套的lane:

Fastfile

default_platform(:iOS)
 
platform :iOS do

desc "sumbmit_all"
lane :upload_all do
   sh "fastlane upload_app --env targetA"
   sh "fastlane upload_app --env targetB"
 end

desc "sumbmit"
lane :upload_app do
  gym(
      scheme: ENV[' SCHEME'],
      workspace: "app.xcworkspace",
      include_bitcode: false
   )

  deliver
end

end

  • 批量打包、提交
fastlane upload_all

如果一切正常的話躁垛,應(yīng)用就已經(jīng)自動(dòng)提交審核了剖毯;本來繁瑣的事情最后轉(zhuǎn)換為fastlane upload_all一句命令搞定,省時(shí)省力還能愉快的摸魚


AppleID登錄有效期為1個(gè)月缤苫,超過一個(gè)月后連接App Store時(shí)會(huì)提示輸入6 digit碼速兔;如果輸入后不能正常登錄;
需要執(zhí)行命令:

bundle exec fastlane spaceauth

重新驗(yàn)證活玲、獲取session;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市谍婉,隨后出現(xiàn)的幾起案子舒憾,更是在濱河造成了極大的恐慌,老刑警劉巖穗熬,帶你破解...
    沈念sama閱讀 210,914評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件镀迂,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡唤蔗,警方通過查閱死者的電腦和手機(jī)探遵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評(píng)論 2 383
  • 文/潘曉璐 我一進(jìn)店門窟赏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人箱季,你說我怎么就攤上這事涯穷。” “怎么了藏雏?”我有些...
    開封第一講書人閱讀 156,531評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵拷况,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我掘殴,道長(zhǎng)赚瘦,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,309評(píng)論 1 282
  • 正文 為了忘掉前任奏寨,我火速辦了婚禮起意,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘病瞳。我一直安慰自己杜恰,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評(píng)論 5 384
  • 文/花漫 我一把揭開白布仍源。 她就那樣靜靜地躺著心褐,像睡著了一般。 火紅的嫁衣襯著肌膚如雪笼踩。 梳的紋絲不亂的頭發(fā)上逗爹,一...
    開封第一講書人閱讀 49,730評(píng)論 1 289
  • 那天,我揣著相機(jī)與錄音嚎于,去河邊找鬼掘而。 笑死,一個(gè)胖子當(dāng)著我的面吹牛于购,可吹牛的內(nèi)容都是我干的袍睡。 我是一名探鬼主播,決...
    沈念sama閱讀 38,882評(píng)論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼肋僧,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼斑胜!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起嫌吠,我...
    開封第一講書人閱讀 37,643評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤止潘,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后辫诅,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體凭戴,經(jīng)...
    沈念sama閱讀 44,095評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評(píng)論 2 325
  • 正文 我和宋清朗相戀三年炕矮,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了么夫。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片者冤。...
    茶點(diǎn)故事閱讀 38,566評(píng)論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖档痪,靈堂內(nèi)的尸體忽然破棺而出涉枫,到底是詐尸還是另有隱情,我是刑警寧澤钞它,帶...
    沈念sama閱讀 34,253評(píng)論 4 328
  • 正文 年R本政府宣布拜银,位于F島的核電站,受9級(jí)特大地震影響遭垛,放射性物質(zhì)發(fā)生泄漏尼桶。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評(píng)論 3 312
  • 文/蒙蒙 一锯仪、第九天 我趴在偏房一處隱蔽的房頂上張望泵督。 院中可真熱鬧,春花似錦庶喜、人聲如沸小腊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)秩冈。三九已至,卻和暖如春斥扛,著一層夾襖步出監(jiān)牢的瞬間入问,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評(píng)論 1 264
  • 我被黑心中介騙來泰國(guó)打工稀颁, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留芬失,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,248評(píng)論 2 360
  • 正文 我出身青樓匾灶,卻偏偏與公主長(zhǎng)得像棱烂,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子阶女,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容