用途:私有pod无论是抽取项目共有库还是项目组件化都很好用,可以达到模块解耦和依赖关系明确的目的。方便团队合作开发和项目管理。
准备工作:安装CocoaPods
https://www.jianshu.com/p/846b998d2717 内的第一点有安装教程
已安装CocoaPods的跳过。
废话不多说,开始我们完美搭建的旅程:(假设搭建:RELib)
第一部分:创建私有pod
在搭建之前我们先建个远程仓库,用于存放私有pod。
这个就是我的仓库地址了:https://github.com/Rare1020/RELib.git
1.在本地创建pod repo
使用cocoapods为我们提供的快捷方法。
$pod lib create RELib
这个命令会引导你做一些配置并最终生成一个pod工程。
2.填写一些简单的信息
//使用的平台
What platform do you want to use?? [ iOS / macOS ]
> iOS
//使用的语言
What language do you want to use?? [ Swift / ObjC ]
> ObjC
//是否包装测试工程,指定YES用于测试
Would you like to include a demo application with your library? [ Yes / No ]
> Yes
// 集成的测试模块,不需要指定None
Which testing frameworks will you use? [ Specta / Kiwi / None ]
> None
// UI测试模块,不需要指定No
Would you like to do view based testing? [ Yes / No ]
> No
//指定类前缀
What is your class prefix?
> RE
3.导入文件
我放了两个当测试用
4.编辑 RELib.podspec 文件
声明: 所有文件的路径是基于XX.podspec下的。
一些需要修改的地方,都有中文备注
Pod::Spec.new do |s|
s.name = 'RELib'
#pod版本号 每次更新私有pod把pod版本提升
s.version = '0.1.0'
s.summary = 'It’s a test lib.'
s.description = <<-DESC
TODO: Add long description of the pod here.
DESC
s.homepage = 'https://github.com/Rare1020/RELib'
# s.screenshots = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
s.license = { :type => 'MIT', :file => 'LICENSE' }
s.author = { 'Rare1020' => 'xxxxxxx@163.com' }
#仓库地址
s.source = { :git => 'https://github.com/Rare1020/RELib.git', :tag => s.version.to_s }
# s.social_media_url = 'https://twitter.com/<TWITTER_USERNAME>'
s.ios.deployment_target = '8.0'
#主目录
#s.source_files = 'RELib/Classes/**/*'
#资源文件
# s.resource_bundles = {
# 'RELib' => ['RELib/Assets/*.png']
# }
# s.public_header_files = 'Pod/Classes/**/*.h'
#依赖的系统frameworks
# s.frameworks = 'UIKit', 'MapKit'
#依赖的系统静态库
#s.libraries = 'z','c++' //z表示libz.tdb,后缀不需要,lib开头的省略lib
#依赖的第三方frameworks
#s.vendored_frameworks = 'RELib/Classes/**/*.framework'
#依赖的第三方.a 静态库
#s.vendored_libraries = 'RELib/Classes/**/*.a'
#依赖的bundle文件
#s.resource = 'RELib/Classes/**/*.bundle'
#依赖第三方pod
s.dependency 'AFNetworking', '~> 3.2.1'
#如果需要依赖另一个私有pod,需要再podfile文件写source
#source 'https://github.com/CocoaPods/Specs.git' (cocoapods公有仓库地址) 和 source '私有pod仓库地址'
# s.dependency 'REOtherLib', '0.1.0'
#创建子目录
s.subspec 'Test' do |ss|
ss.source_files = 'RELib/Classes/Test/**/*.{c,h,hh,m,mm}'
#可以继续创建子目录
#ss.subspec '**' do |sss|
#end
end
s.subspec 'Print' do |ss|
ss.source_files = 'RELib/Classes/Print/**/*.{c,h,hh,m,mm}'
#内部文件依赖(如果引用的Test文件夹内的文件)
#ss.dependency 'RELib/Test'
end
end
5.执行pod install命令
pod install
这个时候例子里面的工程就能调用私有pod内的文件了
6.验证RELib.podspec文件的合法性
$pod lib lint //验证本地仓库
和
$pod spec lint //会结合远程仓来验证本地仓库
🛑后缀添加:(以下用pod lib lint 来举例)
能自由拼接后缀
打印详情
$pod lib lint --verbose
有警告时
$pod lib lint --allow-warnings
有依赖私有pod
$pod lib lint --sources='https://github.com/CocoaPods/Specs.git','私有pod仓库地址'
有依赖静态库
$pod lib lint --use-libraries
7.验证通过之后,把本地项目文件上传到远程仓库中
(1)将本地项目与远程仓库关联
$git remote add origin 远程仓库地址
(2)先pull远程仓库的文件
pull之前都是一些git一些相关操作,
git add .
git commit -m "first pod"
先push会报错误$git pull origin master //会有冲突,解决冲突
(3) 再push到远程仓库
$git push --set-upstream origin master
或
$git push origin master
到这里远程仓库就有我们本地的项目了
但是我们还需要把XX.podspec文件push上去,才能使用该pod。
8.打tag,push RELib.podspec文件之前先打tag
$git tag -m "first Pod" 0.1.0
git push --tags
9.push RELib.podspec文件。(需要后缀添加,请参考第5条的后缀添加)
如果报未发现RELib的错误,说明cocoapods仓库(路径~/.cocoapods/repos) 还没有该私有Pod。$pod repo push RELib RELib.podspec
解决方法:添加私有pod到cocoapods仓库
$ pod repo add RELib https://github.com/Rare1020/RELib.git
再执行pod repo push RELib RELib.podspec
看到这个说明就成功了✌️✌️第二部分:使用私有pod
1.把RELib clone 在 ~/.cocoapods/repos 目录里。(如果上面执行过这一步。这一步跳过)
$pod repo add RELib https://github.com/Rare1020/RELib.git
2.编辑podfile文件
# Uncomment the next line to define a global platform for your project
# platform :ios, '9.0'
#cocoapod仓库地址
source 'https://github.com/CocoaPods/Specs.git'
#私有仓库地址
source 'https://github.com/Rare1020/RELib.git'
target 'REPodTest' do
# Uncomment the next line if you're using Swift or would like to use dynamic frameworks
# use_frameworks!
# Pods for REPodTest
pod 'Masonry'
pod 'RELib','0.1.0'
target 'REPodTestTests' do
inherit! :search_paths
# Pods for testing
end
end
3.编辑完成执行pod install
如果报意外目录文件夹Classes 或 Assets$pod install
解决方法:删除文件夹(进目录和命令行删除)
$rm -rf ~/.cocoapods/repos/rare1020/RELib/Classes
$rm -rf ~/.cocoapods/repos/rare1020/RELib/Assets
至于这个classes、Assets错误弄不明白怎么去根治他。每次更新之后都会出现这两个文件,需要手动去删除。望大神能帮忙解答下解决方法。
再执行pod install
打开项目就可以看到这三个库了。
第三部分:更新私有pod
1.修改代码,修改.podspec文件的版本号;
2.执行pod insatll,更新本地代码;
3.验证.podspec文件的合法性;
4.上传代码到远程仓库。
5.更新本地Cocopods仓库内的私有库。
$pod repo update RELib
6.打对应版本号的tag。
7.push .podspec文件
$pod repo push RELib RELib.podspec