代码管理 | 创建并管理自己的公有Cocopods库

前言

随着项目的发展,版本迭代,代码的重构,我们项目中一般会有很多有业务功能行性公共的组件,
app中可能多处都会使用到,甚至别的项目中也需要使用。比如我们 A 项目中有一个语音评测的功能,
前期只是在 A 项目里面需要用到,后面在另一不同项目绘本阅读需要用到相同语音评测的功能。
此时我们一般有两种做法,

一是直接将这部分代码copy到绘本阅读这个项目中;
二是将语音评测这部分逻辑给抽取出来,然后在分别在两处使用

很明显在项目初期,或者时间紧迫的情况下,第一种方式很好的能够胜任工作,我们前期也是这么做的,

但是我发现到了随着项目的推移和发展,这样做的时间成本太大了,效率也很低下,有很多隐患(评测逻辑一旦有变动,你需要改动两次,而且你没法保证两次的改动一致)。

所以把公司的公共组件抽离出来,使用 Cocoapods 集成管理是一种非常好的解决方案,这样的话,后续只要维护更新好这个公共组件,所有使用到的工程 pod install/pod update 下即可使用到最新的版本,达到一处更改多处使用的效果而且工程管理更加高效。

一、注册CocoaPods账户信息

想要创建一个开源pod库, 首先我们需要注册CocoaPods, 这里使用trunk方式, 作为一个iOS开发人员你一定安装了CocoaPods, 那么只需要在终端执行:

pod trunk register 邮箱地址 '用户名' --verbose

这里我们一般使用github邮箱和用户名, 然后在你的邮箱中会收到确认邮件, 在浏览器中点击链接确认即注册成功, 成功之后可以终端执行:

查看自己的注册信息, 以后当你有了自己的开源Pod库, 也可以用此方式随时查看自己发布过的Pods;

# pod注册信息,开源pod库
pod trunk me 

二、创建共享库的文件仓库

这里从头创建一个共享库,以便对整个创建过程更加清楚。在terminal中创建一个全新的工程。这个文件仓库是你公共类库的维护仓库,新版本和修改可以通过这个仓库发布。

共享库需要三个必不可少的部分:

A. 共享文件夹(文件夹存放着你要共享的内容, 也就是其他人pod得到的文件, 
  .podspec文件中的source_files需要指定此文件路径及文件类型);
B. LICENSE文件(默认一般选择MIT);
C. 库描述文件.podspec(本库的各项信息描述, 需要提交给CocoaPods,
   pod通过这个文件查找到你共享的库,).
在terminal  中输入
$ pod lib create 新的库名

在创建库的时候,会询问你关于对新建库的一些要求,根据自己的要求配置好就OK,可以参考Using Pod Lib Create

这是我的设置

三、 配置好文件仓库后上传到公用仓库github | gitlab

把自己共享库需要的文件放置到工程中的指定位置

之后,将新建的项目push到远程服务端github | gitlab。具体的操作需要先在github上创建一个空的repo,然后使用命令行提交。

这里不用勾选即可
git add -A
git commit -m "first commit"
//这里替换成自己的 github上的项目地址
git remote add origin https://github.com/fangmeigithub/JWJOpenServe.git 
git push -u origin master

提交成功后,github上面的新建工程变为类似下图这样的样子。

四、编辑并验证 .podspec文件

这里也有俩值得注意的地方;

s.version          = '1.0.0'  //这里的版本和之后提交到github上的release 版的tag必须一致
s.summary          = '進无尽的公开库'  //这里必须修改,不修改的话下面的验证时会报错

编写完成后, 我们需要验证.podspec文件的合法性, 这里需要终端cd到.podspec文件所在文件夹, 执行:

pod lib lint JM_ActionSheet.podspec
不修改 s.summary 就会报错

如有警告或者错误请重新检查你的编写正确性, 如果没有问题会出现

修改 s.summary后验证通过

五、给文件仓库打tag, 发布一个release版本

一切准备就绪后, 我们需要在你的git仓库里面存在一个与.podspec文件中一致的version, 这里你可以在你的git仓库中的releases一项去手动发布, 也可以在当前文件夹下使用终端命令【发布之前可以把git上新的变更先提交发布出去】:

git tag -m 'first release' '1.0.1'
//推送tag到远端仓库
git push --tag 

成功之后即可在你的releases里面看到这个tag的版本.

六、发布自己的库描述文件podspec给cocoapods

同样在这个文件夹下, 终端执行:

pod trunk push JWJOPenKit.podspec 

这一步需要等很久,如果最后没有报错的话:
将你的库文件.podspec文件提交到公有的specs上面, 这一步做的操作是验证你的podspec文件是否合法+提交到specs中(等同于fork;commit;push)+将上传的podspec文件转成json格式文件),成功后会出现Congrats信息噢~

至此,你的共享库就可以被其他人通过 Cocoapods 所使用了。

七、更新维护podspec

如果有错误或者需要迭代版本,修改工程文件后推送到远端仓库后, 需要修改podspec中的版本号, 并重新打tag上传, 再进行新一轮的验证和发布, 当然, 创建一个演示demo工程供其他开发者下载查看并不会影响我们的pod库。【在示例文本库中制作演示demo好像需要导入组件的源文件,使用 pod好像导入不进来,无法直接使用。当然你也可以把组件源码文件库和Dome分开,把 Dome作为对外公开的工程演示用例】

八、关于查找和使用新创建的库

当你发布共享库成功后,是可以马上供其他人使用的,但是当你自己使用 pod search XXX的时候却发现本地搜索不到:

解决办法:
pod setup成功后生成的~/Library/Caches/CocoaPods/search_index.json文件, 是用来查找的索引文件, 终端输入:

rm ~/Library/Caches/CocoaPods/search_index.json

删除~/Library/Caches/CocoaPods目录下的search_index.json文件, 删除成功后再执行:pod search 库名, 等待输出:Creating search index for spec repo 'master'.. Done! 稍等片刻就会出现你想要的结果~


参考文章

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

推荐阅读更多精彩内容