使用 CocoaPods 创建及管理私有库

2018-02-27 11:09:34来源:https://www.jianshu.com/p/49f7dc67c211作者:Bye625人点击

分享


题内话

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


我的思考

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


第一部分:创建私有库

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


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


可以参考 AFNetworking 的配置文件。


第二部分:管理私有库

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


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


步骤
创建私有库
新建工程,编写实现代码。(因为是私有的,所以工程应该放在远程的私有仓库中。)



文件路径.png



Person头文件.png



Person实现文件.png



远程仓库.png

创建 .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 仓库。





privateSpec.png

进入模块 ModuleA 根目录下,通过命令 pod repo push privateSpec ModuleA.podspec 将 ModuleA.podspec 推送到第 2 步的 privateSpec 仓库中。这个命令会同时把 ModuleA.podspec 更新到远程的 git 仓库中。
结果如下:



privateSpec下的podspec文件.png




推送到远程的podspec文件.png

在模块 ModuleA 根目录下,通过命令 pod lib lint --no-clean 验证 .podspec 文件有效性。


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



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


测试
新建工程,进入根目录,然后通过命令 pod init 将工程通过 pod 进行管理。此时出现 Podfile 文件。



pod 管理.png


打开 Podfile 文件,进行编辑



在最前面添加先添加管理私有库的 specRepo 仓库的 git 地址,再添加 CocoaPods 仓库的 git 地址。


Podfile 文件.png


通过命令 pod install 安装私有库。


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




报错.png


至此,测试完成。


测试工程.png







最新文章

123

最新摄影

闪念基因

微信扫一扫

第七城市微信公众平台