使用cocoapods管理私有库
Posted iOS笔记
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用cocoapods管理私有库相关的知识,希望对你有一定的参考价值。
背景
项目状况
项目前期实现为主 对业务代码和基础代码只做了大概隔离(目录上的隔离);
业务代码和基础代码的隔离不彻底 有耦合 无法抽离基础代码供其他app使用(目前暂无此需求);
基础代码和基础代码之间相互调用 有耦合 无法单独使用其中一部分;
基础代码并无版本的概念 每次改动其实并没有兼容的概念 此时的基础代码其实是当业务代码在用。
私有库的目的
去除业务代码和基础代码的耦合 使代码更干净;
基础代码模块化 更容易管理 测试;
业务代码的调用会更统一;
使基础代码有version的概念 为未来两个app调用不同版本的基础库做准备。
Cocoapods的一些基本概念
使用cocoapods的原因
方案成熟 例子众多;
支持指定版本;
支持部署到私有的仓库;
项目原本第三方库代码的引入就基于cocoapods 团队接受成本低。
cocoapods如何管理第三方库代码
有一个集中的git repo 专门存放所有第三方库的说明和链接 暂且称之为索引库;
第一个pod install的时候 会clone一份索引库到本地 路径为/Users/toamtopeter/.cocoapods/repos/master;
每次pod install或者update 会从remote拉去最新的Specs;
Specs里面有第三方库的各个版本的历史;
根据Podfile再对比Specs 就能够拉去相应的代码了。
公有库和私有库的区分
公有库的git repo是公开的 私有库的git repo是private的;
公有库中的描述文件格式为json 私有库中为ruby。
创建私有库管理中心(Spec repo)
略,具体见(
创建私有库流程
以下流程以FORNetwork举例
1. 添加私有库管理中心到cocoapods
1 |
# pod repo add [仓库名] [仓库链接] |
添加完之后 就能够在本地找到FORSpecs了 里面的内容就是我们未来需要用到的私有库 当然现在还是空的。
此时的目录结构为
1 |
. |
2. 创建private repo
gitlab创建 FORNetwork
权限是全组的 mobile
3. 创建你自己的private pod
cocoapods提供了一个命令 可以快捷创建一个private pod的环境
1 |
$ pod lib create FORNetwork |
生成目录结构
1 |
. |
创建的文件及文件夹中 有两个尤为重要
Example
FORNetwork.podspec
Example
用于demo演示 项目结构和我们平时引入cocoapods的项目结构一致。
唯一区别的地方是Podfile。
由于此时我们的私有代码是在本地 所以对于本地私有代码的引入是通过path, pod 'FORNetwork', :path => '../'
1 |
source 'https://github.com/CocoaPods/Specs.git' |
那么私有库的代码放在哪里?
默认我们需要放到下图的Class中。
是不是一定要放到Class下?当然不是 路径可以在 FORNetwork.podspec中指定。
需要注意的时候 当我们Class中添加/删除/修改文件结构的时候,我们都需要对pod udpate用于更新。
podspec
podspec就是整个私有库的说明书
4.完成开发后校验
在所有的私有库代码开发完成 并且 已经在 Example中添加演示代码后 我们就可以校验了。
校验的目的是什么?
校验是为了检测 此时的私有库是否符合标准,是否有警告,是否有错误等等。。。
可以看到有很多警告。。。
WARN | source: Git SSH URLs will NOT work for people behind firewalls configured to only allow HTTP, therefore HTTPS is preferred.
剩下的警告都是依赖的第三方库和系统警告 大致看了一下 没有私有库本身导致的问题。
在做完这些判断后 我们就可以通过忽略警告来validate私有库了
1 |
$ pod lib lint --allow-warnings |
5.校验完毕,添加说明书到私有库管理中心中FORSpecs
命令如下
1 |
$ pod repo push FORSpecs FORNetwork.podspec |
如果直接执行以下命令 仍旧会出现之前校验的报错 那是由于在上传前cocoapods仍旧会validate一次。
所以我们仍旧需要加上--allow-warnings参数
1 |
$ pod repo push FORSpecs FORNetwork.podspec --allow-warnings |
这回就上传成功了
6. 本地搜索一下私有库
1 |
$ pod search FORNetwork |
得到结果如下
-> FORNetwork (0.1.0)
51offer网络库
pod 'FORNetwork', '~> 0.1.0'
- Homepage: http://gitlab.51offer.inner/mobile/lib-FORNetwork
- Source: git@gitlab.51offer.inner:mobile/lib-FORNetwork.git
- Versions: 0.1.0 [FORSpecs repo]
和我们在说明书中填写的一致 此时说明私有库搭建完成。
6.项目中引用
虽然可以搜索到,但是项目中引入仍旧需要做一些处理。
我们需要在Podfile中指定source。
小结
整体来说,创建私有库不难,维护私有库很麻烦,一旦有新代码的改动,每次都需要创建新版本,有点繁琐。
后续希望通过两方面来简化流程:
脚本编写 一步搞定所有流程 方便更新版本;
git hook监控commit 当检测到特定文本比如”更新pod” 自动运行脚本。
参考详见阅读原文。
以上是关于使用cocoapods管理私有库的主要内容,如果未能解决你的问题,请参考以下文章