最近参加GMTC全球移动技术大会听了滴滴iOS技术负责人李贤辉关于滴滴iOS客户端的架构演变之路很受启发,随着公司不断的壮大,无论是业务代码(如登录,注册,购买)还是功能代码(如网路层,数据库层,socket层)都在不断增加,所有代码都放到一个工程中,每次编译势必花费更多时间,而且如果公司有多个产品线,代码的复用率不高。如果把基础组件抽象成单个工程,直接编译成静态库,利用cocoapods管理,在主项目里引用资源文件,从而减少了编译的时间,并且提高代码的复用率。
整体思路:
1.创建一个私有spec repo 管理所有私有spec文件;
2.创建Pod所需要的项目工程文件,并且有可访问的项目版本控制地址;
3.创建Pod所对应的podspec文件;
4.验证podspec文件是否可用;
5.向私有的spec repo里添加podspec文件;
6.新建个项目测试自己的私有库;
7.更新podspec,建不同的版本;
1.创建一个私有spec repo
如果想利用pod安装私有库,那么就得创建和cocoapods官方一样的结构,我们想来看看cocoapods官方的结构,cocoapods所有公共库文件都存放在CocoaPods spec远端文件地址,如果在电脑上安装了cocoapods它会从这个地址clone一份到本地,每次pod update 都会更新这个本地仓库,首先先创建一个私有的库 ,由于github的私有仓库是收费的,这里用coding码市创建私有仓库,如果和其他人协同开发,只要把该仓库的权限添加给他就行。创建完远端的spec repo
在终端执行
pod repo add doctorpluse1Specs https://coding.net/wtlucky/doctorpluse1Specs.git
然后执行
open ~/.cocoapods/repos
会开看到在repos中创建了一个私有的仓库,master是cocoapods官方的
2.创建Pod的所需要的项目工程文件,并且有可访问的项目版本控制地址
(1).在coding码市在创建个仓库
一个仓库存放spec 文件 一个存源代码
记得添加LICENSE文件
(2).利用SourceTree clone到本地
(3).xcode command+shift+n 创建一个静态库项目
(4).把项目添加到SourceTree本地项目里
push 到 coding码市
mark一下 这个地址就是你的源代码存放的地址可以是git svn 或者zip
3.创建Pod所对应的podspec文件
先cd 到本地的项目目录
执行
pod spec create doctorplus1Test
创建
配置该文件
4.验证podspec文件是否可用
首先执行
pod lib lint
如果出现上图,说明lib验证成功
然后执行
pod spec lint
如果出现上图,说明spec验证成功
5.向私有的spec repo里添加podspec文件
在终端中 cd 到 podspec目录下执行
pod repo push doctorplus1Specs doctorplus1Test.podspec
出现上图结果,在remote上可以看到一次提交
6.新建个项目测试自己的私有库
终端执行
pod search doctorplus1Test
如果搜到了说明成功了,如果搜不到,尝试执行
rm ~/Library/Caches/CocoaPods/search_index.json
pod setup
pod repo update
更新一下本地的repo
xcode新建项目 在podfile中添加
pod 'doctorplus1Test', '~> 0.0.2'
如果提示 'unable to find a specification for'
这是个坑,能搜到,安装不到项目里,这不科学呀,搜了好多文章终于找到了,需要在podfile中添加
source'https://git.coding.net/doctorplus1/doctorplus1Specs.git'
source'https://github.com/CocoaPods/Specs.git'
_上面地址是自己的私有spec仓库
下面地址是cocoapods公共spec仓库
两者缺一不可
_
添加完后,执行pod update
7.更新podspec,建不同的版本
如果某个基础组件有bug,或者优化了某个算法,需要更新code,更新版本
方法如下:
1.修改spec文件中的s.version 号;
2.修改更新code,提交code在Sourcetree打新的tag;
3.重复执行第四和第五步;
4.pod search doctorplus1Test 验证一下结果;
参考文章:
使用Cocoapods创建私有podspec
CocoaPods私有库配置笔记
Cocoapods系列教程(三)——私有库管理和模块化管理 - Pluto Y的...