fastlane
的强大带咱们很多的便利,但事无人愿。总有些不同的需求,今天就给你们带来的是fastlane
的action
和插件。ios
这也是fastlane
精髓部分,它使fastlane
具备强大扩展性,以保证变化不断的个性化需求。git
action
在项目中,能够建立自定义的action
扩展fastlane
的功能性。建立的这个action
跟fastlane
内置的action
在使用上面来讲没多大区别。下面来个例子:github
action
更新 build 版本号,格式就以年月日时分。在终端输入下面命令:shell
fastlane new_action
复制代码
action
实现分析在后面会被要求输入action
的名字,输入update_build_version
按回车后,fastlane
会在fastlane/actions
目录下面建立后缀为.ruby
文件。请看下面的文件内容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
的相关信息bash
顺便提一下要在另外的项目上使用,直接复制过去就好了。至于要提交到fastlane
的官方库,仍是相对来讲门槛较高。工具
上面的action
在共享这方面,只能靠复制这一手段,至关之不优雅。那么插件是咱们最好的选择。测试
建立插件ui
进入一个新的目录this
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写法。
参考文档: