一、创建私有specs库(cocoapods版本1.9.1)
cocoapods的specs的库使用以下命令可以查看,edu-git-cocoapods-specs是清华大学开源镜像站的库,而trunk是官方替代以前master的库
pod repo
edu-git-cocoapods-specs
- Type: git (master)
- URL: https://mirrors.tuna.tsinghua.edu.cn/git/CocoaPods/Specs.git
- Path: /Users/akali/.cocoapods/repos/edu-git-cocoapods-specs
trunk
- Type: CDN
- URL: https://cdn.cocoapods.org/
- Path: /Users/akali/.cocoapods/repos/trunk
创建一个私有的specs库可以使用以下命令
# pod repo add [库的名称] [库所在的git地址]
$ pod repo add test git@192.168.1.199:test/Specs.git
二、创建一个pod项目
使用命令行创建一个标准的pod代码库,在输入一系列参数后,就创建好名为Test的一个代码库
$ pod lib create Test
配置我们刚创建的本地pod库:
我只罗列了几个比较重要的配置项,其他的可以随便填。
Pod::Spec.new do |s|
s.name = 'iOSCommon' # 库名
s.version = '0.8.1' # 库的当前版本
s.summary = 'iOS基础插件库' # 描述
# 简介
s.description = <<-DESC
iOS基础插件库,用于项目中开发创建的轮子。或者对已有三方的扩展。
DESC
s.source = { :git => 'git@192.168.27.191:test/Test.git', :tag => s.version.to_s } #库的Git的地址,记住,不是spec仓库地址,是库本身的git地址,也可以先把库推到Git之后再来填这个。
s.ios.deployment_target = '10.0'# 最低支持版本
s.source_files = 'iOSCommon/Classes/**/*' # 开发文件存放地址
s.dependency 'Alamofire' #依赖到的其他三方库
s.resource_bundles = {
'iOSCommon' => ['iOSCommon/Assets/*.png']
}# 如果你的库用到了资源文件,如图片,视频什么的,这个也要配置
end
end
配置完成,可以上传了。
在私有的git中创建Test的git远程仓库,并将本地的Test项目的远程仓库设置为刚建立的远程仓库,并将项目push到远程仓库
$ cd Test
$ git remote add origin git@192.168.27.191:test/Test.git
$ git add .
$ git commit -m "Initial commit"
$ git push -u origin master
# tag 值要和podspec中的version一致
$ git tag 0.1.0
# 推送tag到服务器上
$ git push --tags
三、验证并上传podspec到指定的仓库
验证时,可以忽略警告。当出现Test passed validation.
时,代表Test
这个库已经验证通过。
$ pod spec lint --allow-warnings
上传时,也需要忽略警告。到此,我们的工作就已经完成了。
# pod repo push [repo库的名称] Test.podspec --sources=[repo库的地址] --allow-warnings
$ pod repo push test Test.podspec --sources=git@192.168.1.199:test/Specs.git --allow-warnings
四、使用我们的私有库
在我们项目TestPro
的Podfile中使用我们的Test
代码库。执行pod update,这样就成功的加载了我们所有需要的库
# 指定使用cdn库下载公有的库
source 'https://cdn.cocoapods.org/'
# 指定我们的私有库下载
source 'git@192.168.1.199:test/Specs.git'
platform :ios, '10.0'
target 'TestPro' do
# Comment the next line if you don't want to use dynamic frameworks
use_frameworks!
# Pods for TestPro
# 网络连接
pod 'Moya'
# 自动布局
pod 'SnapKit'
pod 'Test'
target 'TestProTests' do
inherit! :search_paths
# Pods for testing
pod 'Quick'
pod 'Nimble'
end
target 'TestProUITests' do
# Pods for testing
end
end
五、更新私有库
更改的内容直接按照普通Git流程操作,推到远程仓库之后,记得更新一个私有库的tag,更新的tag一定要和私有库的.podspec文件里面的version保持一致。
# git tag [最新版本]
$ git tag 1.0.0
#推上去
$ git push --tags
然后就是再上传到我们的repo库。
在上传到repo时,如果你的私有库中引用了其他的开源库,在指定source是的时候,只写自己的repo库是不行的。因为指定了之后,git会直接在我们的repo库中去找那些开源库,就会报找不到库的错误。所以后面还要加上一个默认的repo库或者其他的镜像库,或者后面直接不指定sources。这时候git会在我们的repo的列表中一个一个的寻找,也会成功,但是耗时比较久。
$ pod repo push wwzl subspecTest.podspec --sources=git@192.168.27.199:fuyaohui/FSpecs.git,https://mirrors.tuna.tsinghua.edu.cn/git/CocoaPods/Specs.git --allow-warnings
六、subspec
subspec就是类似友盟的SDK,一个仓库里面包含了多个子仓库。在创建的时候,只需要创建一个pod库,然后再classes同等级目录下分别创建子库文件夹。然后在pod库的.podspec文件里面分别指向子库。
例:
# 子库
s.subspec 'WWZLBLEComponents' do |blue|
#子库的文件路径
blue.source_files = 'iOSCommon/WWZLBLEComponents/Classes/**/*'
#子库的依赖
blue.dependency 'iOSDFULibrary'
#子库依赖的frameworks
blue.frameworks = 'UIKit', 'MapKit'
end
这样就建成了一个包含子库的pod库。
同时,子库也可以再拥有子库。
例:
# 子库
s.subspec 'WWZLBLEComponents' do |blue|
#子库的文件路径
blue.source_files = 'iOSCommon/WWZLBLEComponents/Classes/**/*'
#子库的依赖
blue.dependency 'iOSDFULibrary'
#子库依赖的frameworks
blue.frameworks = 'UIKit', 'MapKit'
blue.subspec 'BaseBle' do |base|
#子库的子库的文件路径
base.source_files = 'iOSCommon/WWZLBLEComponents/BaseBle/Classes/**/*'
#依赖
base.dependency 'Toast'
end
end
需要注意的是,子库文件路径一定不能出错,否则会找不到文件,注意仔细核对。
七、subspec的使用
在引用的时候,跟普通的pod一样。
1.如果我们只用到了该库的摸一个子库功能,则可以
# pod '[库名]/[子库名]'
$ pod 'WWZLBLEComponents/BaseBle'
后面可以追加N个 “/ + [子库名]”。
2.如果我们用到了该库的所有功能,则可以
# pod '[库名]'
$ pod 'WWZLBLEComponents'
例:
# 指定使用cdn库下载公有的库
source 'https://cdn.cocoapods.org/'
# 指定我们的私有库下载
source 'git@192.168.1.199:test/Specs.git'
platform :ios, '10.0'
target 'TestPro' do
# Comment the next line if you don't want to use dynamic frameworks
use_frameworks!
# Pods for TestPro
# 自动布局
pod 'SnapKit'
#我们的私有库
#如果用到了WWZLBLEComponents的所有子库
pod 'iOSCommon/WWZLBLEComponents'
#如果只用到了子库BaseBle
pod 'iOSCommon/WWZLBLEComponents/BaseBle'
target 'TestProUITests' do
# Pods for testing
end
end
公共库
私有库和公共库的区别就在于你的spec仓库是否是外网可访问的。如果你的spec库的地址是开放的,那就是公共库。如果是内网才能访问的,那就是私有库。
单独创建公共库是没有必要的,因为cocoapod有提供一个公共的spec仓库:cocoapods spec
了解完上面的私有库的创建推送之后,公共库就很简单了。区别就只在于最后一步:
如果你添加了trunk,就可以:
pod trunk push --allow-warnings
如果你没有添加trunk,直接推到master上:
pod master push --allow-warnings
网友评论