前言
在我们开发过程中,有一些自己封装的工具类或是库,为了方便管理,我们借助cocoapods来实现。我们平时所接触的第三方库,是公开的,我们自己的代码使用私有库来进行。
私有库相关概念和原理
cocopods为包管理,那么顾名思义它只是管理我们所存代码的一些信息,并不是真正管理我们的代码。那么这里就需要两个仓库,其中一个仓库是托管cocoapods所需要的配置文件,另外一个仓库才是存放我们的代码。
cocoapods是通过.podspec
文件来索引私有库真的存代码的仓库。其所有配置文件托管在Master Repo。
核心概念:
.podspec : 该文件为你的代码仓库索引描述文件,CocoaPods通过该文件对你真正存储代码工程的 Git 仓库进行索引与下载
Lib : 你上传到远程Git仓库的代码工程,将来用于开源共享或则私有
Git 仓库 : Git介绍
CocoaPod 通过第一个 Git 仓库的里 .podspec 描述文件找到真正存储你代码的第二个 Git 仓库,然后根据 .podspec 里的相关字段对特定目录下的代码,三方依赖库,资源文件等进行下载。
换一种说法来理解,第一个 Git 仓库里的 .podspec 描述文件相当于我们的指针, 其指向的另一个 Git 仓库(内存)才是你自己真正所共享的代码。
私有库创建流程
基于git的仓库有很多,由于GitHub的私有库是收费的,所以笔者使用的码云。
1.首先创建仓库1,用于托管我们的代码。
2.创建仓库2,用于存放cocoapoads索引所需的配置文件。
3.前面已经将两个仓库建好了,那么接下来创建代码库Lib和托管Podspec文件。
(1)首先在本地创建一个Lib,使用终端cd到你文件想要保存的目录下,依照提示创建。
创建lib命令:
pod lib create <#项目名字#>
当执行
pod lib create ProjectName
时,其实是下载了一个pod模板,然后在内部通过更改.podspec文件的配置定制化自己的pod,
pod lib create ProjectName
其实使用了默认参数,补全的话pod lib create ProjectName --template-url=https://github.com/CocoaPods/pod-template.git
,当模板创建成功后,会自动使用XCode打开。
(2)接下来我们配置一下
ExampleLib.podspec
文件:(3)配置好相关信息后,我们来检查一下文件格式和远程地址等信息是否正确:
pod lib lint
注意:提示信息需要没有error和warn:(这里一般出错都是远程仓库地址没配置好或是素材路径等)
通过Cocoapods创建出来的工程本身就在本地的Git管理下,我们需要做的就是给它添加远端仓库,此远程仓库就是上面我们创建的ExampleLib。网上大多数的做法是直接通过终端git命令行来上传,笔主这里使用可视化的git管理工具SourceTree;
使用SourceTree将远程仓库clone下来,然后将我们所创建的lib仓库复制好,进行远程推送。推送后一定要给本次推送打上tag(标签)。因为这个标签在下一步验证中需要使用。
tag的版本号需要跟ExampleLib.podspec文件中的
s.version
一致。注意:SourceTree添加标签后,一定要再远程推送一编,这样远程仓库才有tag的。远程验证
Podspec
正确性:
pod spec lint
会读取线上的repo
并检查相应的tag
如果远程验证没过,一定要注意是不是远程仓库的tag没有添加成功。
PS:如何你在创建lib失败,错误如下:
创建失败一开始题主以为是ruby版本太低,经查阅资源得知是因为cocoapods的版本太低了。可以通过命令行
pod --version
查看版本号,低于1.2.0的都不行。那么通过命令
gem install cocoapods --pre
来升级cocoapods。升级后再重新开始创建lib就能正常创建了。
(4)存放代码的远程仓库已经弄好了,那么接下来就应该把
ExampleLib.podspec
文件上传到配置文件仓库,以便pod查询使用。我们平常使用到的第三方库的Podspec文件都托管在https://github.com/CocoaPods/Specs。可以进入 ~/.cocoapods/repos 目录下查看,三方库的所有配置文件都在Master文件夹中。pod repo add 仓库名 仓库地址
~/.cocoapods/repos 目录下查看,就能找到我们刚刚添加的库了。
(5)最后就将ExampleLib.podspec文件上传到远程库
私有库的使用
私有库创建成功后,pod search 你的私有库名字
可以搜索到我们的私有库。由于我们使用的私有库,那么就需要告诉cocoapods你所引用的私有库的配置文件在哪里,固在Podfile文件中需要添加私有库配置文件的远程仓库地址:
总结
下面用一张图来总结整个过程: