iOS组件化实践及cocoapods私有库/公有库

组件化的优点
  • 为什么需要组件化开发?
    1.将不同功能、模块的代码分离出来,有利于大型项目的解耦,像插件似的组装整个复杂的项目架构,更方便后续拆分或者扩展。
    2.加快项目的编译速度。组件化的模块都可以单独编译成一个静态SDK,集成到项目中,由于SDK是编译过的代码,所以不需要再次编译,大大提高编译速度,开发效率。
    3.对于一些公关的基础组件可以通用到不同的项目中,可以直接组装到的项目中直接使用,而不用重新造轮子。

  • iOS组件化工具-cocoapods
    cocoapods 是iOS代码管理平台,类似于Java中的Maven。
    cocoapods可以建立私有、共有的配置仓库repo,对于一些通用的,跟具体业务无关的组件我们可以建立public的repo发布在git上;而对于跟业务有关的则建立private的repo发布在git托管平台上。

iOS组件的划分

组件的划分是在组件化之前最先要做的工作,也是非常重要的一环。组件划分不细致会造成很多冗余代码,或者划分的太细致则会加倍增加工作量。换句话说,组件的划分决定了整个工程的质量。

一般组件划分从这几个方面考虑:

  • 基础通用组件:例如我们在Pods中的AFNetworking、SDWebImage、FMDB,以及常用到的Category、页面路由等。
  • 基础业务组件:类似用户行为统计、异常上报、推送服务、消息通道、支付、通用宏定义头文件这种根据业务为基础的服务SDK作为基础业务组件。
  • UI公共组件:比如Alert、Toast、Sheet等。
  • 独立业务组件:项目中相对独立的业务,比如即时聊天IM模块、电商APP中的购物车模块、订单模块等。

总结如下图:

image.png
搭建公用、私有仓库 repo
  • cocoapods建立私有代码的配置仓库

配置仓库不是具体某个SDK代码存放的仓库,它是所有你创建的私有代码SDK的索引仓库。不要搞混了。

首先,为了便于大家理解什么是cocoapods的索引仓库,我们先用命令查看cocoa-pods本机repo路径:
打开终端,输入一下命令:

pod repo

这个是我本机的:/Users/kaiweixu/.cocoapods/repos/master
,可以看到repos目录下目前只有一个master,master标识cocoapods的官方索引库。
如果我们添加了自己的索引库后,就是这样:

image.png

可以看到和master并列的有很多个目录,每一个(如PublicSpecs)都是一个索引库,每个索引库里面存放了具体不同SDK的Git路径。

  • 添加一个索引库

添加索引库使用如下命令:

pod repo add [你要添加的索引库名称] [索引库的Git地址]

其中,[索引库的Git地址] 是需要你在Git托管平台上建立一个项目。
托管平台指的是想github 、 码市、gitlab等都可以,以下我都已我的github平台为例。

建立索引仓库

如果,你想建立公开的,别人也能用你的索引库的,那你就选public,反之,则选择private。

license可以选择MIT。

这样就创建了一个git仓库了,然后把这个仓库的git地址copy复制到刚才的终端命令中[索引库的Git地址]。

私有仓库索引添加就完成了,但是,索引仓库是空的,所以,我们就开始创建具体的SDK仓库吧。

创建SDK仓库
  • 首先,第一步选择一个你准备存放该SDK的目录,然后在终端cd到这个目录。
    这个目录是具体存放SDK的代码了,跟上面索引库是2个仓库,不要搞混了,再次强调。

  • 创建SDK Lib命令

在终端输入以下命令:

pod lib create [MySDK]

[MySDK]就是你要创建的SDK名字,MySDK是我示例,你可以改成任何名字。

接下来,会提示你选择swift还是Objc,根据自己具体用哪种语言编写SDK选择就好;
后面也是类似,是否添加测试选择YES,会加入测试工程,方便调试SDK,其他的选择默认即可。最后会自动生成一个SDK项目工程并自动打开了Xcode。

我以我的某个SDK目录为例如图:

image.png

Classes目录里面存放的是你SDK的代码,默认有个ReplaceMe的文件,把这个文件移除,然后倒入你自己的SDK源代码放这里。
Example是一个测试工程,可以用来测试SDK是否正确。
KWCategories.podspec 这个很重要,是SDK的配置,我们打开看看:


配置文件

我们要修改一下这个文件
s.version:标识SDK的版本,每次更新SDK,都需要修改版本号。
s.summary: SDK简要描述
s.description:SDK详细描述

s.source: SDK仓库的git地址,需要再git平台建立。这个类似于索引仓库,同样需要再建立一个git仓库,然后copy复制git地址到这里。注:不是上面的索引仓库

s.ios.deployment_target:最低支持iOS的版本,如果iOS8

s.depandency: 需要依赖的别的库,可以是公共的,也可以是私有的。可以添加多个。

上面配置文件修改完以后,cd 到Example目录,执行:

pod install

这样测试工程就倒入了您刚才classes里面的源码,我们打开这个测试工程,编译一下,如果没有问题,将显示编译成功!

验证SDK是否合法

使用命令:

pod spec lint --allow-warnings

如果没有error输入,则表示验证成功。

将SDK代码上传至git仓库

添加本地git的origin,然后commit、push到git远程服务器上。最后别忘了添加tag,tag要与上面配置文件的s.version保持一致

$ git remote add origin http://git.[weiyankeji.cn/APP/ios/WYLib.git](http://weiyankeji.cn/APP/ios/WYLib.git)
$ git add .
$ git commit -m "Initial commit"
$ git push -u origin master
//tag 值要和podspec中的version一致
$ git tag 0.1.0
//推送tag到服务器上
$ git push --tags
向Spec Repo提交podspec

最后,我们将制作好的SDK的git地址推送到我们的索引库中,使用如下命令:

pod repo push [开头建立的索引库名称] [MySDK].podspec --sources='[索引库在git上的地址]' --allow-warnings

如果您的SDK有依赖其他索引库的地址,比如依赖AFNetworking等第三方库,则需要带上AFNetworking所在的索引库,由于AFNetworking在官方索引库:https://github.com/CocoaPods/Specs.git

所以如果有依赖,上述命令应该修改为:

pod repo push [开头建立的索引库名称] [MySDK].podspec --sources='[索引库在git上的地址],[AFNetworking所在的索引库]' --allow-warnings

要依赖的索引库以,分割放在后面即可。

以上,一个索引库和一个公用SDK库就制作好了,你可以通过命令:

pod search [MySDK]

在网上就能搜到这个第三方库,然后直接把它集成到你任何项目中使用啦!

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