iOS - CocoaPods私有库搭建步骤介绍

搭建CocoaPods私有库的必要性

  1. 公司的项目一直在成长,会出现很多的类库,如果都是在项目中,会比较杂乱,随着项目更新,开发者变多后难维护,新人来了不知道或不会用。
  2. 目前公司可能只有一个项目,由于某些原因开了一个新项目,两个项目同时开发。新项目需要把这些类库导过去,两个项目在开发时增加了新的类库,或者修改了旧类库的方法,又想给另一个项目使用,又需要复制过去,管理混乱,会产生各种坑爹的问题。
  3. 给类库一个良好成长的环境,像github上的第三方控件一样,独立的git仓库,友好的文档信息。每一次更新不修改对外的接口,只增加方法接口或者修改内部实现。

Spec Repo

什么是Spec Repo

Spec Repo是一个包含了各种支持CocoaPods导入的类库的一个仓库,官方的Spec Repo是一个在github上的git repo,在我们安装CocoaPods时进行 pod setup 步骤时会将其clone到本地目录 ~/.cocoapods/repos/master 下。

1
2
3
4
5
目录结构为
|-- Specs
|-- [Spec Name]
|-- [Version]
|-- [Spec Name].podspec或[Spec Name].podspec.json

00
01

卡在Updating local specs repositories原因

  • CocoaPods版本更新1.0前
    使用pod install会先更新Spec Repo,由于CocoaPods的广泛使用导致同时请求数超过了github的限制,最终长时间卡在Updating local specs repositories
  • CocoaPods版本更新1.0后
    仅使用pod update会触发更新Local Spec Repo,或者手动执行pod repo update指令更新Local Spec Repo。

使类库支持CocoaPods

让类库支持CocoaPods主要分为三种情况:

  1. 未提交git远程仓库的类库
  2. 已提交git远程仓库的类库
  3. 用CocoaPods官方模版创建类库(推荐)

未提交git远程仓库的类库

  1. 给编写完的类库项目创建对应的git repo,提交项目,并打上tag版本号,建议参考语义化版本号进行制定

    (1)创建一个MyUtils的git repo 并拉到本地
    02-1-01
    02-1-02

    (2)将已有类库复制到本地git repo文件夹中
    02-1-03

    (3)提交后打上tag标签,如0.1
    02-1-05

  2. 在项目目录根路径创建编写[类库项目名称].podspec文件
    cd到项目目录,然后执行 pod spec create [类库项目名称]

  3. 编写podspec文件
    图为默认创建的podspec文件,编写格式可参照该文件MyUtils.podspec
    02-1-07

  4. 检测podspec文件是否可用

    1
    pod lib lint --allow-warnings
![02-1-08](http://devhy.com/media/10-private-cocoapods-spec-10.png)

注:首先检查podspec文件信息是否正确,其次根据podspec里填写的信息将类库clone到一个临时目录进行编译。如果podspec文件信息错误,或则编译出现警告乃至错误都会检测失败。为了避免因为编译警告而检测失败,可在指令后面添加 `--allow-warnings参数`
  1. 将podspec文件提交到git repo
    02-1-09

已提交git远程仓库的类库

  1. 执行 pod spec create [类库项目git repo地址]
    02-2-01

  2. 修改podspec文件
    图为默认创建的podspec文件
    02-2-02

  3. 检测podspec文件是否可用

    1
    pod lib lint --allow-warnings
  4. 将检测通过的podspec文件提交到git repo的remote端

用CocoaPods官方模版创建类库

  1. 打开终端,执行 pod lib create [类库项目名称],根据提示进行配置类库使用的语言,是否需要Demo程序,使用何种测试框架,是否需要界面测试,类名前缀

    (1)配置过程
    02-3-01
    02-3-02

    (2)生成的文件目录结构
    02-3-03

  2. 在github或gitlab上创建该[类库项目名称]的git repo

  3. 修改生成的[类库项目名称].podspec文件

    生成的podspec配置文件
    02-3-04

  4. 编写这个类库项目

  5. 将除了podspec文件外其他文件提交到git repo的remote端并打上tag

  6. 检测podspec文件是否可用

    1
    pod lib lint --allow-warnings
  7. 将检测通过的podspec文件提交到git repo的remote端

搭建私有Spec Repo

  1. 在github或gitlab创建一个git repo
    比如,取名为 mySpecs
    对应的git地址为 https://github.com/xtyHY/mySpecs.git
    11
  1. 关联到本地的Spec Repo
    (1)添加Spec Repo到本地

    1
    pod repo add [本地Spec Repo名称] [远程Spec Repo地址]

    如:给本地需要关联的spec repo取名为 mySpecs

    1
    pod repo add mySpecs https://github.com/xtyHY/mySpecs.git

    (2)切换到这个新加额spec目录并初始化

    1
    2
    cd ~/.cocoapods/repos/[本地Spec Repo名称]
    pod repo lint .
  2. 将一个项目的.podspec添加到私有的Spec Repo中

    1
    pod repo push [本地Spec Repo名称] [podspec文件路径] --allow-warnings

    如:本地Spec Repo名称为mySpecs,podspec文件路径为~/Desktop/MyUtils.podspec

    1
    pod repo push mySpecs ~/Desktop/MyUtils.podspec --allow-warnings

    13
    注:在添加在私有Spec Repo时也会检测podspec信息,增减–allow-warnings 参数的原因与之前主动检测podspec是否可用一样

    提交成功即可在本地和spec repo的remote端看到
    14
    15

使用私有Pod Spec的类库

  1. 在编写podfile时在第一行添加私有库的地址和官方库地址

    1
    2
    source '[pod spec repo 地址]'
    source 'https://github.com/CocoaPods/Specs.git'

    注:如果不添加官方库地址,若私有库的类库的子依赖,依赖了公有库某个类库,会导致pod install失败

  2. 通过通常的导入支持CocoaPods类库的方式即可

    1
    pod '[类库项目名称]', '~> [版本号]'

    如图:
    编写podfile文件
    17

    执行pod install安装
    18

    导入成功效果
    19

其他一些CocoaPods 操作repo的指令

  1. 显示本地repo列表

    1
    pod repo list
  2. 删除本地repo

    1
    pod repo remove <REPO_NAME>
  3. 更新某个repo

    1
    pod repo update <REPO_NAME>

参考资料