题內话
之前在网上看了一些关于使用 CocoaPods 创建私有库的相关文章,看着看着就被那些步骤给搞晕了,不知道先做什么后做什么,搞不清配置信息中填写的地址是模块的地址还是 .podspec 的地址。后来静下心来整理了下思路,如果是我的话,我会怎么处理。
我的思考
很多文章的标题都是说创建私有库,我觉得这类标题不够准确。应该是“创建及管理私有库”比较准确。从“创建及管理私有库”这点就可以看出,我们需要分成两个部分来处理。
第一部分:创建私有库
需要的内容:
1)私有库的代码及资源文件等。
2)管理这个私有库信息的一个配置文件 .podspec。
要记住的是,这个配置文件中的配置信息只针对这个私有库本身展开,比如私有库的创建者信息,版本号是多少,仓库地址在哪,需要导入哪些系统库和三方库等等。
可以参考 AFNetworking 的配置文件。
第二部分:管理私有库
这里说的管理私有库,其实就是存放所有私有库的配置文件。目的是为了在项目中需要使用一些私有库时,你需要知道从哪里找到这些私有库一样。类似于,当我们使用一些第三方库的时候,我们会通过 CocoaPods 找到并导入这些第三方库一样。
这两部分既是相互独立又是相互关联的。你创建私有库就只管创建,不用管怎么去管理这个私有库,那不是它本身的职责。创建完成后,管理的职责就交给了第二部分。
步骤
创建私有库
- 新建工程,编写实现代码。(因为是私有的,所以工程应该放在远程的私有仓库中。)
-
创建 .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
- 将工程 push 到远程,并且打上 tag(必须打上 tag,且和 .podspec 中的版本号一致)。
管理私有库
在远程新建一个仓库 specRepo,这个仓库专门只用来存放各个模块的 .podspec 文件。
通过命令
pod repo add privateSpec https://gitlab.com/xxx/specRepo.git
在本地~/.cocoapods/repos
下目录名为 privateSpec 的文件夹下克隆远程 git 仓库。
- 进入模块 ModuleA 根目录下,通过命令
pod repo push privateSpec ModuleA.podspec
将 ModuleA.podspec 推送到第 2 步的 privateSpec 仓库中。这个命令会同时把 ModuleA.podspec 更新到远程的 git 仓库中。
结果如下:
-
在模块 ModuleA 根目录下,通过命令
pod lib lint --no-clean
验证 .podspec 文件有效性。ps:必须将所有文件同步到远程之后才能验证成功。如果还有报错,请自行排查。
至此,完成了创建及管理私有库的所有步骤。
测试
- 新建工程,进入根目录,然后通过命令
pod init
将工程通过 pod 进行管理。此时出现 Podfile 文件。
-
打开 Podfile 文件,进行编辑
在最前面添加先添加管理私有库的 specRepo 仓库的 git 地址,再添加 CocoaPods 仓库的 git 地址。
-
通过命令
pod install
安装私有库。ps:如果
pod install
报错,将source 'https://gitlab.com/xxx/specRepo.git'
换成 git 形式的路径source 'git@gitlab.com:xxx/specRepo.git'
试试。