fastlane 实现自动化更新远程私库
当我们的远程私有库集成完毕之后,后期可能需要不断的维护更新升级。
如果你对远程私有库不是很了解,建议先了解一下:
<a href="http://www.jianshu.com/p/db64c9a543a4">教你一步步用CocoaPods创建远程私有库</a>
远程私有库后期的相关维护升级的步骤是:
1、拉取远程仓库的代码
git pull
2、将相关封装的代码升级完毕后,更新到Example项目中,进行库验证
进入到Example路径下面
pod install
3、修改相应的.podspec文件
至少升级一个version版本,其他的相关参数,根据实际情况进行修改
image.png
4、提交本地代码到本地仓库
git add .
git commit -m 'updata'
5、将本地仓库的更新的代码更新到远程仓库
git push origin master
6、在本地仓库添加tag,添加的tag和.podspec文件中的version对应
git tag 0.1.5
7、将tag更新到远程仓库
git push --tags
8、检测当前的.podspec的文件格式
pod spec lint
9、将当前的.podspec文件更新到相关的私有spec仓库中
pod repo push XXX xxxx.podspec
每次更新的时候都需要走这么多步骤,当然了上面的步骤仅供参考,有些步骤的顺序也是可以修改的,比如你可以在第5条之前更新第8条。或者说第8条可以不执行,等等。但是上面的步骤实现下来能保证完成升级远程私有库的工作。
但是,这么多的步骤执行下来实在是有点浪费时间,就像打包一样,难吗?不难,就是麻烦,而且你得一直盯着一步步的执行完。
下面我们尝试使用fastlane来实现上面的这些操作的步骤
fastlane是什么?懒人的福利,实现各种自动化操作的工具。fastlane可以干什么?fastlane是用Ruby语言编写的一套自动化工具集和框架,每一个工具实际都对应一个Ruby脚本,用来执行某一个特定的任务,而Fastlane核心框架则允许使用者通过类似配置文件的形式,将不同的工具有机而灵活的结合在一起,从而形成一个个完整的自动化流程。
首先看一下fastlane的安装步骤:跟着一步步走就好了
Fastlane入门:安装篇
简单大概的说一下fastlane的Action实现:
Fastlane本身包含两大模块,一个就是Action,另外一个就是内核部分了。Action是Fastlane自动化流程中的最小执行单元<也就是一条条的指令,比如下面用到的git_add ,pod_install等等>,这些命令背后都对应一个用Ruby编写的脚本。通过这些Action的自由的组合生成一条可以执行的lane,也就是对应下来一个个顺序排列的脚本。运行的时候会顺序进行执行,如果都通过的话,就会一条条的往下走。
安装完fastlane之后,具体的实现步骤如下:
1、给项目配置fastlane
1.1、到项目的主目录下面,然后运行
fastlane init
然后会让你输入你的
(1)、AppId
(2)、AppId 对应的密码
(3)、App Identifier (com.krausefx.app):
(4)、Would you like to create your app on iTunes Connect and the
Developer Portal? (y/n)
(5)、Optional: The scheme name of your app (If you don't need one, just
hit Enter):
这里说一下我怎么写的
(1)、(2)、(3)我这边是瞎写的,因为都用不到,这里不需要打包,不需要获取这三个信息.
(4)选择 n
(5)直接输入回车,不需要
执行完毕之后的效果
image.png
2、将刚开始上面列出的步骤翻译成相关的命令<Action>,方便执行
2.1、使用相关的文本编译器打开fastlane/Fastfile,我这边使用的是Xcode。
将下面的文本<是我提前写好的Action集合组成的一条可以执行的lane>粘贴到fastfile的最下面
#################################################################
desc "通过 upgradePrivateSpec 可以快速的对远程私有库完成升级工作"
lane :upgradePrivateSpec do |options|
#外界输入的tag标签的值
tagName = options[:tag]
# 输入的podspec的名字
specName = options[:specName]
# 输入的 repo name
repoName = options[:repo]
podspecPath = "#{specName}.podspec"
#具体在这个文件上执行哪些行为
# 1、git pull
git_pull
# 2、pod install
cocoapods(
clean: true,
podfile: "./Example/Podfile"
)
# 3、git add .
git_add(path: ".")
# git commit -m 'message'
git_commit(path: ".", message: "Version Bump")
# git push origin master
push_to_git_remote
# 4、git tag ...
add_git_tag(
tag: tagName
)
# git push --tags
push_git_tags
# 5、pod spec lint 检测当前spec的格式
pod_lib_lint(allow_warnings: true)
# pod repo push XXX xxxx.podspec
pod_push(path: podspecPath, repo: repoName, allow_warnings:true)
end
3、分享下相关的格式的写法经验
3.1、主要了解的就是怎么把上面的一个个的git或者pod命令翻译成上面的Action格式
比如 git add . ==== git_add(path: ".")
具体的参考文档参考:https://docs.fastlane.tools/actions/
相关的替换方法如下:
比如现在想查找第一步的做法
git pull转化相关格式
当然了,也可以在终端看到相关的Action的详情信息
fastlane action 名称
image.png
3.2、上面第二步的pod install是更新Example中的pods,通过Podfile进行相关的更新,所以下面的podfile: "./Example/Podfile"必须对应Podfile的位置
cocoapods(
clean: true,
podfile: "./Example/Podfile"
)
3.3、动态输入参数,和变量的使用
image.png
剩下的命令就可以对照着原生的pod或者git操作进行去文档查询替换就好了,上手还是挺容易的。
4、将当前的目录切换到主项目<也就是.podSpec所在的目录>,校验一下我们刚刚写的命令格式是否有问题
fastlane lanes
image.png
如果没出什么错,万事大吉了,出错的话,根据相关的提示进行修改
5、运行我们自己写的lane,目录当然还是在主项目下
fastlane upgradePrivateSpec tag:0.1.7 specName:DownLoader repo:PrivateSpecsGather
upgradePrivateSpec是我们定义的lane的名称
tag:0.1.7 specName:DownLoader
tag、specName、repo是运行的时候输入的参数。输入参数的格式是tag:0.1.7多参数中间用空格分隔
这三个参数分别代表的是,当前tag值,.podspec文件的名称,远程保存spec列表的私有库名称
匹配图解释:
image.png
运行结果:
image.png查看执行结果是不是正确:
image.png image.png
以后升级完毕了,配置好该lane,运行命令,一句话搞定。
6、自定义Action
有的时候官方提供的所有的Action并不能满足我们的需求,这个时候就需要我们自己自定义Action用来调用了,我感觉这也是fastlane一个很好的功能。
比如我们还是依据上面的示例来实现一个Action,我们在给项目打tag的时候,先判断一下当前的项目是不是已经存在了相同名称的tag,如果有的话,删除掉,然后再进行下一步操作。
自定义Action详情可以参考:
fastlane 实现自定义Action
扩展其他的自动化操作:
<a href="http://www.jianshu.com/p/6728917b4c91">fastlane实现自动化打包上传测试平台</a>
相关参考资料:
fastlane文档