最近整理项目,发现用到了很多第三方的SDK,这些SDK都是直接拖到项目里面的比较乱,打算把这些乱七八糟的第三方SDK全都交给 CocoaPods 来管理。
什么是CocoaPods?
你不知道 CocoaPods 是什么?给你个传送门 https://cocoapods.org
CocoaPods 新建本地仓库
这里我用微信 SDK 来举个栗子,从微信开发者中心下载对应的 SDK。
我们得到一个 WechatSDK 文件夹,里面的内容也比较简单
1 | └── WechatSDK |
要让 CocoaPods 来管理第三方 SDK,我们需要将第三方 SDK 制作成一个仓库,跟平时我们使用 Podfile 一样。 下面我们要在 WechatSDK 目录下新建一个 .podspec
格式的文件,这个文件主要是用来描述当前仓库的一些信息,它的格式官网有介绍,不赘述。http://guides.cocoapods.org/syntax/podspec.html
转载请注明出处:来自LeonLei的博客http://www.gaoshilei.com
按照他要求的格式,新建 WechatSDK.podspec 并填入下面这些信息:
1 | # coding: utf-8 |
s.source
这个键需要详细讲解一下。这是 CocoaPods 需要读取的 git 仓库地址,这里直接写成本地的仓库路径就可以了,不过要在 WechatSDK 文件夹中新建 git 仓库。然后 tag 能对应上就可以了。在当前目录下执行下面的命令:
1 | git init |
注意 git 仓库地址的路径要填相对于你项目 Podfile 的路径,我的项目 Podfile 跟 文件夹 Vendors 是同级的,所以我应该这么写 ./Vendors/WechatSDK
。
到这里工作已经完成一大半了,下面就是要在项目 Podfile 文件中正确配置
1 | pod 'AFNetworking' |
后面指定仓库配置文件的路径就可以了,这里也要注意是相对于 Podfile 文件的路径。然后在项目中执行 pod install --no-repo-update
安装,一般可能会有以下的问题(我在制作过程中遇到的)
第一种情况:
1 | [!] Failed to load 'WechatSDK' podspec: |
这种情况是 CocoaPods 没有找到仓库的 podspec 配置文件,原因是 Podfile 中的路径写错了,改成仓库相对于 Podfile 的路径就可以了。
第二种情况:
1 | [!] Error installing WechatSDK |
这就很明显了,仓库找不到,因为 WechatSDK.podspec
中s.source
路径写的是绝对路径,解决方法就是改成相对路径。
第三种情况:
1 | [!] The `WechatSDK` pod failed to validate due to 1 error: |
这种情况就是 podspec 配置文件格式不对,对照官网的文档修改一下就行。
上面是将第三方 SDK 制作成了 CocoaPods 库,你也可以将你自己的代码制作成库,将 s.source 改成 github 上的地址,就制作了一个线上可以共享的 CocoaPods 库,类似于 AFNetworking,这个要多一个步骤,将自己的开源库配置文件推送到 CocoaPods 的 podspec 仓库中(我还没有制作过,具体步骤自行百度或者谷歌吧)
创建私有中心仓库
上面都完成,貌似是挺完美,但还是有缺陷的。明显跟我们平时使用的 pod 格式不一样,后面还要配置路径太麻烦了,如果能这样用:
1 | pod 'AFNetworking' |
这样岂不就完美了!CocoaPods 其实是通过 podspec 来管理所有的仓库的,在我们的本地有一个目录
1 | ~/.cocoapods/repos |
CocoaPods 把中心仓库放在了这个位置,所以平时我们执行 pod install
都会去这个中心仓库查看是否有对应的目标开源组件,然后git clone
下来,所以有时候明明有这个开源组件,但是我们执行 pod install
总提示安装失败,没有这个目录。那是因为本地的 repos 太旧了,这个时候执行 pod repo update
一下就可以了。基于 CocoaPods 这个原理,我们就可以实现上面提到的方式了。
先看下 CocoaPods 的中心仓库是怎么管理这些开源插件的
路径是这个样子的
1 | LeonLeiMBP15-145:AFNetworking gaoshilei$ pwd |
AFNetworking 下面有很多版本号的文件夹,每个版本号下面对应的是仓库的配置文件.podspec格式化的json文件。照葫芦画瓢我们就可以创建自己的私有中心仓库。找个目录建立自己的私有中心仓库
1 | LeonLeiMBP15-145:~ gaoshilei$ cd Desktop/ |
此时私有中心仓库已经建好了,下面就是要让 CocoaPods 知道这个仓库的存在,为了方便团队开发时直接使用,这个中心仓库需要放到公司 git 上共享:
1 | LeonLeiMBP15-145:CocopodsPrivate gaoshilei$ git init |
然后再将这个私有中心仓库添加到 CocoaPods 中
1 | LeonLeiMBP15-145:CocopodsPrivate gaoshilei$ pod repo add CocoapodsPrivate git@git.internal.weyao.com:gaoshilei/CocoapodsPrivate.git |
添加成功之后,执行 pod search WechatSDK
可以看到,刚才添加的已经可以搜到了,并且版本号后面显示来自仓库CocoapodsPrivate
让团队其他成员执行 pod repo add CocoapodsPrivate git@git.internal.weyao.com:gaoshilei/CocoapodsPrivate.git
之后,就可以使用这个私有中心仓库了。
PS:当你可以搜到 WechatSDK
时却无法正常执行 pod install
,会报这样的错:[!] Unable to find a specification for 'WechatSDK'
,那是因为项目的 Podfile 中需要添加相应的仓库地址才行:
1 | platform :ios, '8.0' |
把这两条添加进去,然后再执行 pod install
就没问题了。