iOS - 私有仓库通过 CocoaPods 引入工程

Spec Repo(配置仓库)的概念

  CocoaPods 对于一名 iOS 开发来说再熟悉不过了,它的工作原理就是在 GitHub 上面有个 Spec Repo,它里面包括成千上万的后缀名为 .podspec 的文件。我们在项目中集成第三方库(如 SDWebImage )的时候其实就是通过 CocoaPods的 Spec Repo 去找到我们需要的开源项目的 .podspec 文件,然后在 .podspec 文件中有具体的源码地址(放具体代码的地方),根据这个地址去下载代码。

  按照上面 Spec Repo 的理解,我们如果能自己创建一个类似 CocoaPods 的 Spec Repo,然后把我们私有的公共组件的 .podspec 文件放在里面,然后集成的时候让 CocoaPods 帮我们集成那我们就能达到目的,就可以建立私有pod库了。

  一般项目经理都会把代码仓库和配置仓库都建好,这时候我们只需要把 Spec Repo 加到本地就行了。(注意:需要管理员将你的账号加到里边,有访问权限并且有修改权限)。  

一、添加’本地的私有仓库’(Spec Repo)文件

1、使用下面的命令就可以在本地生成配置文件的仓库,建议这个本地的名字也和远程的一致,这样便于区分和后期的维护.
“baseSpecs”是你们团队远端创建的配置文件仓库的名字,后面是配置文件仓库远端的地址 .
注意此时不需要 cd 进入任何目录,从默认位置输入这个命令,即在点击终端快捷方式打开的状态下直接输入下面的命令即可

1
pod repo add baseSpecs http://***/***/specs.git

2、查看是否添加成功(查看本地的所有repo)

1
pod repo list

或者打开本地配置仓库管理文件夹进行查看

1
open ~/.cocoapods/repos

如果能看到自己团队的 repo(本地的私有仓库),就 OK 了。注意:这个操作只需要执行一次就可以了,下次再打新的 pod 库的时候就不需要再执行了。

二、创建 pods 项目工程文件

1、创建项目和 .podspec 文件

方式1、可以利用 pod 提供的命令,直接创建一个 pod 库的标准模板。这个很方便,可以直接创建一个工程,可以省去很多操作。命令如下:

1
pod lib create UIPoolSingleImage

方式2、自己在项目根目录创建 podspec 文件。该方式比较麻烦,需要自己创建项目。

2、编写 .podspec 文件。根据自己的 pod 库更改相关内容,文件内容大概是这样的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//特别说明,里面的注释是博主为了大家知道什么意思加的,实际使用时一定要去掉
Pod::Spec.new do |s|
//文件名
s.name = 'UIPoolSingleImage'
//版本
s.version = '0.1.0'
//描述信息
s.summary = 'A short description of UIPoolSingleImage.'
//这里的主页自己随便写
s.homepage = 'https://github.com/[email protected]/UIPoolSingleImage'
//作者
s.authors = { '[email protected]' => '[email protected]' }
//资源路径
s.source = { :git => 'http://***/***/uipoolsingleimage.git', :tag => s.version.to_s }
//ARC模式
s.requires_arc = true
//license,一般我们用MIT
s.license = 'MIT'
//允许的最低系统使用版本
s.ios.deployment_target = '8.0'
//库文件路径,这个路径需要和你提供的库文件的目录相对应,否则会报错
s.source_files = 'UIPoolSingleImage/Classes/*'
end

三、创建自己的 pods 公共组件库项目

1、在可以创建私有库的地方创建一个 code repository(代码仓库), 也就是存放要打的 pod 库中的代码文件。这里我使用的是 gitlab。

 点击右上角的加号按钮,创建代码仓库名为 UIPoolSingleImage
2018101510425055

2.克隆 code repository(代码仓库)到本地,并将上面创建好的私有库代码文件上传到 code repository(代码仓库)中。注意:代码上传之后时候需要打一个 tag,并且每次更新 tag 都要和 .podspec 文件中的 tag 对应。

四、在命令行验证 .podspec 文件是否有效

注意:--allow-warnings :表示忽略警告。 --verbose:表示会输出详细的debug信息。

1、本地校验:pod lib lint UIPoolSingleImage.podspec –allow-warnings
2、线上校验:pod spec lint UIPoolSingleImage.podspec –allow-warnings
注意:如果你制作的pod库,会依赖spec repository(配置文件仓库)中其他的私有仓库,则需要加上 –use-libraries。并且将spec repository 的源加上。

1
pod spec lint  UIPoolSingleImage.podspec --sources='http://***/***/specs.git','https://github.com/CocoaPods/Specs.git' --use-libraries

如果出现 passed validating 则表示 spec 文件验证通过了

五、将.podspec配置文件push到远端专门存储配置文件的仓库中

1、将配置文件 push 到远端专门存储配置文件的仓库中 ,本地的也会同步更新
此时需要 cd 进入本地的 .podspec 所在的路径(否则会找不到 podspe c文件) 
然后使用下面的命令即可,baseSpecs 是你创建的 spec repository 的名字,后面是你本地创建的 .podspec 文件

注意:如果你制作的 pod 库,会依赖 spec repository(配置文件仓库)中其他的私有仓库,则需要加上 --use-libraries。

注意:如果你在手动验证 Pod 时使用了 --use-libraries 或 --allow-warnings 等修饰符,那么发布的时候也应该使用相同的字段修饰,否则可能会报错。

1
pod repo push baseSpecs UIPoolSingleImage.podspec --allow-warnings --use-libraries --verbose

2、出现下面信息,则代表成功

或者查询本地私有 spec 管理文件夹,如果看到了UIPoolSingleImage 则代表成功

1
open ~/.cocoapods/repos

3、可以在远端配置文件仓库中看到这个文件,如下:

到此,利用 Cocoapods 打私有的 pod 库就完成了。接下来,在项目中就可以直接引入私有库了。 

注意:引用私有库的时候,需要将 Spec Repo 源加到 Profile 文件中,如下:

1
2
3
4
source "https://github.com/CocoaPods/Specs.git" #cocoapods的
source "http://***/***/specs.git" #私有的

pod 'UIPoolSingleImage', '0.1.0'

更新:下次更新 pod 库的时候,在 sourceTree 需要打 tag ,比如从 0.1.0 升级到 0.2.0,要先将代码推送到远端,然后再打 tag,顺序不能反。而且打的 tag 要和 .podspec 文件中的 tag 要对应。