整体说明一下创建私有podspec的步骤:
1,创建一个远程的git库用于存储代码,将新建的git库clone到本地,添加需要导入pod库中的代码。
2,创建并设置一个私有的Spec Repo。
3,在本地git库文件夹中创建pod所对应的podspec文件。
4,本地测试配置好的podspec文件是否可用。
5,向私有的spec repo中提交podspec。
6,在项目中的Podfile中增加刚刚制作好的Pod并使用。
7,后续更新维护podspec。
一,创建私有的Spec Repo
什么是 Spec Repo ? 它是所有的 Pods 的一个索引,就是一个容器,所有公开的 Pods 都在这个里面,它实际是一个 Git 仓库 remote 端在 GitHUb 上,但是当你使用了 CocoaPods 后它会被 clone 到本地的 ~/.cocoapods/repos 目录下。第一步先创建远端的 GitHub,并clone到本地:
git clone git@github.com:Cuidawang/CKYTool.git
创建之后在 Terminal 中执行如下命令:
# pod repo add [Private Repo Name] [GitHub HTTPS clone URL]
$ pod repo add CKYTool git@github.com:Cuidawang/CKYTool.git
此时如果成功的话,进入 ~/.cocoapods/repos 目录下就可以看见 CKYTool 这个目录了。到这第一步就完成了。
PS: 如果有其他合作人员共同使用这个私有Spec Repo的话在他有对应Git仓库的权限的前提下执行相同的命令添加这个Spec Repo即可。
二,添加需要的代码文件到CKYTool目录下
比如我选取了一个文件管理和一个分类的文件进行测试,将这两个文件添加到 CKYTool 中,
三,创建项目的podspec文件
使用终端命令cd到CKYTool文件下执行命令:
pod spec create CKYTool
这时候本地会生成一个 CKYTool.podspec 文件,使用 sublime 打开 CKYTool.podspec 文件,删除不必要的注释,最后的文件形式如下:
Pod::Spec.new do |s|
s.name = "CKYTool" #名称
s.version = "0.0.1" #版本号
s.summary = "CKYTool." #简短介绍
s.description = <<-DESC
对这个pod文件进行描述,这的描述要比summary的长。
DESC
s.homepage = "https://github.com/Cuidawang/CKYTool" #主页
s.license = "MIT" #开源协议
s.author = { "Cuikeyi" => "https://github.com/Cuidawang/CKYTool" }
s.platform = :ios, "8.0"
s.source = { :git => "https://github.com/Cuidawang/CKYTool.git", :tag => "#{s.version}" }
s.header_dir = "CKYTools" #Pod安装之后的文件名
s.requires_arc = true
s.subspec 'XHCCategories' do |ss|
ss.header_dir = 'XHCCategories'
ss.subspec 'NSDate' do |sss|
sss.source_files = "XHCTools/XHCCategories/NSDate/**/*.{h,m}",
sss.header_dir = 'NSDate'
end
ss.subspec 'NSString' do |sss|
sss.source_files = "XHCTools/XHCCategories/NSString/**/*.{h,m}",
sss.header_dir = 'NSString'
end
ss.subspec 'NSDate' do |sss|
sss.source_files = "XHCTools/XHCCategories/NSDate/**/*.{h,m}",
sss.header_dir = 'NSDate'
end
ss.subspec 'UIButton' do |sss|
sss.source_files = "XHCTools/XHCCategories/UIButton/**/*.{h,m}",
sss.header_dir = 'UIButton'
end
ss.subspec 'UIColor' do |sss|
sss.source_files = "XHCTools/XHCCategories/UIColor/**/*.{h,m}",
sss.header_dir = 'UIColor'
end
ss.subspec 'UIImage' do |sss|
sss.source_files = "XHCTools/XHCCategories/UIImage/**/*.{h,m}",
sss.header_dir = 'UIImage'
end
ss.subspec 'UIView' do |sss|
sss.source_files = "XHCTools/XHCCategories/UIView/**/*.{h,m}",
sss.header_dir = 'UIView'
end
end
s.subspec 'XHCFileManager' do |ss|
ss.source_files = "XHCTools/XHCFileManager/**/*.{h,m}",
ss.header_dir = 'XHCFileManager'
end
end
文件中的字段说明参考:http://guides.cocoapods.org/syntax/podspec.html
编辑完 podspec 文件后,需要验证一下这个文件是否可用,如果有任何的 Warning 或者 Error 都是不可以的,它就不能被添加到 Spec Repo 中,不过 xcode 的 Warning 是可以存在的,验证需要执行一个命令
pod lib lint
当如下图时,表示验证通过了
Tips:
1,去除Xcode的警告,可以通过命令屏蔽警告:
pod lib lint --allow-warnings
2,如果出现Error但是提示信息不足,可以添加 --verbose 以获取更多的错误信息
pod lib lint --verbose
四,提交文件到github,打tag,上传podspec
1,提交文件到github
git add .
git commit -m "first commit"
git pull origin master
git push origin master
2,提交tag
git tag -m "release 0.0.1" 0.0.1
git push --tags
3,上传podspec
pod repo push CKYTool CKYTool.podspec #前面是本地Repo名字 后面是podspec名字
至此,我们的这个组件库就已经制作添加完成了,使用 pod search CKYTool 就可以找到这个库了。
Tips:
1,提交文件的顺序不能改变,一定要先提交tag标签,之后再上传podspec。否则会上传podspec失败。
2,对于 .podspec 文件,一定要放在文件的最外层,不然就报错。
五,使用制作好的Pod
在完成这一系列步骤后,我们就可以在正式的项目中使用这个私有的Pod了只需要在Podfile文件中添加:
platform :ios, "8.0"
# source 是pod去哪下载地址,写多个source会从上到下一次去加载
source 'https://github.com/Cuidawang/CKYTool.git'
source 'https://github.com/CocoaPods/Specs.git'
target "XXXX" do
pod 'CKYTool'
end
然后执行 pod update ,更新依赖库,就可以看见自己的库文件出现在 Pods 子目录中,而不是 Development Pods 中。
Tips:
1,引用使用文件的时候,引用方式为 #import <NSString/NSString+URLEncoding.h>, 就可以找到文件的路径了。
2,也可以在Target -> Build Settings -> User Header Search Paths 中点击加号,添加 $(PODS_ROOT) ,后边设置成recursive,此时可以通过 #import "NSString+URLEncoding.h" 引入头文件。
六,关于Pod的升级
当前的版本是0.0.1,如果我们增加了一些代码文件,更新了一些代码,此时要发布0.0.2版本,需要怎么做呢?
1,修改代码文件,更新代码完毕之后,并更新 CKYTool.podspec 文件,修改s.version = '0.0.2',都修改完成之后,通过 pod lib lint 验证 podspec 文件是否有效,如果有效,进行下一步。
2,验证通过之后,提交自己的代码到git,然后打tag 0.0.2,(一定要打tag和s.verisonxiang相对应),然后提交tag。
3,提交完tag之后,接着上传podspec, pod repo push CKYTool CKYTool.podspec。此时 pod search CKYTool 就会发现0.0.2版本了。
七,删除和添加 Spec Repo
1, 删除一个私有的 Spec Repo:
pod repo remove CKYTool
2,添加
pod repo add CKYTool git@github.com:Cuidawang/CKYTool.git
如果我们要删除私有Spec Repo下的某一个podspec怎么操作呢,此时无需借助Cocoapods,只需要cd到~/.cocoapods/repos/WTSpecs目录下,删掉库目录
八,参考资料
http://blog.wtlucky.com/blog/2015/02/26/create-private-podspec/