fastlane
的強大帶我們不少的便利,但事無人願。總有些不一樣的需求,今天就給大家帶來的是fastlane
的action
和外掛。
這也是fastlane
精髓部分,它使fastlane
具有強大擴充套件性,以保證變化不斷的個性化需求。
自定義本地action
在專案中,可以建立自定義的action
擴充套件fastlane
的功能性。建立的這個action
跟fastlane
內建的action
在使用上面來說沒多大區別。下面來個例子:
建立本地action
更新 build 版本號,格式就以年月日時分。在終端輸入下面命令:
fastlane new_action
複製程式碼
action
實現分析
在後面會被要求輸入action
的名字,輸入update_build_version
按回車後,fastlane
會在fastlane/actions
目錄下面建立字尾為.ruby
檔案。請看下面的檔案內容
module Fastlane
module Actions
module SharedValues
UPDATE_BUILD_VERSION = :UPDATE_BUILD_VERSION_CUSTOM_VALUE
end
class UpdateBuildVersionAction < Action
def self.run(params) # 這個方法為Action的主方法,在這裡我們們寫入更新版本號的內容
if params[:version_number]
new_version = params[:version_number]
else
# 格式化時間
new_version = Time.now.strftime("%Y%M%d")
end
command = "agvtool new-vresion -all #{new_version}" #使用蘋果的 agvtool 工具更新版本號
Actions.sh(command) #執行上面的 shell 命令
Actions.lane_context[SharedValues::UPDATE_BUILD_VERSION] = new_version # 更新全域性變數,供其他的Actions使用
end
def self.description # 對於該Action小於80字元的簡短描述
"A short description with <= 80 characters of what this action does"
end
def self.details # 對於該Action的詳細描述
# Optional: 可選
end
def self.available_options # 定義外部輸入的引數,在這裡我們們定義一個指定版本號的引數
[
FastlaneCore::ConfigItem.new(key: :version_number, # run方法裡面根據該key獲取引數
env_name: "FL_UPDATE_BUILD_VERSION_VERSION_NUMBER", # 環境變數
description: "Change to a specific version", # 引數簡短描述
optional: true),
]
end
def self.output # 輸入值描述,如果在 run 方法更新 SharedValues 模組裡面自定義的變數,供其他的 Action 使用,可選
[
[`UPDATE_BUILD_VERSION_CUSTOM_VALUE`, `A description of what this value contains`]
]
end
def self.return_value # 返回值描述, 指的 run 方法會有返回值。可選
end
def self.authors # 作者
["ChenJzzz"]
end
def self.is_supported?(platform) # 支援的平臺
# you can do things like
#
# true
#
# platform == :ios
#
# [:ios, :mac].include?(platform)
#
platform == :ios
end
end
end
end
複製程式碼
從上面的方法上來看,主要的還是run
方法和available_options
方法。如果看不懂上面的程式碼,那去補一下ruby
相關的語法。OK,這個action
跟其他的action
一樣,在Fastlane
直接使用就可以了。在終端輸入fastlane action update_build_version
,會像下面一樣,列印出action
的相關資訊
順便提一下要在另外的專案上使用,直接複製過去就行了。至於要提交到fastlane
的官方庫,還是相對來說門檻較高。
自定義外掛
上面的action
在共享這方面,只能靠複製這一手段,相當之不優雅。那麼外掛是我們最好的選擇。
建立外掛
進入一個新的目錄
fastlane new_plugin [plugin_name]
複製程式碼
fastlane
建立Ruby gem
庫目錄lib/fastlane/plugin/[plugin_name]/actions/[plugin_name].rb
這個檔案是我們要實現的action
檔案
外掛跟action
都是同樣的寫法。在這裡就不重複描述了。
在當前目錄下, 可以執行fastlane test
,測試外掛是否正確
使用方法
安裝已釋出到RubyGems
的外掛
fastlane add_plugin [name]
複製程式碼
fastlane
會執行以下步驟
- 新增外掛到
fastlane/Pluginfile
- 使
./Gemfile
檔案正確引用fastlane/Pluginfile
- 執行
fastlane install_plugins
安裝外掛以及需要的依賴 - 如果之前未安裝過外掛,會生成三個檔案:
Gemfile
、Gemfile.lock
和fastlane/Pluginfile
安裝其他外掛
正如上面所說,在專案裡面的fastlane/Pluginfile
新增下面內容
# 安裝釋出到 Github 的外掛
gem "fastlane-plugin-example", git: "https://github.com/fastlane/fastlane-plugin-example"
# 安裝本地外掛
gem "fastlane-plugin-xcversion", path: "../fastlane-plugin-xcversion"
複製程式碼
在終端執行fastlane/Pluginfile
(或者 bundle exec fastlane/Pluginfile
),安裝外掛以及相關依賴
總結
action
的出現,大大的增強了fastlane
的擴充套件性。使我們適應自己的業務,定製所需要action
。另外,Plugin
使fastlane
在有強大的擴充套件性同量,使用更加靈活。
總的來說,如果是單單的專案,action
可以解決問題。如果是多個專案,使用plugins
是不二選擇。
小Tips:如果看不懂,去補一下Ruby的語法。還有就是多點看一下網上action和plugin寫法。
參考文件: