CocoaPods 可以说是 iOS 开发应用最广泛的包管理工具,本篇文章主要介绍 CocoaPods 的第三方库是怎样从网络集成到我们本地的项目当中,也是制作私有库、开源库和 iOS 项目组件化的一个知识铺垫。
让我们从一张图片开始:
CocoaPods 工作流程 |
---|
未命名文件 |
远程索引库
远程索引库里存放的是各种框架的描述信息,这个库托管在 Github 上,地址如下:
每个框架下有数个版本,每个版本有一个 json
格式的描述信息,如下:
{
"name": "CAIStatusBar",
"version": "0.0.1",
"summary": "A simple indicator",
"homepage": "https://github.com/apple5566/CAIStatusBar.git",
"license": "MIT",
"authors": {
"apple5566": "zaijiank110@sohu.com"
},
"platforms": {
"ios": "6.0"
},
"source": {
"git": "https://github.com/apple5566/CAIStatusBar.git",
"tag": "0.0.1"
},
"source_files": "CAIStatusBar/**/*.{h,m}",
"resources": "CAIStatusBar/CAIStatusBar.bundle",
"requires_arc": true
}
其中 git
字段表示该框架的托管地址,也就是上面时序图中的 远程框架库
。
本地索引库
在 install cocoapods
命令后,需要执行 pod setup
这个命令,pod setup
命令就是将远程索引库克隆到本地来,本地索引库的路径如下:
~/.cocoapods/repos/master
本地索引库和远程索引库的目录一致,结构如下:
本地索引库 |
---|
本地索引库 |
本地索引文件
当执行 pod search
命令时,如果本地索引文件不存在,会创建这个文件。
tianziyaodeMacBook-Air:~ Tian$ pod search afn
Creating search index for spec repo 'master'..
如果这个文件存在,则会在此文件中进行索引,确认所需要的框架是否存在,本地索引文件的路径如下:
~/资源库/Caches/CocoaPods
制作 CocoaPods 库
上面的流程清楚以后,制作 CocoaPods 库相信应该不会太难了,大致分为以下几步:
- 托管框架源码到 Git;
- 创建框架描述信息;
- 上传框架描述信息到
https://github.com/CocoaPods/Specs
; - 命令行
pod setup
, 创建本地索引库; - 命令行
pod install
,将框架集成到项目中;
现在开始动手吧!首先在桌面新建一个 testLib
目录,在该目录下新建一个 Classes
目录,用来存放框架源码,然后将 testLib
托管到 Git。
你可以给 Classes 目录任意的命名,Classes 只是一种约定俗称的命名。
pod spec
pod spec
命令用于创建框架的描述信息文件,文档如下:
guides.cocoapods.org/syntax/pods…
现在在 testLib
目录下执行:
pod spec create testLib
目录下会创建一个 testLib.podspec
文件,然后编辑这个文件,主要有以下几个字段:
- version:这个 spec 映射的版本,保证 Git 的
releases
与此对应; - homepage:项目主页;
- source:框架源代码的托管地址;
- tag:与 version 对应;
- source_files:框架源代码的目录、文件、文件类型等规则;
CocoaPods 公开库
根据上面的步骤,现在你需要将生成的 testLib.podspec
文件上传到远程索引库,在此之前,你需要注册一个 Trunk 账号,文档如下:
guides.cocoapods.org/making/gett…
现在执行下面的命令,记得修改邮箱昵称描述等:
pod trunk register ziyao.tian@gmail.com 'Tian' --description='macbook air'
你的邮箱会收到一封邮件,打开邮件里面的链接,会有类似 you can back termainal
的提示,现在回到终端。
pod lib lint
检查 testLib.podspec
的合法性,根据错误提示修复问题,当显示 passed validation
后,执行下面的命令:
pod trunk push testLib.podspec
提示信息如下:
Updating spec repo `master`
--------------------------------------------------------------------------------
�� Congrats