一:Fastlane 安裝準(zhǔn)備工作
一、安裝xcode命令行工具
xcode-select --install
如果沒(méi)有安裝,會(huì)彈出對(duì)話框,點(diǎn)擊安裝。如果提示xcode-select: error: command line tools are already installed, use "Software Update" to install updates表示已經(jīng)安裝
二、安裝Fastlane
1.Homebrew安裝:
brew cask install fastlane
2.安裝程序腳本下載zip文件。然后雙擊install腳本(或在終端窗口中運(yùn)行)。
3.RubyGems 帶有Ruby版本> 2.0.0?
gem install fastlane -NV
安裝完了執(zhí)行下方命令,確認(rèn)下是否安裝完成和當(dāng)前使用的版本號(hào)。
fastlane --version
二:Fastlane 安裝初始化
一、初始化Fastlane
cd到你的項(xiàng)目目錄執(zhí)行?
fastlane init
成功后會(huì)出現(xiàn)如下,根據(jù)你的需求,選擇下方的一個(gè)繼續(xù):
我這里選的是3,
1.下一步需要登錄開(kāi)發(fā)者賬號(hào),輸入賬號(hào)密碼后
2.驗(yàn)證當(dāng)前應(yīng)用identifier是否已在App Store中存在,如果沒(méi)有的話,會(huì)進(jìn)一步提示你創(chuàng)建App名稱(chēng)...然后自動(dòng)幫你創(chuàng)建,如果已有的話,那會(huì)節(jié)省很多時(shí)間,也可以避免很多問(wèn)題
一切正確無(wú)誤后,初始化成功后會(huì)在當(dāng)前工程目錄生成一個(gè)fastlane文件夾,文件目錄為下:
文件名描述
Appfile 從Apple Developer Portal 獲取和項(xiàng)目相關(guān)的信息 詳情
Fastfile 核心文件,存放lane任務(wù)
Deliverfile ?deliver的配置文件,從 iTunes Connect 獲取和項(xiàng)目相關(guān)的信息詳細(xì)
metadata 同步iTunes Connect中的元數(shù)據(jù)
screenshots 同步iTunes Connect中的截圖
Fastfile是我們最應(yīng)該關(guān)注的文件,也是我們的工作文件。這樣第二步總算是完成了,接下來(lái)第三步就是配置Fastfile文件
三:Fastfile文件配置(示例)
關(guān)于fastfile:
里面存放了很多l(xiāng)ane,每個(gè)lane相當(dāng)于按順序執(zhí)行的工作流。每個(gè)lane可以存放多個(gè)action,action可以看做具體的執(zhí)行動(dòng)作
生命周期:
1 before_all 在執(zhí)行 lane 之前只執(zhí)行一次
2 before_each 每次執(zhí)行 lane 之前都會(huì)執(zhí)行一次
3 lane 自定義的任務(wù)
4 after_each 每次執(zhí)行 lane 之后都會(huì)執(zhí)行一次
5 after_all 在執(zhí)行 lane 成功結(jié)束之后執(zhí)行一次
6 error 在執(zhí)行上述情況任意環(huán)境報(bào)錯(cuò)都會(huì)中止并執(zhí)行一次
任務(wù)
desc ?#false 可多次使用打到換行的目的
name ? #true 符號(hào)化的方法名
options ? #false 返回 Hash 類(lèi)型
task ? #true ?參考ruby的方法代碼且支持 ruby 代碼
default_platform(:ios)
#聲明
? ? k_app_name = "ABC"
? ? k_workspace = "GameTrade.xcworkspace"
? ? k_scheme_name = "GameTrade"
? ? k_ipa_time = Time.now.strftime("%Y%m%d_%H%M")
? ? k_output_directory = "packages"
? ? k_app_info_plist_path = './GameTrade/Info.plist'
? ? k_export_method = ""
? ? k_env_prefix = ""
? ? k_ipa_name = ""
platform :ios do
? before_all do
? ? # ENV["SLACK_URL"] = "https://hooks.slack.com/services/..."
? end
#debug包
? lane :debug_package do
? ? k_env_prefix ="debug_"
? ? k_export_method = "development"
? ? package(configuration: "Debug")
? end
#release包
? lane :release_package do
? ? k_env_prefix ="adhoc_"
? ? k_export_method = "ad-hoc"
? ? package(configuration: "Release")
? ? pgyer(api_key: "2455364b6a08c261b84cfbe7fff55fba", user_key: "ad18b738e7854bf3c689ecfe71f1b7a5", update_description: "update by fastlane")#蒲公英設(shè)置查看key
? end
#發(fā)布包 "Push a new release build to the App Store"
? lane :appstore_package do
? ? k_env_prefix ="appstore_"
? ? k_export_method = "app-store"
? ? package(configuration: "Release")
? end
#打包函數(shù) desc "打包到pgy"
? lane :package do |options|
? ? #自動(dòng)增加build
? ? increment_build_number
? ? #獲取version和build版本號(hào)
? ? k_version = get_info_plist_value(path: "./#{k_scheme_name}/Info.plist", key: "CFBundleShortVersionString")
? ? k_build = get_info_plist_value(path: "./#{k_scheme_name}/Info.plist", key: "CFBundleVersion")
? ? k_ipa_name = "#{k_env_prefix}" + "#{k_app_name}_"? +? "#{k_ipa_time}_" + "#{k_version}" +"_#{k_build}"+ ".ipa"
? ? gym(
? ? ? clean:true, #打包前clean項(xiàng)目
? ? ? workspace: "#{k_workspace}",
? ? ? scheme: "#{k_scheme_name}", #scheme
? ? ? configuration: options[:configuration],#環(huán)境 Debug,Release
? ? ? export_method: "#{k_export_method}", #導(dǎo)出方式:app-store,ad-hoc,enterprise,development
? ? ? output_directory: "#{k_output_directory}", #"./ipa",#ipa的存放目錄
? ? ? output_name: "#{k_ipa_name}", #輸出ipa的文件名為當(dāng)前的build號(hào)
? ? ? silent: true, #隱藏沒(méi)有必要的信息
? ? ? include_symbols: true,
? ? ? include_bitcode: true,
? ? ? export_xcargs: "-allowProvisioningUpdates" #Xcode9 默認(rèn)不允許訪問(wèn)鑰匙串的內(nèi)容,必須要設(shè)置此項(xiàng)才可以,運(yùn)行過(guò)程可能會(huì)提示是否允許訪問(wèn)鑰匙串,需要輸入電腦密碼
? ? )
? ? xcclean(
? ? ? workspace: "#{k_workspace}",
? ? ? scheme: "#{k_scheme_name}"
? ? )
? end
? #執(zhí)行l(wèi)ane成功后的回調(diào)
? after_all do |lane|
? ? slack(
? ? ? message: "Successfully deployed new App Update."
? ? )
? end
? # 如果流程發(fā)生異常會(huì)走這里并終止
? error do |lane, exception|
? ? slack(
? ? ? message: exception.message,
? ? ? success: false
? ? )
? end
end
四:Fastlane?插件安裝(更多插件)
插件安裝成功fastlane目錄下會(huì)生成Pluginfile的一個(gè)文件。插件安裝不成功,就是fastlane安裝的有問(wèn)題。
五:發(fā)布
執(zhí)行fastlane release_package 成功后,如下圖: