组件化的优点
为什么需要组件化开发?
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中的购物车模块、订单模块等。
总结如下图:
搭建公用、私有仓库 repo
- cocoapods建立私有代码的配置仓库
配置仓库不是具体某个SDK代码存放的仓库,它是所有你创建的私有代码SDK的索引仓库。不要搞混了。
首先,为了便于大家理解什么是cocoapods的索引仓库,我们先用命令查看cocoa-pods本机repo路径:
打开终端,输入一下命令:
pod repo
这个是我本机的:/Users/kaiweixu/.cocoapods/repos/master
,可以看到repos目录下目前只有一个master,master标识cocoapods的官方索引库。
如果我们添加了自己的索引库后,就是这样:
可以看到和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目录为例如图:
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]
在网上就能搜到这个第三方库,然后直接把它集成到你任何项目中使用啦!