在第一次组件化的时候,须要执行不少操做,这些操做能够在【iOS 组件化开发(一):远程私有库的基本使用】,这里就再也不赘述,在组件化后的重复性操做就是升级,而升级这个过程是如出一辙的。那么,咱们有什么办法能够很方便的搞定这一过程来节约咱们大量的时间呢?git
修改完核心代码后,一共还须要作如下几步:
一、修改spec文件(修改s.version,s.description等)
二、pod install
(使Example与pod下来的库产生关联)
三、提交本地仓库代码至远程仓库
四、打标签,并提交至远程
五、验证spec,并提至私有索引库github
Fastlane文档说明 Fastlane是一个ruby脚本集合,它能够按照咱们指定的路线,在指定位置执行咱们所要执行的操做。这里咱们称这样的路线为「航道(lane)」,这样的操做称为「Action」ruby
Action是Fastlane自动化流程中的最小执行单元,用来执行Fastlane脚本中的命令,关于更多的描述能够到Actions - fastlane docs查看,里面也介绍了经常使用的action有哪些,顺带附上action的源码地址,这个源码在后面自定义起参考做用bash
brew update
brew install ruby
复制代码
sudo gem install -n /usr/local/bin fastlane
复制代码
fastlane --version
复制代码
fastlane actions
复制代码
cd到你的本地组件仓库的根目录微信
fastlane init
# 建立一个fastlane文件夹
# 进入fastlane目录
# 建立一个Fastfile文件
mkdir fastlane
cd fastlane
touch Fastfile
复制代码
desc '描述航道做用'
lane :航道名称 do |options|
// options 能够用来传递参数
// 示例:varName = options[:name]
// 航道上须要执行的操做
end
复制代码
航道上要扫描的操做能够到Actions上查找,能够经过关键字搜索,以下图 工具
这里附上本人的Fastfile内容:组件化
desc 'LXFUpdatePodTool 航道用来自动化升级维护私有库'
lane : LXFUpdatePodTool do |options|
tagNum = options[:tag]
podspecName = options[:specName]
# 航道上须要执行的操做
# 具体action到 https://docs.fastlane.tools/actions 上面查找
# 这里的路径以仓库根目录为准
# 一、修改spec文件(修改s.version,s.description等)
# 二、pod install (使Example与pod下来的库产生关联)
cocoapods(
clean: true,
podfile: "./Example/Podfile"
)
# 三、提交本地仓库代码至远程仓库
git_add(path: ".")
git_commit(path: ".", message: "upgrade repo")
push_to_git_remote
# 四、打标签,并提交至远程
add_git_tag(
tag: tagNum
)
push_git_tags
# 五、验证spec,并提至私有索引库
pod_lib_lint(allow_warnings: true)
# 由于本地索引库repo的名字是基本上不会去改变的,因此这里直接写死 LXFSpecs
# podspec的名字须要由外界传入
pod_push(path: "#{podspecName}.podspec", repo: "LXFSpecs")
end
复制代码
fastlane lanes
复制代码
须要在组件仓库的根目录下执行 post
fastlane LXFUpdatePodTool tag:0.1.1 specName:LXFMain
复制代码
整个执行过程不超过30秒~测试
以上的过程已经能够完成一整个自动化更新了,可是有一点须要注意的是,这个输入的tag可能会面临一个问题,那就是本地和远程均可能已经存在,即发生冲突,这个时候咱们能够选择自动删除本地和远程冲突的那个tag,再从新上传当前tagui
fastlane new_action
复制代码
按要求输入Action名称
完成后fastlane目录下就会多出一个名为actions的文件夹,里面存放的就是你自定义action
打开remove_git_tag.rb,开始自定义咱们的action吧,什么?不会语法怎么办?能够参考别人的嘛,上面给出的action的源码地址就有用武之地了,好比pod_push。这里我直接贴出我已经完成的主要代码
# 可使用 fastlane action remove_git_tag 来参看详细描述
def self.run(params)
# 这里写要执行的操做
# params[:参数名称] 参数名称与下面self.available_options中的保持一致
tagNum = params[:tagNum]
rmLocalTag = params[:rmLocalTag]
rmRemoteTag = params[:rmRemoteTag]
command = []
if rmLocalTag
# 删除本地标签
# git tag -d 标签名称
command << "git tag -d #{tagNum}"
end
if rmRemoteTag
# 删除远程标签
# git push origin :标签名称
command << "git push origin :#{tagNum}"
end
result = Actions.sh(command.join('&'))
UI.success("Successfully remove tag 🚀 ")
return result
end
def self.description
# 对当前脚本的简单描述
"删除tag"
end
def self.details
# 对当前脚本的具体描述
"使用当前action来删除本地和远程冲突的tag"
end
def self.available_options
# 用来传递参数
[
FastlaneCore::ConfigItem.new(key: :tagNum,
description: "输入即将删除的tag",
is_string: true),
FastlaneCore::ConfigItem.new(key: :rmLocalTag,
description: "是否删除本地tag",
optional:true,
is_string: false,
default_value: true),
FastlaneCore::ConfigItem.new(key: :rmRemoteTag,
description: "是否删除远程tag",
optional:true,
is_string: false,
default_value: true)
]
end
def self.authors
# 做者姓名
["LinXunFeng"]
end
复制代码
一样,这里先cd到组件库的根目录下执行,缘由是这个自定义action只存在当前根目录下的fastlane中,其它fastlane的非自定义的action就不用在当前根目录下操做~
fastlane action remove_git_tag
复制代码
先来看看当前组件库已存在的tag
git tag
复制代码
能够看到,我是已经有一个0.1.1
版本的了。这时咱们再来执行一次LXFUpdatePodTool航道
fastlane LXFUpdatePodTool tag:0.1.1 specName:LXFMain
复制代码
LXFUpdatePodTool 已经传到个人GitHub上,须要的同窗就拿走吧,顺手给个Star咯 Orz