在上一篇制作私有库(组件)的过程中,使用的命令有很多,以下我们就使用自动化的方式提交推送私有组件。
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
文件
-
配置
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
是私有库管理库
-
-
使用
使用之前需注意以下几点:
- 必须
cd
到项目的根目录 - 需手动配置
.podspec
文件信息,例如:增加版本号 - 如果是首次创建私有库,则需手动关联远程库,如果是维护升级,则不需要
$ fastlane 航道名称 tag:版本号 target:组件库名称
- 例:
$ fastlane repo tag:0.1.1 target:HQMain
- 必须
自定义Action
Action
是Fastlane
自动化流程中的最小执行单元,体现在Fastfile
脚本中的一个个命令。上述所用的action
,社区都有提供,但有时,我们所需的action
没有提供,需我们手动创建
- 场景
- 在制作私有库(组件)时,在执行手动或自动命令后,本地和远程的标签已经生成,如果此时验证没通过,修改正确后重新执行命令,此时的版本号如何处理?使用之前的版本会报错,增加一个新版本又不合适。
- 解决方案: 删除本地和远程的版本号
-
$ git tag -d xxx
&$ git push origin :xxx
- 尴尬
- 在
Fastlane
社区中,并没有提供类似删除git
版本号的action
- 此时,需要自己创建所需的
action
- 在
- 创建
action
执行命令:
$ fastlane new_action
-
输入自定义
action
的名称
-
编辑
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
- 使用
-
重新修改
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
-