iOS组件化之Cocoapods私有库

组件化
● 为什么我们需要组件化
为了项目模块间的解耦、模块实现可重用、提升团队成员之间团队之间的协作开发效率。
● 并不是所有的项目都适合组件化
如果你的项目较小,模块之间交互简单耦合很少,模块不需要重用,团队规模很小,项目就没有必要做组件化。

组件化方案
cocoapods组件化:主要是利用 cocoapods 来进行 模块的远程管理,需要将项目上传三方托管平台,如 git (这里的组件化模块分为 公有库 和 私有库 , 对公司而言, 一般是私有库)
● 私有的意思是只有相对应权限的人才能访问,因为项目是公司的根本,正常人都不会选择开源公司的项目,只会开源对应的框架
概念解释:远程索引库、本地索引库、远程代码库、本地代码库;
● 远程索引库
每创建一个组件都会带一个 xxx.podspec 的索引文件,专门用来存放这些索引文件的库就叫做索引库。 我们需要将这些索引文件上传到远程索引库才能保证其他的同事能够拿来用;podspec文件为固定格式的索引文件,规范描述了Pod库的版本, 包括应从何处获取源,使用哪些文件,要应用的构建设置以及其他常规元数据(例如其名称,版本和说明)的详细信息;
● 本地索引库
与远程索引库对应,本地索引库用来存放本地索引文件的库,可通过命令 pod repo 查看你本地已经有哪些本地索引库;
● 远程代码库
用来存放准备组件化的代码,创建方式和创建远程索引库方式一样。这里我们把自己整理的相关代码组件化
● 本地代码库
在本地创建的组件代码库,最终要推到远端,与远程代码库对应
● 原理图
通过Podfile文件执行pod install或者pod update往iOS项目中导入第三方库,实际上是找到podspec文件中描述的git仓库, 然后从git仓库clone到本地的;

1663310134246-658f5d42-23bc-44dc-b106-e450491b763e.png

私有库创建流程

  1. 创建远程索引库
    在第三方托管平台(github,gitlab,码云 等)创建一个私有的库
    github创建远程索引库用来存私有组件的podspec索引文件
1663312620167-e780b61d-8c3d-4c93-bc50-f833605eeb23.png

远程索引库已经创建成功,可以看到远程索引库的地址


1663313476920-5f4a1fcb-7803-4e44-83ae-0a38689150a7.png
  1. 生成本地索引库,关联到远程索引库
    打开终端 pod repo 查看一下当前有哪些本地索引库(如果你之前没有创建过,应该只有一个master)


    1663313655288-406724db-6e7e-437b-a343-3c3dfa329fef.png

通过pod repo add <本地索引库的名字> <远程索引库的地址> ,创建本地索引库并和远程索引库做关联(注:本地索引库的名字建议和远程索引库起的名字一样)

1663313717927-895a25c1-acd7-41e3-a105-a2f65f8724ee.png

可以查看本地索引库的文件路径


1663314465858-672e40df-1cb5-4015-8ab4-fe953358018a.png
  1. 创建远程代码库
    创建远程代码仓库(和创建远程索引库的方式一样),创建一个FFCategoryKit的远程代码库,用来存放FFCategory组件的代码。同样获取到FFCategoryKit组件的远程代码库地址
1663314655816-1026f402-a1cd-4356-aabd-e8268970b635.png
1663314706256-5fca5203-0019-49ac-a9fe-133c6e4b7c3a.png
  1. 创建本地代码库
    选取路径,然后 pod lib create <组件名> 创建本地代码组件模版库(根据自身需求对提示信息做选择)
1663315037731-9b1e5b9d-612e-409d-916f-2f6c730f3984.png

编译运行通过看下效果。接着把要上传的组件库代码文件夹拖入到组件FFCategoryKit的classes路径下


1663316327004-155a8c71-cd0b-4662-ac6c-dbe60c9e1dd6.png

接着cd到Example下进行pod install (把刚才拖入到classes里的文件夹pod进来)

  1. 修改podspec文件
    编译组件工程看是否报错,编译通过后需要修改podspecs索引文件,一般需要修改下面几个问题
    a. 修改版本号
    b. 修改项目的简单概述和详细描述
    c. 修改homepage和source地址
    d. 添加依赖库
    修改前的状态如下图所示:
1663316540850-fc82ef4b-c9b9-4c0c-bbc7-d2c59b59ad7a.png

修改后:

1663316554485-1083bfc1-179c-4778-9192-1933ee5e35b1.png

6.提交代码到远端,打tag

  • git add .
  • git commit -m “xxx"
  • git remote add origin 远程代码仓库地址
  • git push origin master (新版分支为main)
  • git tag 版本号 (注:这里的版本号必须和podspec里写的版本号一致)
  • git push --tag origin master
1663318061852-924bec8d-43f7-4124-8242-7b0eb4ca9e2b.png

(推送时可能报错 Support for password authentication was removed on August 13, 2021,可按 https://blog.csdn.net/FatalFlower/article/details/119717823 解决)

验证podspec索引文件是否正确
首先,通过pod lib lint FFCategoryKit.podspec --verbose --allow-warnings 验证本地索引文件是否正确
也可以略过本地验证
直接通过pod spec lint --verbose --allow-warnings 命令验证podspec索引文件(既验证本地同时验证远程的podspec)
有时会遇到这样的错误
验证时发现source_files匹配不到文件
此时,去远程代码库看看对应的Classes是否为空

1663318553239-da65168b-248b-4c4b-a8ff-a60f3a016c31.png

验证通过后,pod repo push <本地索引库> <索引文件名> - -verbose - -allow-warnings 提交索引文件到远程索引库


1663318831431-32c9c30c-32f4-49ff-80e8-6f4e346821ca.png

本地也可以查看已成功


1663318868047-e28c7318-4205-4ec8-ab62-a0ecd0a49818.png

至此,spec索引文件,和组件代码都成功推到远端,接下来验证使用;
新建工程,修改podfile文件,把FFCategoryKit组件pod进来(注:需要在Podfile中指定组件远程索引库地址,如果不指定默认会从master的索引库查找就会报找不到组件)

1663319672048-9226e1c8-62b8-4cdb-b49f-6fc8e5cce25c.png

后续代码有版本更新操作:

  1. 代码改动后,参考 6.0 提交代码到远端打tag步骤,将本地代码改动同步到远端;
  2. spec文件验证通过后,pod repo push <本地索引库> <索引文件名> - -verbose - -allow-warnings 更新索引文件到远程索引库

参考文献:

CocoaPods Source 管理机制

IOS CocoaPods使用 及 问题解决

iOS pod 私有库的创建完整流程

CocoaPods 创建私有仓库(ObjC)

iOS开发 -- 组件化 之 Cocoapods私有库详解

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

推荐阅读更多精彩内容