CocoaPods创建私有pod库(基础篇)

私有pod和公有pod之间没有太多区别, 最主要的区别就是管理他们的spec repo不一样。下面具体说说私有库的创建与更新及遇到的一些坑。

什么是spec repo?通俗来说它就是一个容器,所有公开的pod全都在里面,它也是GitHub上一个远程的Git仓库。当你使用了Cocoapods后它就会被clone到本地,放在~/.cocoapods/repos目录下,进入到这个目录就可以看到master文件夹,这就是官方的spec repo。

既是私有,我们就需要创建一个类似CocoaPods/Specs的仓库来管理私有库的podspec文件, 以供内部人员使用和更新。构建形式有两种, 一种是在私有git服务器上面创建,另一种是在本机中创建。

这里记录下我在公司内部git服务器上创建私有pod库的过程:

1.创建远程私有repo并添加到本地

先在内部网页上合适的路径下创建一个远程的私有repo,再将私有repo添加到~/.cocoapods/repos中

pod repo add ops-xgn-ios-xgn http://内部地址/XGN-IOS/xgn.git 

注意:ops-xgn-ios-xgn只是本地显示的名字,命名上没什么太多限制,只要别叫master就行了。

2.创建远程私有pod并关联到本地

先在内部网页上XGN-IOS的路径下创建一个远程的私有pod,并clone到本地合适的路径下,此时pod文件夹内是空的;再在本地任意路径下创建本地私有pod工程,可用终端命令进行模板化的创建

pod lib create XGCommonView

注意:创建过程中会提示你选择一些标准,我是这么选的(platform:iOS, language:ObjC, demo:Yes, testing frameworks:None, view based testing:Yes, prefix:XG),意思很明了。

再将本地私有pod工程与远程私有pod关联起来,这个很简单,各有各的方法吧,我是将本地创建的私有pod文件夹里面的所有文件全部复制到clone后的pod文件夹里,接着用commit,push将关联一气呵成。

4.给私有pod添加功能代码文件和所需要的资源,编辑podspec文件,打tag,验证,发布。

我将平时开发中常用到的一些共用视图类文件提取出来放到pod库名/Classes文件夹中,然后进入Example文件夹执行pod update命令,再打开项目工程可以看到,刚刚添加的组件已经在Pods子工程下Development Pods/XGCommonView中了,然后编辑demo工程,测试组件,我并没有使用提供的测试框架进行测试,这里就先不介绍了。

需要注意的是创建的模板pod工程会自动安装FBSnapshotTestCase这个三方库,没什么用可以不要,这里需要注意的是每当你向Pod中添加了新的文件或者以后更新了podspec的版本都需要重新执行一遍pod update命令,这是为了更新私有pod所需要安装的其他三方库。

基本项自查无误后,接下来就要进入正题了,大致需要做以下几件事:

编辑podspec文件
将本地变更提交并推送至远程;
将本次变更打tag并推送至远程;
验证podspec文件并推送至远程;
更新本地pod库;

XGCommonView.podspec是一个Ruby文件,将里面对应的字段换成自己的就行了。下面是一个最简单的模板,复杂一些的配置项会多一些,当然坑也多一些;

Pod::Spec.new do |s|
s.name             = 'XGCommonView'
s.version          = '0.0.1'
s.summary          = 'Some common views.'

# This description is used to generate tags and improve search results.
#   * Think: What does it do? Why did you write it? What is the focus?
#   * Try to keep it short, snappy and to the point.
#   * Write the description between the DESC delimiters below.
#   * Finally, don't worry about the indent, CocoaPods strips it!

s.description      = <<-DESC
TODO: Add long description of the pod here.
DESC

s.homepage         = 'http://git.ops.com/XGN-IOS/XGCommonView'
# s.screenshots     = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
s.license          = { :type => 'MIT', :file => 'LICENSE' }
s.author           = { 'username' => 'email' }
s.source           = { :git => 'http://git.ops.com/XGN-IOS/XGCommonView.git', :tag => s.version.to_s }
# s.social_media_url = 'https://twitter.com/<TWITTER_USERNAME>'

s.ios.deployment_target = '8.0'

s.source_files = 'XGCommonView/Classes/**/*'

# s.resource_bundles = {
#   'XGCommonView' => ['XGCommonView/Assets/*.png']
# }

# s.public_header_files = 'Pod/Classes/**/*.h'
# s.frameworks = 'UIKit', 'MapKit'
# s.dependency 'AFNetworking', '~> 2.3'

end

每次变更Classes文件夹中的内容都需要先提交再打tag,因为podspec文件中获取Git版本控制的项目需要tag号,所以每次变更都需要打一个tag;

$ git tag -m "first release" 0.0.1
$ git push --tags 

验证podspec文件,看你配置的东西是否合乎标准和正确无误;

pod lib lint 

验证无误就可以进入下一步了

将私有pod的podspec提交到远程的repo

pod repo push ops-xgn-ios-xgn XGCommonView.podspec

成功之后再执行

pod search XGCommonView

如果提示找不到,就执行

rm ~/Library/Caches/CocoaPods/search_index.json

然后再次search

pod search XGCommonView

这个json文件是pod setup成功后生成的, 是用来查找的索引文件,如果搜索失败,就删除再重新搜索,json将会再次生成,不出意外应该就可以搜索成功了

接着,就可以在自己的项目中引用自己创建的私有pod了

source 'http://git.ops.com/XGN-IOS/xgn.git'
pod 'XGCommonView'

以上是简单的创建与使用,进阶版使用请看下篇!

欢迎访问我的Github:https://github.com/xiaohuiCoding