使用 CocoaPods 创建及管理私有库

题內话

之前在网上看了一些关于使用 CocoaPods 创建私有库的相关文章,看着看着就被那些步骤给搞晕了,不知道先做什么后做什么,搞不清配置信息中填写的地址是模块的地址还是 .podspec 的地址。后来静下心来整理了下思路,如果是我的话,我会怎么处理。

我的思考

很多文章的标题都是说创建私有库,我觉得这类标题不够准确。应该是“创建及管理私有库”比较准确。从“创建及管理私有库”这点就可以看出,我们需要分成两个部分来处理。

第一部分:创建私有库

需要的内容:
1)私有库的代码及资源文件等。
2)管理这个私有库信息的一个配置文件 .podspec。

要记住的是,这个配置文件中的配置信息只针对这个私有库本身展开,比如私有库的创建者信息,版本号是多少,仓库地址在哪,需要导入哪些系统库和三方库等等

可以参考 AFNetworking 的配置文件。

第二部分:管理私有库

这里说的管理私有库,其实就是存放所有私有库的配置文件。目的是为了在项目中需要使用一些私有库时,你需要知道从哪里找到这些私有库一样。类似于,当我们使用一些第三方库的时候,我们会通过 CocoaPods 找到并导入这些第三方库一样。

这两部分既是相互独立又是相互关联的。你创建私有库就只管创建,不用管怎么去管理这个私有库,那不是它本身的职责。创建完成后,管理的职责就交给了第二部分。

步骤

创建私有库

  1. 新建工程,编写实现代码。(因为是私有的,所以工程应该放在远程的私有仓库中。)
使用 CocoaPods 创建及管理私有库_第1张图片
文件路径.png
使用 CocoaPods 创建及管理私有库_第2张图片
Person头文件.png
使用 CocoaPods 创建及管理私有库_第3张图片
Person实现文件.png
使用 CocoaPods 创建及管理私有库_第4张图片
远程仓库.png
  1. 创建 .podspec 文件。(一般习惯将模块名作为文件名,这里为 ModuleA.podspec)

    通过 pod spec create 文件名 创建 .podspec 文件。

    内容如下:

Pod::Spec.new do |s|

# 模块名
s.name         = "ModuleA"
# 版本号。需要注意的是:当仓库代码 push 到远程仓库的时候,需要打上 tag。tag 和 版本号必须一致!!!
s.version      = "0.0.1"
# 简短描述
s.summary      = "A short description of ModuleA."
# 模块主页,如 https://gitlab.com/xxx/ModuleA
s.homepage     = "http://EXAMPLE/ModuleA"
# license 类型
s.license      = { :type => "MIT", :file => "FILE_LICENSE" }

# 创建者信息
s.author             = { "姓名" => "邮箱地址" }
# 平台信息,后面的数字指的是最低的系统要求。
s.platform     = :ios, "9.0"

#  When using multiple platforms
# s.ios.deployment_target = "5.0"
# s.osx.deployment_target = "10.7"
# s.watchos.deployment_target = "2.0"
# s.tvos.deployment_target = "9.0"

# 远程仓库路径
s.source       = { :git => "http://EXAMPLE/ModuleA.git", :tag => "#{s.version}" }

# 需要暴露给别人的代码文件
s.source_files  = "Classes", "Classes/**/*.{h,m}"

# 需要暴露给别人的资源文件
# s.resources = "Resources/*.png"

# 需要添加的系统 framework
# s.frameworks = "SomeFramework", "AnotherFramework"

# 需要添加的系统 .tbd 库
# s.libraries = "iconv", "xml2"

# 是否是 ARC 环境
s.requires_arc = true
# xcconfig 路径配置
# s.xcconfig = { "HEADER_SEARCH_PATHS" => "$(SDKROOT)/usr/include/libxml2" }
# 需要依赖的三方库
# s.dependency "JSONKit", "~> 1.4"

end
  1. 将工程 push 到远程,并且打上 tag(必须打上 tag,且和 .podspec 中的版本号一致)。

管理私有库

  1. 在远程新建一个仓库 specRepo,这个仓库专门只用来存放各个模块的 .podspec 文件。

  2. 通过命令 pod repo add privateSpec https://gitlab.com/xxx/specRepo.git 在本地 ~/.cocoapods/repos 下目录名为 privateSpec 的文件夹下克隆远程 git 仓库。

使用 CocoaPods 创建及管理私有库_第5张图片
privateSpec.png
  1. 进入模块 ModuleA 根目录下,通过命令 pod repo push privateSpec ModuleA.podspecModuleA.podspec 推送到第 2 步的 privateSpec 仓库中。这个命令会同时把 ModuleA.podspec 更新到远程的 git 仓库中。
    结果如下:
    使用 CocoaPods 创建及管理私有库_第6张图片
    privateSpec下的podspec文件.png
使用 CocoaPods 创建及管理私有库_第7张图片
推送到远程的podspec文件.png
  1. 在模块 ModuleA 根目录下,通过命令 pod lib lint --no-clean 验证 .podspec 文件有效性。

    ps:必须将所有文件同步到远程之后才能验证成功。如果还有报错,请自行排查。

至此,完成了创建及管理私有库的所有步骤。

测试

  1. 新建工程,进入根目录,然后通过命令 pod init 将工程通过 pod 进行管理。此时出现 Podfile 文件。
    使用 CocoaPods 创建及管理私有库_第8张图片
    pod 管理.png
  1. 打开 Podfile 文件,进行编辑

    在最前面添加先添加管理私有库的 specRepo 仓库的 git 地址,再添加 CocoaPods 仓库的 git 地址。
    使用 CocoaPods 创建及管理私有库_第9张图片
    Podfile 文件.png
  1. 通过命令 pod install 安装私有库。

    ps:如果 pod install 报错,将 source 'https://gitlab.com/xxx/specRepo.git' 换成 git 形式的路径 source '[email protected]:xxx/specRepo.git' 试试。

    报错.png

至此,测试完成。
使用 CocoaPods 创建及管理私有库_第10张图片
测试工程.png

你可能感兴趣的:(使用 CocoaPods 创建及管理私有库)