iOS组件化 - 私有组件库的制作

iOS组件化 - 私有组件库的制作

2019-12-26 | |

前言

前面我们已经介绍过公有的组件库的制作,知道了如何编写 podspec 文件以及怎样发布已经写好的组件。其实私有组件库的制作流程和公有库的基本一致,区别只是在于组件源码的仓库和索引仓库的访问权限不同。 对于公有组件库而言,组件源码的地址是公开,索引仓库也是公开的(存放于 github 上),所以我们都可以访问。而私有组件库的源码存放在私有仓库中,只有开放了权限的人才可以访问,还有就是私有组件的索引仓库(私有)需要我们自己来创建,别人是搜索不到我们发布的私有组件。

博文中引用的 Demo 已经上传到 github 上面了,有需要的小伙伴可以去下载
注:私有组件库的制作与公有库的制作有很多步骤是相同的,这里将不做过多的赘述,不清楚的小伙伴可以点此查看 公共组件库的制作

步骤

准备组件
  1. 创建测试工程
    1
    2
    # 创建测试工程
    pod lib create BlobPrivateComponentDemo
  2. 编写组件代码
  3. 关联远程仓库
    在 gitlab(或其它第三方托管平台)上创建一个私有的仓库,然后关联上本地仓库。
    1
    2
    # 关联远程仓库
    git remote add origin '远程仓库地址'
编写 podspec 文件

podspec 文件的编写与公有组件基本一致,这里不再赘述。

创建索引仓库

在 gitlab(或其它第三方托管平台)上创建一个私有的仓库(注意与组件源码的仓库地址区分),此仓库是用来存放我们将要推送的 podspec 文件的。对于公有组件,该仓库由 Cocoapods 来创建,我们无需关心。
当索引仓库创建完毕后,需要按照 Cocoapods 规定的方式把它添加到本地,可以使用以下两种方式:

  1. 通过使用 Cocoapods 提供的命令 pod repo add ,将索引仓库添加到本地。
    1
    2
    # PrivateSpecRepo 是本地索引库的名称,可以随意命名
    pod repo add PrivateSpecRepo '远程索引库地址'
  2. 通过使用 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

注意点

  1. 当我们在项目中使用私有组件时,需要在 Podfile 文件中把对应的私有索引仓库地址加上,如果还使用到了公有库,还需要把 Cocoapods 的索引库地址也加上。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    use_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