iOS组件化 - 私有组件库的制作
前言
前面我们已经介绍过公有的组件库的制作,知道了如何编写 podspec
文件以及怎样发布已经写好的组件。其实私有组件库的制作流程和公有库的基本一致,区别只是在于组件源码的仓库和索引仓库的访问权限不同。 对于公有组件库而言,组件源码的地址是公开,索引仓库也是公开的(存放于 github 上),所以我们都可以访问。而私有组件库的源码存放在私有仓库中,只有开放了权限的人才可以访问,还有就是私有组件的索引仓库(私有)需要我们自己来创建,别人是搜索不到我们发布的私有组件。
博文中引用的 Demo 已经上传到 github 上面了,有需要的小伙伴可以去下载
注:私有组件库的制作与公有库的制作有很多步骤是相同的,这里将不做过多的赘述,不清楚的小伙伴可以点此查看 公共组件库的制作。
步骤
准备组件
- 创建测试工程
1
2# 创建测试工程
pod lib create BlobPrivateComponentDemo - 编写组件代码
- 关联远程仓库
在 gitlab(或其它第三方托管平台)上创建一个私有的仓库,然后关联上本地仓库。1
2# 关联远程仓库
git remote add origin '远程仓库地址'
编写 podspec 文件
podspec 文件的编写与公有组件基本一致,这里不再赘述。
创建索引仓库
在 gitlab(或其它第三方托管平台)上创建一个私有的仓库(注意与组件源码的仓库地址区分),此仓库是用来存放我们将要推送的 podspec
文件的。对于公有组件,该仓库由 Cocoapods
来创建,我们无需关心。
当索引仓库创建完毕后,需要按照 Cocoapods
规定的方式把它添加到本地,可以使用以下两种方式:
- 通过使用
Cocoapods
提供的命令pod repo add
,将索引仓库添加到本地。1
2# PrivateSpecRepo 是本地索引库的名称,可以随意命名
pod repo add PrivateSpecRepo '远程索引库地址' - 通过使用
git
命令把索引仓库clone
到本地。这两种方式的本质是一样的,都是将远程的索引仓库1
git clone '远程索引库地址' ~/.cocoapods/repos/
clone
到~/.cocoapods/repos/
目录底下,将来Cocoapods
检索的时候,就是从这个目录底下进行查找的。
当索引库添加到本地后,可以使用 pod repo
命令来查看已经创建的索引仓库。1
2
3
4
5
6
7
8
9
10
11➜ ~ pod repo
PrivateSpecRepo
- Type: git (master)
- URL: http://xxx/PrivateSpecRepo.git
- Path: /Users/fanxiaocong/.cocoapods/repos/PrivateSpecRepo
master
- Type: git (master)
- URL: https://github.com/CocoaPods/Specs.git
- Path: /Users/fanxiaocong/.cocoapods/repos/master
其中 master
仓库是 Cocoapods
的索引仓库,它在我们安装 Cocoapods
的时候就已经帮我们 clone
下来了。PrivateSpecRepo
仓库则是我们创建的私有索引仓库。
推送 podspec 文件
当组件、私有索引仓库以及 podspec
文件准备完毕后,就可以验证并推送 podspec
文件了。
验证 podspec
文件。1
2
3
4
5
6
7
8
9
10
11
12# 本地验证 podspec 文件
# 选项:
# --verbose 查看详细的验证信息,可以跟踪到警告以及错误的日志
# --allow-warnings 允许警告。默认情况下只要存在警告就不能验证通过,添加这个选项可以忽略掉所有警告
# --use-libraries 如果组件中使用了静态库,则需要添加此选项,否则验证不会通过
# --source '索引库地址'
# 如果组件中依赖了其它的私有组件库,就需要将对应的私有索引库地址添加进来,否则验证的时候会提示找不到所依赖的组件。
# 注意:当组件中同时依赖了私有组件库和公有组件库,则需要将两个索引源(Cocoapods 和 私有的索引库地址)都加上。
pod lib lint xxx.spec --source=https://github.com/CocoaPods/Specs.git,http://xxx/PrivateSpecRepo.git --verbose --allow-warnings --use-libraries
# 本地和远程验证 podspec 文件是否可以通过,选项同上
pod spec lint xxx.spec 选项1 选项2
推送 podspec
文件到私有的索引库中。1
2# 推送 podspec 文件
pod repo push PrivateSpecRepo xxx.spec
注意点
- 当我们在项目中使用私有组件时,需要在
Podfile
文件中把对应的私有索引仓库地址加上,如果还使用到了公有库,还需要把Cocoapods
的索引库地址也加上。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19use_frameworks!
# 私有索引库地址
source 'http://xxx/PrivateSpecRepo.git'
# Cocoapods 索引库地址
source 'https://github.com/CocoaPods/Specs.git'
# 私有组件
pod 'xxx', '~> 0.0.1'
# 公共组件
pod 'SDWebImage', '~> 5.3.0'
target 'BlobPrivateComponent_Example' do
pod 'BlobPrivateComponent', :path => '../'
target 'BlobPrivateComponent_Tests' do
inherit! :search_paths
end
end