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文件

      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

      38.png

自定义Action

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

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

    • 输入自定义action的名称

      39.png

      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
      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
      42.png
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,496评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,407评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,632评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,180评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,198评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,165评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,052评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,910评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,324评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,542评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,711评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,424评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,017评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,668评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,823评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,722评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,611评论 2 353

推荐阅读更多精彩内容