Cocoapods: 私有仓库
使用场景
在我之前的博客中分享了几篇关于 Cocoapods 的文章(文末有链接),今天分享另外一个主题即如何创建你自己的私有仓库以及如何使用私有仓库。
为什么会有这种需求呢?
开发组内或者公司内,不希望把一些核心的公用代码给到外界使用(不开源),但是这些代码基本很稳定很成熟,可以做成组件给到其他人或者组内使用。
那么,就可以使用 Cocoapods 来创建自己的私有仓库,让大家共享代码,也是组件化的一种方案。
下面的分享全是基于实践所得,中间也遇到很多坑,都被我一一解决了,希望能帮到正在阅读文章的你。
创建仓库
这里的创建仓库,包括两个仓库,一个是代码仓库,另一个是 pod 源的仓库。
在 Github 创建 repository,如图:
创建名为 iOS_private_lib
的 repository,这个主要用来存放我们的代码。
同样道理,创建一个 Repo 用于存放私有的 SpecRepo 源,我创建的是 https://github.com/veryitman/private_spec_repo.git
这个仓库。
为了说明问题,这里我使用了 Public
来模拟 Private
仓库。在实际开发中,一般都是使用公司自己搭建的私有 git 服务器来做,我这里主要是为了说明问题。
创建代码工程
1. 先 clone 刚才创建的 repo 到本地
1 | cd ~/workspace/ |
2. 创建工程
在 ~/workspace/iOS_private_lib
下使用 pod lib create
创建工程,工程名字为 CoreHTTP
,执行命令如下:
1 | cd ~/workspace/iOS_private_lib |
根据提示输入对应的信息即可完成创建,如图:
创建成功后,包含一个 Example 例子工程,工程目录如下:
使用 Xcode 打开例子工程,在 CoreHTTP/Classes
中创建文件即可,如下图所示:
3. 编辑 podspec 文件
1 | Pod::Spec.new do |s| |
这里需要注意,如果 s.source_files
写的不对,会报下面的错误。
1 | - ERROR | [iOS] file patterns: The `source_files` pattern did not match any file. |
CoreHTTP
的名字必须是你代码存放的文件夹名,而且这个文件件要与 podspec
文件在同一级文件目录下,从上面截图的目录结构可以看出。
另外一个提示的错误点,可能是因为空目录的问题造成的,如果这样的话,可以在各个文件夹下面创建 .gitkeep
文件,该文件的作用是为了提交空文件夹,因为 git 默认是不会添加空文件夹到仓库的。
创建 .gitkeep
文件的命令如下:
1 | cd 文件夹下 |
这里我折腾了蛮久,最后思考和参考了自己之前的开源项目管理博客,才解决这个问题。
4. 检查和验证本地 podspec 文件
1 | cd CoreHTTP |
验证通过会显示如下图所示的成功提示
使用 Xcode 打开工程,删除对应以 Test开头
的相关的库和文件夹,确保 Xcode 能编译通过,选择模拟器即可。
这里一定要先清空 cocoapods 的缓存,否则后面远程验证还是报错,无法通过验证。
清空 cocoapods 的缓存,命令如下:
1 | rm ~/Library/Caches/CocoaPods/Pods/External/CoreHTTP |
5. 上传工程到 Github 远程代码仓库
1 | cd ~/workspace/iOS_private_lib |
6. 给版本添加 tag
1 | cd ~/workspace/iOS_private_lib |
7. 进行远程验证
1 | cd ~/workspace/iOS_private_lib |
注意:--verbose
选项是为了看编译和验证信息,--use-libraries
是为了能支持 i386 架构,如果不加此参数,私有库无法通过验证,--allow-warnings
参数是允许有警告。
验证成功的示意图:
提交私有 podspec
1. 向本地的 cocoapods 仓库添加私有 Spec Repo
1 | cd ~/workspace/iOS_private_lib |
这里一定要注意:对应的地址是 SpecRepo 仓库地址而不是代码仓库地址。
本地存放 spec 的私有仓库名称,我这里取名为 PrivateSpec
,你也可以取其他名字,但是记住在下面的步骤中要保持一致。
1 | ls -alt ~/.cocoapods/repos/ |
可以看到已经成功添加本地 repo 中,其他 master 是 cocoapods 官方公开的源,其他为私有源。如下图所示:
2. 向私有的 Spec Repo 中提交 podspec
下面的 PrivateSpec
是与上面的名称对应的。
1 | cd ~/workspace/iOS_private_lib |
这里要注意,添加私有库和之前博文 Cocoapods 管理开源项目 中提到的 pod trunk push
是不一样的操作。
使用私有库
1. 搜索库
1 | pod search CoreHTTP |
如果搜索不到,可以执行下面的两条命令:
1 | rm ~/Library/Caches/CocoaPods/search_index.json |
然后继续搜索就可以了,搜索成功会显示如下内容:
1 | CoreHTTP (0.1.0) |
为了避免和其他私有库命名冲突,建议在自己的私有库前面加上公司或者其他标示,如 TepdCoreHTTP、FphCoreHTTP 等。
2. 在 Podfile 文件的顶部添加 source
1 | source 'https://github.com/veryitman/private_spec_repo.git' |
注意一个是我们私有 SpecRepo 地址(非私有代码库地址),另一个是官方公有源地址。
使用私有库的工程的 Podfile 写法示例如下:
1 | source 'https://github.com/veryitman/private_spec_repo.git' |
在工程中可以直接使用私有库了,示例代码如下:
1 | #import "ViewController.h" |
pod 命令
1 | //将工程添加到本地 repo 中 |
1 | //只从本地验证你的pod能否通过验证 |
参考文档
我的其他文章
扫码关注,你我就各多一个朋友~