很久以前写的公司内部的分享资料,现在拿出来供大家参考。
Cocoapods也不是什么新东西了,基本用法按下不表,我最喜欢它的两个功能是:LocalPods和cocoapods私有库。本文以搭建一个组件库为例介绍如何使用cocoapods私有库。
1、搭建组件库
具体分为7步
a) 申请开通git仓库:http://git.xxx.cn/apps/iOSComponents.git
b) 在git仓库中初始化Spec Repo
c) 开发组件
d) 创建该组件对应的Podpodspec文件,转成Pod
e) 将组件的代码放入代码仓库(可以是git或者svn)
f) 本地测试配置好的podspec文件是否可用
g) 向Spec Repo中提交podspec
步骤a)没什么好说的,找公司的git管理员申请一个git仓库即可,注意要给合作的同学们都开好相应的权限
步骤b)
每个pod工程都有一个索引文件以.podspec结尾,该文件描述了pod工程的所有内容,包括最重要的源码地址以及依赖关系。使用pod update来添加新的依赖时,cocoapod就是先找到新依赖的.podspec文件,再顺着它来下载、配置新工程。而cocoapod去寻找.podspec文件的地方,就是Spec Repo。说得更简单些,一个Spec Repo就是一个Git Repo,它的文件结构如下:
.
├── Specs
└── [SPEC_NAME]
└── [VERSION]
└── [SPEC_NAME].podspec
了解原理后,执行下面这条命令让本机的cocoapod认识我们刚申请的git仓库,并把它当成Spec Repo
命令声明:# pod repo add [Private Repo Name] [GitHub HTTPS clone URL]
用法举例:$ pod repo add ComSpecs http://git.xxx.cn/apps/iOSComponents.git
步骤c) 开发组件
假装我们开发完了一个组件,名字叫Component1
步骤d) 转化成Pod
先把Component1文件夹下的内容剪切到其他地方(比如A文件夹)
先cd到Component1文件夹下然后执行如下命令
$ pod lib create Component1Lib
之后他会问你四个问题,1.是否需要一个例子工程;2.选择一个测试框架;3.是否基于View测试;4.类的前缀;4个问题的具体介绍可以去看官方文档,我这里选择的是1.no;2.Specta/Expecta;3.no;4.PTL。 问完这4个问题他会自动执行pod install命令创建项目并生成依赖。生成的文件夹结构如下
Component1Lib
├── LICENSE #开源协议 默认MIT
├── Pod #组件的目录
│ ├── Assets #资源文件
│ └── Classes #类文件
├── Component1Lib.podspec #第三步要创建的podspec文件
└── README.md #markdown格式的README
然后,将刚才提到Component1文件夹内原来的内容拷贝回来,源码放进Classes文件夹,资源文件放进Assets文件夹。再用文本编辑器打开Component1Lib.podspec,对照一下里面各种参数是否正确,具体用法参见官网例子,这里不展开讨论。
e) 提交代码
将刚才我们修改后的Component1Lib文件夹提交到代码仓库,可以是git也可以是svn,区别就是Component1Lib.podspec中source的写法会有区分。
f) 本地测试podspec文件
在Component1Lib文件夹下执行如下命令
$ pod lib lint --verbose
可能会有些warning或者error,根据提示修改即可
g) 向Spec Repo推送.podspec
执行如下命令:
$ pod repo push DJSpecs PodTestLibrary.podspec
至此,我们的私有库创建完毕,并且提交了第一个组件,然后,我们来看看,其他的同学该如何使用这个组件库。
2、使用组件库
a) 添加私有pods库
命令声明:# pod repo add [Private Repo Name] [GitHub HTTPS clone URL]
用法举例:$ pod repo add ComSpecs http://git.xxx.cn/apps/iOSComponents.git
添加完之后,本机的Cocoapod在搜索新的Pod依赖时,就会顺道来我们的ComSpecs中寻找。
b) 编辑podfile文件,并update
这步比较简单,冒号后面是我们组件代码真正的地址,理论上不写也可以的,但是实践过程中发现写了比较保险
platform :ios, '7.0'
pod 'Component1Lib', :svn => "http://svn.xxx.com/trunk/ios/Components/Component1Lib"
再执行pod update,Component1Lib就添加到了你的主工程中。