fastlane

2017-09-28  本文已影响0人  何小八

1、安装

 sudo gem install fastlane -NV

fastlane的git地址
文档
aciton源码

2、初始化项目

 fastlane init

3、例子

当我们的私有库需要更新的时候
我们需要的操作为:
1、pod install //本地安装
2、git add . //git本地添加
3、git commit -m 'update' //git本地提交
4、git push origin master //git远程提交
5、git tag 0.1.0 //本地打标签
6、git push --tags //远程提交标签
7、pod repo push XBPrivateSpecs xxxx.podspec //更新到私有库
每次更新我们都需要这7个步骤,或者更多,那这时候我们就可以创建一个fastlane自动化来帮我们自动提交
我们需要在Fastfile文件中写如下代码:

lane :pushLib do |options|

tagName = options[:tag]
targetName = options[:target]

# 1. pod install
cocoapods(
clean: true,
podfile: "./Example/Podfile"
)

# 2. git add .
git_add(path: ".")
#    git commit -m 'update'
git_commit(path: ".", message: "update")
#    git push origin master
push_to_git_remote

# 3. git tag 0.1.0
if git_tag_exists(tag: tagName)
    UI.message("Found it tagName, removeing this tag.")
    remove_tag(tag: tagName, rl: true, rr: true)
end

add_git_tag(
tag: tagName
)

#    git push --tags
push_git_tags

# 4. pod repo push XBPrivateSpecs xxxx.podspec
pod_push(path: "#{targetName}.podspec", repo: "XBPrivateSpecs", allow_warnings: true)

end

5、使用

fastlane pushLib tag:0.1.1 target:EncodeParm

pushLib: 为Fastfile文件中我们自己定义的名称
tag: 需要执行的tag
target: podspec文件的前缀

6、自定义aciton

上面的文件中,本来该我们写的命令,我们用了action来代替,之后就是fastlane帮我们自动执行

fastlane actions  //可以查看所有的action
fastlane action [action_name]   //查看具体aciton的执行方法

有些我们需要的action没有的话,我们可以自定义

fastlane new_action

例子:删除本地和远程tag的aciton

module Fastlane
  module Actions
    module SharedValues
      REMOVE_TAG_CUSTOM_VALUE = :REMOVE_TAG_CUSTOM_VALUE
    end

    class RemoveTagAction < Action
      def self.run(params)
      
      tagName = params[:tag]
      isRemoveLocalTag = params[:rl]
      isRemoveRemoteTag = params[:rr]
      
      # 1. 先定义一个数组,用来存储所有需要执行的命令
      cmds = []
      
      # 2、往数组中添加命令
      if isRemoveLocalTag
          cmds << "git tag -d #{tagName} "
      end
    
      if isRemoveRemoteTag
          cmds << " git push origin :#{tagName}"
      end
  
      # 3、执行命令
      Actions.sh(cmds.join('&'));

      end

      #####################################################
      # @!group Documentation
      #####################################################

      def self.description
        "remove tag"
      end

      def self.details
        # Optional:
        # this is your chance to provide a more detailed description of this action
        "You can use this action to do remove tag"
      end

      def self.available_options
        # Define all options your action supports. 
        
        # Below a few examples
        [

            FastlaneCore::ConfigItem.new(key: :tag,
                                         env_name: "FL_GIT_TAG_NAME",
                                         description: "需要删除的tag名称",
                                         is_string: true,
                                         optional: false),

            FastlaneCore::ConfigItem.new(key: :rl,
                                         env_name: "FL_GIT_IS_REMOVE_LOCAL_TAG",
                                         description: "是否需要删除本地tag",
                                         optional: true,
                                         is_string: false,
                                         default_value: true),

            FastlaneCore::ConfigItem.new(key: :rr,
                                         env_name: "FL_GIT_IS_REMOVE_REMOTE_TAG",
                                         description: "是否需要删除远程仓库tag",
                                         optional: true,
                                         is_string: false,
                                         default_value: true)
        ]
      end

      def self.output
        # Define the shared values you are going to provide
        # Example
        [
          ['REMOVE_TAG_CUSTOM_VALUE', 'A description of what this value contains']
        ]
      end

      def self.return_value
        nil
      end

      def self.authors
        # So no one will ever forget your contribution to fastlane :) You are awesome btw!
        ["hexiaoba"]
      end

      def self.is_supported?(platform)
        # you can do things like
        # 
        #  true
        # 
        #  platform == :ios
        # 
        #  [:ios, :mac].include?(platform)
        # 

        platform == :ios
      end
    end
  end
end

使用
在上面的Fastfile文件中使用过

remove_tag(tag: tagName)
或者
remove_tag(tag: tagName, rl: true, rr: true)
上一篇下一篇

猜你喜欢

热点阅读