CocoaPods创建公有和私有Pod库
引言
CocoaPods的作用将iOS工程模块化, 降低代码的耦合度. 除了方便我们管理第三方的框架, 也可以将项目中的工具类拆分成独立的Pod库.
公有Pod库和私有Pod库, 实际上原理是一样的, 都是基于git服务和repo协议, 不一样的是, 两者的版本索引查询方式不一样, 公有库的podspec由CocoaPods/Specs管理, 而内部私有使用的pod库需要自己建立一个仓库来管理podspec文件.
目录
- 准备工作
- 安装CocoaPods
- 注册CocoaPods账户
- 创建公有Pod库
- 创建远端公有仓库,存放源码
- 添加源码
- 配置.podspec文件
- 验证podspec文件
- 打tag
- 发布
- 验证Pod库
- 更新维护
- 创建私有Pod库
- 创建管理私有podspec文件的远端私有仓库
- 创建存放源码的远端私有仓库
- 配置pod库
- 将podspec文件加入到第1部创建的远端仓库中
- 更新维护
- 使用
- 公有pod库的使用
- 私有pod库的使用
准备工作
安装CocoaPods
这个不是本文的主要内容,这里就不详细介绍了, 附上一篇博客地址: 戳我
注册CocoaPods账户
-
使用trunk方式注册CocoaPods,终端执行:
pod trunk register 邮箱地址 '用户名' eg: pod trunk register wqshmilylt@gmail.com 'wangqiang'
注:我的163邮箱一直收不到注册邮件, 建议用谷歌邮箱注册
-
点击邮件中的链接确认即注册成功, 成功之后可以终端执行如下代码查看自己的注册信息:
pod trunk me
结果如下:
创建公有Pod库
-
创建远端公有仓库,存放源码
和平时使用git管理项目一样,创建仓库时选择公有.可以选择github,coding等进行源码管理, 本文以coding为例.
-
添加源码
克隆本地仓库,添加.gitignore文件和项目文件
-
配置.podspec文件
该文件包含Pod库配置信息,生成方法:在本地仓库的根目录下执行:
pod spec create 文件名称
会生成一个初始化好的 文件名称.podspec 文件,重要的字段信息如下,没有的可以参考.podspec文件官方文档
Pod::Spec.new do |s| s.name = "WQLTPodDemo" #名称 s.version = "0.0.1" #版本号 s.summary = "Demo for Pod" #简短介绍,下面是详细介绍 s.description = <<-DESC Testing Private Podspec. * Markdown format. * Don't worry about the indent, we strip it! DESC s.homepage = "https://coding.net/u/w2m/p/WQLTPodDemo/git" #主页,这里要填写可以访问到的地址,不然验证不通过 # s.screenshots = "www.example.com/screenshots_1", "www.example.com/screenshots_2" #截图 s.license = 'MIT' #开源协议 s.author = { "wangqiang" => "wqshmilylt@gmail.com" } #作者信息 s.source = { :git => "https://git.coding.net/w2m/WQLTPodDemo.git", :tag => "0.0.1" } #项目地址,这里不支持ssh的地址,验证不通过,只支持HTTP和HTTPS,最好使用HTTPS # s.social_media_url = 'https://twitter.com/<twitter_username>' #多媒体介绍地址 s.platform = :ios, '8.0' #支持的平台及版本 s.requires_arc = true #是否使用ARC,如果指定具体文件,则具体的问题使用ARC s.source_files = 'Pod/Classes/**/*' #代码源文件地址,**/*表示Classes目录及其子目录下所有文件,如果有多个目录下则用逗号分开,如果需要在项目中分组显示,这里也要做相应的设置 s.resource_bundles = { 'PodTestLibrary' => ['Pod/Assets/*.png'] } #资源文件地址 s.public_header_files = 'Pod/Classes/**/*.h' #公开头文件地址 s.frameworks = 'UIKit' #所需的framework,多个用逗号隔开 s.libraries = 'sqlite3' #引入libsqlite3.tbd库 s.dependency 'AFNetworking', '~> 2.3' #依赖关系,该项目所依赖的其他库,如果有多个需要填写多个s.dependency #将文件按文件夹分类 s.subspec 'Proto' do |sp| sp.source_files = '**/proto/**/*' sp.requires_arc = false #proto文件夹下的文件使用MRC end end
-
验证podspec文件配置完成后使用验证命令验证一下:
pod lib lint 文件名称.podspec
如有警告或者错误请重新检查你的编写正确性, 如果没有问题会出现:将.podspec文件上传到远端仓库
-
打tag
tag要与上一步的podspec文件中tag保持一致
注:共享库三个必要文件
- 共享文件夹(存放共享的内容, 也就是其他人pod得到的文件, .podspec文件中的source_files需要指定此文件路径及文件类型);
- LICENSE文件(开源协议, 创建远端仓库时选择,默认一般选择MIT,);
- 库描述文件.podspec(本库的各项信息描述, 需要提交给CocoaPods, pod通过这个文件查找到你共享的库, .podspec文件的格式见第3点).
-
发布
发布podspec文件给cocoapods的master的spec上面(公有),在项目根目录下执行
pod trunk push 文件名.podspec
发布成功后会打印信息:
-
验证Pod库
发布成功后,一般会很快通过审核.一般顺序执行下面代码验证是否成功
pod setup pod search JM_ActionSheet
若一直查找不到该pod库,执行下面代码删除查找的历史索引文件
rm ~/Library/Caches/CocoaPods/search_index.json
再执行
pod search 库名
进行查找
-
更新维护
如果有错误或者需要迭代版本,修改工程文件后推送到远端仓库后, 需要修改podspec中的版本号, 并重新打tag上传, 再进行新一轮的验证podspec文件和发布 (重复4,5,6)
创建私有Pod库
私有Pod库需要自己建立一个远端仓库去管理私有Pod库的podspec文件.
-
创建管理私有podspec文件的远端私有仓库
git的私有仓库需要收费,可以使用其他第三方免费的git服务(如:coding).拿到私有仓库的地址后,终端输入如下命令:
pod repo add podspec仓库名 仓库地址 eg: pod repo add WQLT https://git.coding.net/w2m/WQLT.git
之后在/.cocoapods/repos/目录下可以看到官方的specs:master和刚刚加入的specs:WQLT
注:若多人合作开发,在他的有这个仓库权限的前提下执行上述相同的代码添加这个远端库
-
创建存放源码的远端私有仓库
上一步创建的是管理podspec文件的远端仓库,这一步创建是管理pod库源码的远端仓库,这里必须创建私有仓库
-
配置pod库
按照创建公有Pod库的2,3,4,5步进行操作,完成添加源码,配置并验证podspec文件的操作.下附一个最简单的podspec文件
Pod::Spec.new do |s| s.name = 'WQLTPrivatePodDemo' s.version = '0.0.2' s.summary = 'Demo for private Pod' s.homepage = 'https://coding.net/u/w2m/p/WQLTPrivatePodDemo' s.license = 'MIT' s.authors = {'wangqiang' => 'wqshmilylt@gmail.com'} s.platform = :ios, '8.0' s.source = {:git => 'https://git.coding.net/w2m/WQLTPrivatePodDemo.git', :tag => '0.0.2'} s.source_files = 'PrivateShare/*.{h,m}' s.requires_arc = true end
-
将podspec文件加入到第1部创建的远端仓库中
公有库使用trunk方式将.podspec文件发布到CocoaPods/Specs, 内部的pod组件库则是添加到我们第一步创建的私有Spec repo中去, 在podspec文件目录下终端执行:
pod repo push podspec仓库名 podspec文件名 eg : pod repo push WQLT WQLTPrivatePodDemo.podspec
可以前往~/.cocoapods/repos文件下查看,同时管理podspec文件的远端仓库也更新了
-
更新维护
私有库的更新维护和公有库类似, 修改源码及podspec文件,然后验证podspec文件, 然后执行上述第4部将新版本的podspec文件添加到管理podspec文件的私有仓库中.
文件目录如下:
.cocopods
repos
master
WQLT
WQLTPrivatePodDemo
0.0.1
WQLTPrivatePodDemo.podspec
0.0.2
WQLTPrivatePodDemo.podspec
-
删除私有Pod库如果需要删除私有的Pod库,在终端执行:
pod repo remove 管理podspec文件的库名 eg: pod repo remove WQLT
这样就在本地删除了私有的Pod库,还可以通过
pod repd add 管理podspec文件的库名
把它再加回来
使用
-
公有pod库的使用在项目的Podfile文件里加入
pod 'pod库名','~>版本号'
若公有pod库更新后,直接修改Podfile库的版本后,在Podfile文件目录下执行pod install即可
-
私有pod库的使用在项目的Podfile文件里加入
source ‘git@code.yudianbank.com:wangwenpeng/cocoapods-app-ios.git’ #私有库地址 source 'https://github.com/CocoaPods/Specs.git' #pod官方库 pod 'YDToolKit', ‘~>2.1.9’
若私有Pod库更新后,不用修改Podfile文件,在Podfile文件目录下执行pod update即可