搭建CocoaPods私有库的必要性
- 公司的项目一直在成长,会出现很多的类库,如果都是在项目中,会比较杂乱,随着项目更新,开发者变多后难维护,新人来了不知道或不会用。
- 目前公司可能只有一个项目,由于某些原因开了一个新项目,两个项目同时开发。新项目需要把这些类库导过去,两个项目在开发时增加了新的类库,或者修改了旧类库的方法,又想给另一个项目使用,又需要复制过去,管理混乱,会产生各种坑爹的问题。
- 给类库一个良好成长的环境,像github上的第三方控件一样,独立的git仓库,友好的文档信息。每一次更新不修改对外的接口,只增加方法接口或者修改内部实现。
Spec Repo
什么是Spec Repo
Spec Repo是一个包含了各种支持CocoaPods导入的类库的一个仓库,官方的Spec Repo是一个在github上的git repo,在我们安装CocoaPods时进行 pod setup
步骤时会将其clone到本地目录 ~/.cocoapods/repos/master
下。
1 | 目录结构为 |
卡在Updating local specs repositories原因
- CocoaPods版本更新1.0前
使用pod install
会先更新Spec Repo,由于CocoaPods的广泛使用导致同时请求数超过了github的限制,最终长时间卡在Updating local specs repositories
。 - CocoaPods版本更新1.0后
仅使用pod update
会触发更新Local Spec Repo,或者手动执行pod repo update
指令更新Local Spec Repo。
使类库支持CocoaPods
让类库支持CocoaPods主要分为三种情况:
- 未提交git远程仓库的类库
- 已提交git远程仓库的类库
- 用CocoaPods官方模版创建类库(推荐)
未提交git远程仓库的类库
给编写完的类库项目创建对应的git repo,提交项目,并打上tag版本号,建议参考语义化版本号进行制定
(1)创建一个MyUtils的git repo 并拉到本地
(2)将已有类库复制到本地git repo文件夹中
(3)提交后打上tag标签,如0.1
在项目目录根路径创建编写[类库项目名称].podspec文件
cd到项目目录,然后执行pod spec create [类库项目名称]
编写podspec文件
图为默认创建的podspec文件,编写格式可参照该文件MyUtils.podspec
检测podspec文件是否可用
1
pod lib lint --allow-warnings
![02-1-08](http://devhy.com/media/10-private-cocoapods-spec-10.png)
注:首先检查podspec文件信息是否正确,其次根据podspec里填写的信息将类库clone到一个临时目录进行编译。如果podspec文件信息错误,或则编译出现警告乃至错误都会检测失败。为了避免因为编译警告而检测失败,可在指令后面添加 `--allow-warnings参数`
- 将podspec文件提交到git repo
已提交git远程仓库的类库
执行
pod spec create [类库项目git repo地址]
修改podspec文件
图为默认创建的podspec文件
检测podspec文件是否可用
1
pod lib lint --allow-warnings
将检测通过的podspec文件提交到git repo的remote端
用CocoaPods官方模版创建类库
打开终端,执行
pod lib create [类库项目名称]
,根据提示进行配置类库使用的语言,是否需要Demo程序,使用何种测试框架,是否需要界面测试,类名前缀(1)配置过程
(2)生成的文件目录结构
在github或gitlab上创建该
[类库项目名称]
的git repo修改生成的
[类库项目名称].podspec
文件生成的podspec配置文件
编写这个类库项目
将除了podspec文件外其他文件提交到git repo的remote端并打上tag
检测podspec文件是否可用
1
pod lib lint --allow-warnings
将检测通过的podspec文件提交到git repo的remote端
搭建私有Spec Repo
- 在github或gitlab创建一个git repo
比如,取名为 mySpecs
对应的git地址为https://github.com/xtyHY/mySpecs.git
关联到本地的Spec Repo
(1)添加Spec Repo到本地1
pod repo add [本地Spec Repo名称] [远程Spec Repo地址]
如:给本地需要关联的spec repo取名为 mySpecs
1
pod repo add mySpecs https://github.com/xtyHY/mySpecs.git
(2)切换到这个新加额spec目录并初始化
1
2cd ~/.cocoapods/repos/[本地Spec Repo名称]
pod repo lint .将一个项目的.podspec添加到私有的Spec Repo中
1
pod repo push [本地Spec Repo名称] [podspec文件路径] --allow-warnings
如:本地Spec Repo名称为
mySpecs
,podspec文件路径为~/Desktop/MyUtils.podspec
1
pod repo push mySpecs ~/Desktop/MyUtils.podspec --allow-warnings
注:在添加在私有Spec Repo时也会检测podspec信息,增减–allow-warnings 参数的原因与之前主动检测podspec是否可用一样提交成功即可在本地和spec repo的remote端看到
使用私有Pod Spec的类库
在编写podfile时在第一行添加私有库的地址和官方库地址
1
2source '[pod spec repo 地址]'
source 'https://github.com/CocoaPods/Specs.git'注:如果不添加官方库地址,若私有库的类库的子依赖,依赖了公有库某个类库,会导致pod install失败
通过通常的导入支持CocoaPods类库的方式即可
1
pod '[类库项目名称]', '~> [版本号]'
如图:
编写podfile文件
执行pod install安装
导入成功效果
其他一些CocoaPods 操作repo的指令
显示本地repo列表
1
pod repo list
删除本地repo
1
pod repo remove <REPO_NAME>
更新某个repo
1
pod repo update <REPO_NAME>