fastlane

作者: 何小八 | 来源:发表于2017-09-28 17:59 被阅读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)
    

    相关文章

      网友评论

          本文标题:fastlane

          本文链接:https://www.haomeiwen.com/subject/apdvextx.html