iOS持續集成(三)——fastlane自定義插件

NO IMAGE

fastlane的強大帶我們不少的便利,但事無人願。總有些不一樣的需求,今天就給大家帶來的是fastlaneaction和插件。

這也是fastlane精髓部分,它使fastlane具有強大擴展性,以保證變化不斷的個性化需求。

自定義本地action

在項目中,可以創建自定義的action擴展fastlane的功能性。創建的這個actionfastlane內置的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的相關信息

iOS持續集成(三)——fastlane自定義插件

順便提一下要在另外的項目上使用,直接複製過去就行了。至於要提交到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安裝插件以及需要的依賴
  • 如果之前未安裝過插件,會生成三個文件:GemfileGemfile.lockfastlane/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寫法。

參考文檔:

Create Your Own Plugin(官方文檔)

Available Plugins

相關文章

Flutter入門學習:Flutter簡介以及在macOS上搭建Flutter開發環境

iOS性能優化之耗電量

iOS性能優化之頁面加載速率

iOS持續集成(四)——Jenkins