iOS-组件化开发- 自动化

在上一篇制作私有库(组件)的过程中,使用的命令有很多,以下我们就使用自动化的方式提交推送私有组件。

Fastlane

fastlane is the easiest way to automate beta deployments and releases for your iOS and Android apps. It handles all tedious tasks, like generating screenshots, dealing with code signing, and releasing your application.
简而言之,就是一堆ruby脚本集合,使用Actions机制,实现自动化。

  • 安装

    • $ gem install fastlane -NV
    • $ brew cask install fastlane
  • 创建

    标准创建,是使用$ fastlane init

    此处,我们是简单创建

    • 在私有库(组件)的根目录创建fastlane文件夹和Fastfile文件

      iOS-组件化开发- 自动化_第1张图片
      36.png

    • 配置Fastfile文件

      # 描述航道
      desc "pod私有库自动化"
      
      # 定义航道, 航道名称是 repo
      lane :repo do |options|
      target = options[:target]
      tag = options[:tag]
      
      # 定义action
      
      #测试工程install
      # pod install
      cocoapods(
      podfile: "./Example/Podfile"
      )
      
      # 提交本地仓库
      # git add .
      git_add(path: ".")
      # git commit -m "xxx"
      git_commit(path: ".", message: "维护pod私有库")
      
      # 推送远程仓库
      # git push origin master
      push_to_git_remote
      
      # 判断是否有该版本, 如果有就先删除
      if git_tag_exists(tag:tag)
      UI.message("Found tag #{tag} , remove it")
      remove_tag(tag:tag)
      end
      
      # 打版本标签
      # git tag -a '#{tag}'
      add_git_tag(
      tag: tag
      )
      # 推送到远程库
      # git push --tags
      push_git_tags
      
      # 本地验证私有库
      # pod lib lint
      pod_lib_lint(allow_warnings: true)
      
      # 推送到私有管理库
      # pod repo push HQSpecs "#{targetName}.podspec"
      pod_push(path: "#{target}.podspec", repo: "HQSpecs", allow_warnings: true)
      
      end
      

      其中HQSpecs是私有库管理库

  • 使用

    使用之前需注意以下几点

    1. 必须cd到项目的根目录
    2. 需手动配置.podspec文件信息,例如:增加版本号
    3. 如果是首次创建私有库,则需手动关联远程库,如果是维护升级,则不需要
    • $ fastlane 航道名称 tag:版本号 target:组件库名称
    • 例:$ fastlane repo tag:0.1.1 target:HQMain
      37.png

      iOS-组件化开发- 自动化_第2张图片
      38.png

自定义Action

ActionFastlane自动化流程中的最小执行单元,体现在Fastfile脚本中的一个个命令。上述所用的action,社区都有提供,但有时,我们所需的action没有提供,需我们手动创建

  • 场景
    • 在制作私有库(组件)时,在执行手动或自动命令后,本地和远程的标签已经生成,如果此时验证没通过,修改正确后重新执行命令,此时的版本号如何处理?使用之前的版本会报错,增加一个新版本又不合适。
    • 解决方案: 删除本地和远程的版本号
    • $ git tag -d xxx & $ git push origin :xxx
  • 尴尬
    • Fastlane社区中,并没有提供类似删除git版本号的action
    • 此时,需要自己创建所需的action
  • 创建action
    • 执行命令:$ fastlane new_action

    • 输入自定义action的名称

      iOS-组件化开发- 自动化_第3张图片
      39.png

      iOS-组件化开发- 自动化_第4张图片
      40.png

    • 编辑remove_tag.rb

      • 核心代码如下:
      def self.run(params)
          tag = params[:tag]
          isRemoveRemoteTag = params[:isRemoveRemoteTag]
                    
          cmd = []
          cmd << "git tag -d #{tag} "
              
          if isRemoveRemoteTag
              cmd << " git push origin :#{tag}"
          end
            
          result = Actions.sh(cmd.join('&'));
          return result
      end
               
      def self.available_options
          [
              FastlaneCore::ConfigItem.new(key: :tag,
                                                     description: "被删除的标签",
                                                     optional: false,
                                                     is_string: true
                                                     ),
              FastlaneCore::ConfigItem.new(key: :isRemoveRemoteTag,
                                                     description: "是否删除远程标签",
                                                     optional: true,
                                                     is_string: false,
                                                     default_value: true),
          ]
      end
      
    • 查看remove_tag.rb编辑后的文档

      • $ fastlane action remove_tag
      iOS-组件化开发- 自动化_第5张图片
      41.png
  • 使用
    • 重新修改Fastfile文件

      • 在添加版本之前,先判断该版本是否存在,如果存在,则先删除该版本后再添加
      if git_tag_exists(tag:tag)
          UI.message("Found tag #{tag} , remove it")
          remove_tag(tag:tag)
      end
      
    • 验证

      • $ fastlane repo tag:0.1.1 target:HQMain
      iOS-组件化开发- 自动化_第6张图片
      42.png

你可能感兴趣的:(iOS-组件化开发- 自动化)