CocoaPods组件化实践

前言

工程项目越来越大,团队成员越来越多的情况下,组件化是趋势,组件化好处就不细说了.
实施组件化之前我们首要的就是组件拆分,如何拆分拆分原则不是文章重点,假定拆分完之后我们有如下

  • 开发流程中我们会有一个主工程(所谓的壳工程)MainApp
  • 业务组件:Business_a
  • 基础组件:BaseAppKit 内部依赖第三方库AFN
  • 远程索引库my_proj_spec

MainApp依赖business_a
Business_a依赖BaseAppKit
BaseAppKit依赖AFN
当然实际大型项目开发会有很多的业务组件、通用业务组件、基础组件、路由、日志等。
接下来就开始我们简单的组件化搭建吧

创建索引仓

组件化之前,我们首先要理解组件化的基本流程

pod 'SDWebImage'

本质上去CocoaPods官方https://github.com/CocoaPods/Specs.git
中去寻找对应的第三方库的.podspec文件,进而解析文件依赖源码资源等配置信息,拉进你的工程

pod repo

pod repo查看本地repo仓

master
- Type: git (master)
- URL:  https://github.com/CocoaPods/Specs.git
- Path: /Users/pengxin/.cocoapods/repos/master

会在这里搜索SDWebImage的spec文件,pod setup之所以慢就是拉取官方的仓到本地,知道这个原理后,如果pod setup很慢把已经下载好的repo拖进你的电脑也是一种解决方法

创建索引库my_proj_spec

首先创建我们私有的远程索引仓my_proj_spec,我已在码云上已创建好git@gitee.com:xxx/my_proj_spec.git
然后把my_proj_spec索引库添加到本地

pod repo add my_proj_spec https://gitee.com/xxx/my_proj_spec.git

添加后 我们执行下pod repo查看下



以后组件有更新,我们本地可以更新下索引

pod pod repo update my_proj_spec

创建基础组件库BaseAppKit

  • 这里我们简单用GitHub模板来创建一个工程
pod lib create BaseAppKit

根据提示和你的需要下一步即可
创建完后我们编辑BaseAppKit.podspec让其依赖AFN

s.source = { :git => 'git@gitee.com:xxx/BaseAppKit.git', :tag => s.version.to_s}//这个地方不要错了
s.dependency 'AFNetworking'

BaseAppKit.podspec这个文件就是你的组件发布配置文件,将来会更新推送到远程my_proj_spec仓库对外下载更新的,具体细节展开篇幅较多了,如果不熟悉的自行谷歌、百度吧。
我们执行pod install看下库工程是否下载依赖了AFN

  • 提交源代码并打tag
注意这里的tag必须跟podspec中的tag一致,因为CocoaPods是通过podspec文件中的tag去找源文件的,如果tag对应不起来就会验证失败。打好tag提交远端
git add -A && git commit -m "Release 0.1.0"
git tag 0.1.0
git remote add origin git@github.com:username/BaseAppKit.git//关联远程库
git push --tags
git push -u origin master
  • 验证spec
    有两种方式验证
    本地验证:
pod lib lint --allow-warnings

联网验证

pod spec lint --sources='git@gitee.com:xxx/my_proj_spec.git,https://github.com/CocoaPods/Specs' --allow-warnings

建议大家都⽤用联⽹网验证
这里可选参数有:

--allow-warnings 允许警告
--sources=‘master,privateSpecs:指定源 比如你的私有pod同时依赖了公有库和私有库你必须指定源才行,因为默认会去公有源查找对应的依赖
--use-libraries 如果使用了静态库 记得加上
  • 推送到Spec仓库
pod repo push my_proj_spec BaseAppKit.podspec --allow-warnings

同样的加上上⾯面验证时使⽤用到的可选参数

创建业务组件Business_a

创建过程同上略过

  • 编辑BaseAppKit.podspec
s.dependency 'BaseAppKit'
  • 编辑Podfile
    因为依赖的是我们自己的私有库所以要特别指定源
source 'https://gitee.com/frankpx/my_proj_spec.git'
source 'https://github.com/CocoaPods/Specs.git'

pod install 试试看有没有正确下载你的私有组件。
当然了较大团队内部还可以把CocoaPods公有库的spec文件迁移发布到公司内部远端私有spec上,这样上面就可以不用添加source 'https://github.com/CocoaPods/Specs.git'官方索引源,这样团队其它成员在私自引入第三方库上就会有所控制,流程上面更规范些。
之后有时间会继续写一些延续的实践,组件化本地联调(创建dmeo工程和framework工程以及之间的联调、组件项目中资源文件管理、路由相关工程实践、fastlane自动化证书管理、打包等),在此先立个flag,就当先给自己备忘下吧

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

推荐阅读更多精彩内容