自动化-自定义Actions
一、升级必备操作
- 修改完核心代码后,一共还需要做以下几步:
- 1、修改spec文件(修改s.version,s.description等)
- 2、pod install (使Example与pod下来的库产生关联)
- 3、提交本地仓库代码至远程仓库
- 4、打标签,并提交至远程
- 5、验证spec,并提至私有索引库
【自动化-自定义Actions】Fastlane文档说明
- Fastlane是一个ruby脚本集合,它可以按照我们指定的路线,在指定位置执行我们所要执行的操作。这里我们称这样的路线为「航道(lane)」,这样的操作称为「Action」
- Action是Fastlane自动化流程中的最小执行单元,用来执行Fastlane脚本中的命令,关于更多的描述可以到Actions - fastlane docs查看,里面也介绍了常用的action有哪些,顺带附上action的源码地址,这个源码在后面自定义起参考作用
- 确保ruby为最新版本
brew update
brew install ruby
- 安装fastlane
sudo gem install -n /usr/local/bin fastlane
- 查看当前fastlane版本
fastlane --version
- 查看所有action
fastlane actions
cd到你的本地组件仓库的根目录
- 初始化fastlane
fastlane init
不过这个步骤对我们来说可以跳过,在init后提示你输入一些东西,包括上传需要用到的APPLE ID什么的一堆东西,由于我们并不涉及这些,所以我们使用更方便的方式
# 创建一个fastlane文件夹
# 进入fastlane目录
# 创建一个Fastfile文件
mkdir fastlane
cd fastlane
touch Fastfile
文章图片
屏幕快照 2018-06-05 16.41.52.png 1、修改Fastfile
desc 'EmojiToolModelTool 航道用来自动化升级维护私有库'
lane :EmojiToolModelTool do |options|tagNum = options[:tag]
podspecName = options[:specName]# 航道上需要执行的操作
# 具体action到 https://docs.fastlane.tools/actions 上面查找
# 这里的路径以仓库根目录为准# 1、修改spec文件(修改s.version,s.description等)
# 2、pod install (使Example与pod下来的库产生关联)
cocoapods(
clean: true,
podfile: "./Example/Podfile"
)# 3、提交本地仓库代码至远程仓库
git_add(path: ".")
git_commit(path: ".", message: "upgrade repo")
push_to_git_remote# 4、打标签,并提交至远程
add_git_tag(
tag: tagNum
)
push_git_tags# 5、验证spec,并提至私有索引库
pod_lib_lint(allow_warnings: true)
# 因为本地索引库repo的名字是基本上不会去改变的,所以这里直接写死 XDSpecs
# podspec的名字需要由外界传入
pod_push(path: "#{podspecName}.podspec", repo: "XDSpecs", allow_warnings: true)
![屏幕快照 2018-06-05 17.06.06.png](https://upload-images.jianshu.io/upload_images/1658726-cdc3496cf8e8c406.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)end
2 、验证Fastfile
fastlane lanes
文章图片
屏幕快照 2018-06-05 16.53.28.png
3、执行fastlane
需要在组件仓库的根目录下执行,进入到fastlane的同级目录下
cd EmojiToolModel
文章图片
屏幕快照 2018-06-05 16.55.55.png
- 3.1 然后执行
#EmojiToolModelTool : 是你自定义的航道名称(在上面修改Fastfile里定义的名称)
#tag : 是你要打的tag(tag要与spec文件的tag一致,注意这里不能存在已经存在的tag,如果存在会报错,后面会说)
#EmojiToolModel : 是你定义的spec文件名称fastlane EmojiToolModelTool tag:0.1.1 specName:EmojiToolModel
文章图片
屏幕快照 2018-06-05 17.06.06.png 四、自定义Action
- 以上的过程已经可以完成一整个自动化更新了,但是有一点需要注意的是,这个输入的tag可能会面临一个问题,那就是本地和远程都可能已经存在,即发生冲突,这个时候我们可以选择自动删除本地和远程冲突的那个tag,再重新上传当前tag
fastlane new_action
文章图片
屏幕快照 2018-06-05 17.09.42.png
- 完成后fastlane目录下就会多出一个名为actions的文件夹,里面存放的就是你自定义action
文章图片
屏幕快照 2018-06-05 17.11.02.png
打开remove_git_tag.rb,开始自定义我们的action吧,什么?不会语法怎么办?可以参考别人的嘛,上面给出的action的源码地址就有用武之地了,比如pod_push。这里我直接贴出我已经完成的主要代码
module Fastlane
module Actions
module SharedValues
REMOVE_TAG_CUSTOM_VALUE = https://www.it610.com/article/:REMOVE_TAG_CUSTOM_VALUE
endclass RemoveTagAction < Action
def self.run(params)
# 这里写要执行的操作
# params[:参数名称] 参数名称与下面self.available_options中的保持一致tagName = params[:tag]
isRemoveLocalTag = params[:rL]
isRemoveRemoteTag = params[:rR]# 定义数组 添加需要执行的命令
cmds = []# 删除本地标签
if isRemoveLocalTag
cmds <<"git tag -d #{tagName} "
end# 删除本地标签
if isRemoveRemoteTag
cmds << " git push origin :#{tagName}"end# 执行数组里的命令
result = Actions.sh(cmds.join('&'))
UI.success("Successfully remove tag #{tagName}")
return resultenddef self.description
"删除本地和远程的标签!!!"
enddef self.details
# Optional:
# this is your chance to provide a more detailed description of this action
"使用这个action,来删除本地和远程冲突的tag"
enddef self.available_options
# Define all options your action supports. # Below a few examples
[
# tagName : 标签名称description : 描述optional : 是否可选is_string : 是否是字符串
FastlaneCore::ConfigItem.new(key: :tag,
description: "删除的标签名称",
optional: false,
is_string: true),# rL(remove Local) : 标签名称description : 描述optional : 是否可选is_string : 是否是字符串
FastlaneCore::ConfigItem.new(key: :rL,
description: "是否删除本地标签",
optional: true,
is_string: false,
default_value: true),# rR(remove Remote) : 标签名称description : 描述optional : 是否可选is_string : 是否是字符串
FastlaneCore::ConfigItem.new(key: :rR,
description: "是否删除远程标签",
optional: true,
is_string: false,
default_value: true)
]
enddef self.output
# Define the shared values you are going to provide
# Example
[
['REMOVE_TAG_CUSTOM_VALUE', 'A description of what this value contains']
]
enddef self.return_value
nil
# If your method provides a return value, you can describe here what it does
enddef self.authors
# So no one will ever forget your contribution to fastlane :) You are awesome btw!
["CodeST"]
enddef self.is_supported?(platform)
# you can do things like
#
#true
#
#platform == :ios
#
#[:ios, :mac].include?(platform)
# platform == :ios
end
end
end
end
3、查看action描述
- 验证我们写的这个action是否有错
fastlane action remove_tag
文章图片
屏幕快照 2018-06-05 17.23.04.png
- 验证成功后可以完善自己的
fastlane
- 新增3.1
desc 'EmojiToolModelTool 航道用来自动化升级维护私有库'
lane :EmojiToolModelTool do |options|tagName = options[:tag]
podspecName = options[:specName]# 航道上需要执行的操作
# 具体action到 https://docs.fastlane.tools/actions 上面查找
# 这里的路径以仓库根目录为准# 1、修改spec文件(修改s.version,s.description等)
# 2、pod install (使Example与pod下来的库产生关联)
cocoapods(
clean: true,
podfile: "./Example/Podfile"
)# 3、提交本地仓库代码至远程仓库
git_add(path: ".")
git_commit(path: ".", message: "upgrade repo")
push_to_git_remote# 3.1 验证tag是否存在,如果存在,应该深处本地标签和远程标签
if git_tag_exists(tag: tagName)
UI.success("发现tag:#{tagName} 已经存在,即将执行,删除操作")
remove_tag(tag:tagName)
end# 4、打标签,并提交至远程
add_git_tag(
tag: tagName
)
push_git_tags# 5、验证spec,并提至私有索引库
pod_lib_lint(allow_warnings: true)
# 因为本地索引库repo的名字是基本上不会去改变的,所以这里直接写死 XDSpecs
# podspec的名字需要由外界传入
pod_push(path: "#{podspecName}.podspec", repo: "XDSpecs", allow_warnings: true)
end
5 . 最后验证
- 查看已经存在的tag
git tag
- 用工具删除已经存在的tag
fastlane EmojiToolModelTool tag:0.1.3 specName:EmojiToolModel
文章图片
屏幕快照 2018-06-05 18.00.52.png
推荐阅读
- SpringBoot调用公共模块的自定义注解失效的解决
- python自定义封装带颜色的logging模块
- 列出所有自定义的function和view
- 人脸识别|【人脸识别系列】| 实现自动化妆
- Spring|Spring Boot 自动配置的原理、核心注解以及利用自动配置实现了自定义 Starter 组件
- 自定义MyAdapter
- Android自定义view实现圆环进度条效果
- Flutter自定义view|Flutter自定义view —— 闯关进度条
- js保留自定义小数点
- django|django 自定义.save()方法