在上一篇制作私有库(组件)的过程中,使用的命令有很多,以下我们就使用自动化的方式提交推送私有组件。
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
此处,我们是简单创建
-
在私有库(组件)的根目录创建
36.pngfastlane
文件夹和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
37.png
38.png
- 必须
自定义Action
Action
是Fastlane
自动化流程中的最小执行单元,体现在Fastfile
脚本中的一个个命令。上述所用的action
,社区都有提供,但有时,我们所需的action
没有提供,需我们手动创建
- 场景
- 在制作私有库(组件)时,在执行手动或自动命令后,本地和远程的标签已经生成,如果此时验证没通过,修改正确后重新执行命令,此时的版本号如何处理?使用之前的版本会报错,增加一个新版本又不合适。
- 解决方案: 删除本地和远程的版本号
-
$ git tag -d xxx
&$ git push origin :xxx
- 尴尬
- 在
Fastlane
社区中,并没有提供类似删除git
版本号的action
- 此时,需要自己创建所需的
action
- 在
- 创建
action
-
执行命令:
$ fastlane new_action
-
输入自定义
39.pngaction
的名称
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
-
- 使用
-
重新修改
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
-
网友评论