當(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
- 首先會(huì)提示讓你選擇fastlane用途,因?yàn)樾枰峤籄pp Store這里選擇3
- 輸入Apple ID和密碼及驗(yàn)證碼
- 選擇是否下載metadata(如果App Store上對(duì)應(yīng)的Apple ID已經(jīng)有相應(yīng)的App茂卦,則會(huì)自動(dòng)下載所有的app數(shù)據(jù))
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目錄下的文件缺少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)信息棠众;有兩種方式:- 使用metadata
所有數(shù)據(jù)都會(huì)直接metadata文件下自動(dòng)讀取琳疏,這種方式Deliverfile配置比較簡(jiǎn)單:
- 使用metadata
# 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
- 編寫腳本
不使用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-US
,zh-Hans
否則執(zhí)行會(huì)報(bào)錯(cuò)校哎;
- Fastfile
這個(gè)文件就是配置我們需要執(zhí)行的腳本两波;
在對(duì) Fastfile 進(jìn)行配置前,我們先了解下幾個(gè)概念闷哆;-
lane
lane可以理解為 fastlane 的執(zhí)行腳本腰奋,一個(gè)Fastfile 里可以編寫任意個(gè)lane,每個(gè)lane都可以獨(dú)立運(yùn)行抱怔,也可以嵌套運(yùn)行劣坊。 -
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;