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

Spec Repo(配置仓库)的概念

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

  按照上面 Spec Repo 的理解,我们如果能自己创建一个类似 CocoaPodsSpec 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/623099552@qq.com/UIPoolSingleImage'
//作者
s.authors = { '623099552@qq.com' => '623099552@qq.com' }
//资源路径
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 要对应。