概述
cocopod私有库是建立在git基础上的,必须先要有两个git地址:
1.保存cocopod私有库的git地址。里面是你上传的私有库各个版本的podspec文件
2.将要上传到私有库的项目git地址
之后根据这两个git地址,与cocopod私有库产生连接,连接的关键就是项目中的.podspec文件
创建步骤
- 创建两个git项目,一个用于存放本地私有库(mySpec),一个用于存放要上传的项目(demoTool)地址。在github,码云,gitlab创建都可以。
- 将pod远程仓库添加到本地:
pod repo add myspec git地址
。(其中myspec是你本地私有库的名字,可以任意。git地址是上一步创建的,你本地私有库对应的git地址)
-
git clone
下来用于存放项目的另一个git地址,在里面新建要上传的项目(例如:demoTool),
-
pod spec create demoTool
添加上传私有库的配置文件.podspec(podspec文件名要与项目名相同),会生成demoTool.podspec文件
- 在项目里面选择正确配置
支持设备,支持最低版本,登录证书等,编译一下项目,确保没有error
- 编辑podspec文件(关键)
可以用sublime text编辑
Pod::Spec.new do |s|
#项目名
s.name = "Tools"
#项目版本,这个版本要和git tag 要相同
s.version = "3"
#项目简介,要重新编辑,不然会报warning
s.summary = "Tools."
#项目描述,要比s.summary长,不然会报warning
s.description = <<-DESC
this is Tools
DESC
#项目主页地址
s.homepage = "https://gitee.com/D-James/Tools"
#许可证 type:协议类型 file:协议文件名 或者另一种写法:s.license = "MIT License",创建项目的时候选的什么许可证就填什么
s.license = { :type => "MIT", :file => "FILE_LICENSE" }
#作者
s.author = "duan"
#支持最低版本,要与项目中所选一致
s.platform = :ios, "8.0"
#项目git地址,可以为ssh地址,也可以为http地址
s.source = { :git => "git@gitee.com:D-James/Tools.git", :tag => s.version.to_s }
#需要上传到私有库的文件 这个地址是已项目地址为根目录地址。*.{h,m}指的是该目录下的所有.h.m文件
s.source_files = "Tools/Tools/**/*.{h,m}"
#项目所依赖的资源地址,资源包括storyboard,xib,图片
s.resources = "Tools/Tools/**/*.{storyboard,xib}", "Tools/Assets.xcassets"
#是否是RAC
s.requires_arc = true
#项目所依赖的三方库 依赖多个要写多个 s.dependency
s.dependency "HLNetworking"
end
7.提交上传项目改动
git add .
git commit -m "init version 1"
git push
git tag 1 //tag值要与podsec文件的s.version一致
pod lib lint // 验证podsepc文件格式,验证项目确保项目能跑通
git push --tags //提交tag值
8.最后将podspec文件上传到私有库
pod repo push myspec --allow-warnings // myspec是私有pod仓库的名字,--allow-warnings是忽略警告
注意:如果这一步没有上传成功,很有可能是你的podspec文件有问题,请仔细检查。
9.调用
修改podfile文件中,有两种方式:
1.在头部添加
source 'https://github.com/CocoaPods/Specs.git' #官方仓库的地址
source 'http://git.jsjit.cn/ios/GCModular/ModuleSpec.git'
http地址是你的私有库文件git地址
2.pod ‘库名’, :path => '库地址'
建议第一种,只用导入一次(前提是你的私有库地址都关联到source地址)。第二种每个私有库都需要引用地址
最后关于报错:pod lib lint后的验证报错
1.error: unknown type name
在spec文件添加s.libraries = "c++","c"
然后执行:pod lib lint --allow-warnings --use-libraries
2.file not found with <angled> include; use "quotes" instead
创建自己的库时依赖其它的库,引用的不对。正确的引用是 #import <YYModel/YYModel.h>
把引用地址写全
3.添加MRC文件
non_arc_files = 'GCTool/GCTool/NetworkTool/Zresponse.pb.h','GCTool/GCTool/NetworkTool/Zresponse.pb.m'
s.exclude_files = non_arc_files
s.subspec 'no-arc' do |sp|
sp.source_files = non_arc_files
sp.requires_arc = false
end
4.会上传APPdelegate等无关文件的问题
当推送的库中包含子文件夹的时候,可能会把APPdelegate等s.sourcefile指定路径以外的文件拉取到本地,有时是因为库内引用了APPdelegate,或是APPdelegate的分类,删掉APPdelegate的分类后,拉取库还是会有APPdelegate,这时把sourcefile对应的库的子文件夹依次写出上传,而不要用**,解决这个问题
网友评论