个人或公司在开发过程中,会积累很多可以复用的代码包,有些我们不想开源,又想像开源库一样在CocoaPods中管理它们,那么通过私有仓库来管理就很必要。大家没有安装CocoaPods或者对于CocoaPods还不太熟悉的,建议参考一下唐巧的博客或者直接到CocoaPods的官网看看:https://cocoapods.org/
GitHub私有库是付费用户,所以我使用了其他Git服务,我使用的是码云,当然还有其他的可供选择开源中国、CSDN Code,cocoachina,以及gitlab
首先在码云或gitlab上创建一个空项目,这里给个名字是MyTestLib.
一.在终端执行如下命令
/这个命令的作用:(1).创建本地仓库.(2)同第1步创建的github项目关联起来
//pod repo add 私有库名字 码云项目地址
pod repo add MyTestLib https://gitee.com/asdfasdwed/MyTestLib.git
二、我们开始创建项目
1.cd 到我们想要存放项目的目录
//这个命令的作用是创建一个pod项目,它会自动给你生成spec文件,后面需要更改这个文件
pod lib create MyTestLib
2、根据自己的需求设置项目信息
- 你想用什么语言?swift/ObjC
- 您想要在您的库中包含一个演示应用程序吗?
- 您将使用哪些测试框架
- 你想做基于视图的测试吗
-
你的类前缀是什么
image.png
3、成功之后会自动创建一个带有MyTestLib.podspec项目
image.png
4、Classes:存放类文件,默认会有一个ReplaceMe.m文件,
image.png
我们只需要把类文件代码放入Classes文件中,如果需要查看更改后demo效果,cd Example文件中pod update更新一下库即可.
5、修改MyTestLib.podspec文件
Pod::Spec.new do |s|
s.name = 'MyTestLib'
s.version = '0.1.0'
s.summary = 'MyTestLib.'
s.description = <<-DESC MyTestLib描述 DESC
s.homepage = 'https://gitee.com/asdfasdwed/MyTestLib'
s.license = { :type => 'MIT', :file => 'LICENSE' }
s.author = { 'ZJHGGHub' => 'zjh13785@163.com' }
#需要修改远程服务器地址也就是码云仓库地址
s.source = { :git => 'https://gitee.com/asdfasdwed/MyTestLib.git', :tag => s.version.to_s }
s.ios.deployment_target = '8.0' #支持的平台及版本
s.requires_arc = true #是否使用ARC,如果指定具体文件,则具体的问题使用ARC
s.source_files = 'MyTestLib/Classes/**/*' #这个很重要,指定资源文件,前缀就是.podspec文件当前路径,只用写之后的路径,如Class/*是指Class文件夹下的所有文件,但不包括子文件夹里面的文件、Class/**/*是指包含所有Class文件夹下的文件,包括子文件、Class/**/*.{h,m}是指包含所有Class文件夹下的后缀为.h或.m的文件,当然也可以指定文件。
#代码源文件地址,**/*表示Classes目录及其子目录下所有文件,如果有多个目录下则用逗号分开,如果需要在项目中分组显示,这里也要做相应的设置
# s.resource_bundles = {
# 'PodTestLibrary' => ['MyTestLib/Assets/*.png']
# } #资源文件地址
# s.public_header_files = 'MyTestLib/Classes/**/*.h' #公开头文件地址
# s.frameworks = 'UIKit' #所需的framework,多个用逗号隔开
# s.dependency 'AFNetworking', '~> 2.3' #依赖关系,该项目所依赖的其他库,如果有多个需要填写多个s.dependency
如果你编写的库文件需要多个子文件夹*.podspec文件可以参考下面如不需要可直接跳过看第6步
Pod::Spec.new do |s|
s.name = 'NetworkTools'
s.version = '1.2.0'
s.summary = 'NetworkTools.'
s.description = "NetworkTools ..."
s.homepage = 'https://gitee.com/ZHDreams'
s.license = { :type => 'MIT', :file => 'LICENSE' }
s.author = { 'ZJHGGHub' => 'zjh13785@163.com' }
s.source = { :git => 'https://gitee.com/ZHDreams/NetworkTools.git', :tag => s.version.to_s }
s.ios.deployment_target = '8.0'
s.subspec 'ZHNetTool' do |ss|
ss.dependency 'ReactiveObjC', '~> 3.0.0'
ss.dependency 'AFNetworking', '~> 3.1'
ss.source_files = 'NetworkTools/Classes/ZHNetTool/**/*'
end
s.subspec 'ZHMJRefsh' do |ss|
ss.dependency 'MJRefresh', '~> 3.1.12'
ss.source_files = 'NetworkTools/Classes/ZHMJRefsh/**/*'
end
6、编辑完podspec文件后,需要验证一下这个文件是否可用,如果有任何WARNING或者ERROR都是不可以的,它就不能被添加到Spec Repo中,不过xcode的WARNING是可以存在的,验证需要执行一下命令pod lib lint --allow-warnings --verbose
7、验证成功后开始提交我们的项目到码云服务器
依次执行下面代码
//这里是链接你码云服务器的仓库地址
git remote add origin https://gitee.com/asdfasdwed/MyTestLib
git add .
git commit -m "提交信息"
git push origin master
//注意:如果你创建项目的时候生成了README或者license文件,那么这里你push的时候可能会push不了,这里的话可以用
git push origin master -f 强制提交,会覆盖之前的文件
//为仓库打tag(很重要),而且这个tag必须和spec文件中的版本一致
git tag -m "版本" 0.1.0
//提交版本
git push --tags
//最后将你的spec文件push到远程私有库进行管理
pod repo push MyTestLib MyTestLib.podspec --allow-warnings
大功告成私有库创建完成
三、测试私有pod,新建一个项目,然后进入到项目文件中
- pod init
source 'git@gitee.com:ZHDreams/Spec.git' //码云Spec文件存放仓库
#source 'https://github.com/CocoaPods/Specs.git' //如有第三方库依赖例如AFNetworking时,添加af Spec文件存放仓库
# platform :ios, ‘8.0’
target 'Test' do
pod 'MyTestLib', '~>0.1.0'
end
pod install
image.png
安装私有库遇到的一些问题解决
问题1、pod search 未找到库时出现[!] Unable to find a pod with name, author, summary, or description matching
解决:rm ~/Library/Caches/CocoaPods/search_index.json
然后重新搜索 pod search
问题2、使用pod repo push Spec 命令提交远程索引文件报错信息
[!] The repo Spec
at ../../../.cocoapods/repos/Spec
is not clean
解决:1
cd ~/.cocoapods/repos/Spec
git clean -f
解决:2
删除Spec本地索引重新添加
pod repo remove Spec
pod repo add Spec git@gitee.com:ZHDreams/Spec.git
这里感谢未来行者的博客CocoaPods私有库