iOS持续集成(三)——fastlane 自定义插件

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的相关信息

顺便提一下要在另外的项目上使用,直接复制过去就行了。至于要提交到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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值