fastlane 实现自动化更新远程私库

当我们的远程私有库集成完毕之后,后期可能需要不断的维护更新升级。
如果你对远程私有库不是很了解,建议先了解一下:
<a href="http://www.jianshu.com/p/db64c9a543a4">教你一步步用CocoaPods创建远程私有库</a>

远程私有库后期的相关维护升级的步骤是:
1、拉取远程仓库的代码

git pull

2、将相关封装的代码升级完毕后,更新到Example项目中,进行库验证
进入到Example路径下面

image.png
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入门:安装篇


简单大概的说一下fastlaneAction实现:

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的最下面

image.png

#################################################################

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转化相关格式

image.png

当然了,也可以在终端看到相关的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的名称

image.png

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文档

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容

  • 目前比较流行的组件化开发,针对多个 app 要用同一套代码,将其做成 pod 仓库是比较好的解决方案。代码只有一份...
    ripperhe阅读 5,395评论 8 39
  • 作为架构师的我们常常要面临的一个难题就是技术选型。现在无论是商业项目也好,开源项目也好,可供选择的方案实在是太多,...
    老邢Thierry阅读 4,845评论 17 52
  • fastlane运行所需要的环境: OS X 10.9以上 Ruby 2.0 以上 Xcode 拥有一个开发者账号...
    阿姣_0405阅读 2,932评论 0 4
  • 背景 我们都知道将开发好的APP发布到AppStore的流程大概是:编译->打包IPA上传->填写应用更新数据->...
    Mark_Guan阅读 2,728评论 16 55
  • 昨夜十点余,吾渐进梦乡。忽听楼下门开声,诧异何人。正惑间,熟耳沙哑声高呼:“大王来也!大王来也!”吾窃笑于被...
    城门下阅读 238评论 2 0