一:Spec文件
在我们第一次安装pods时,都会主动的去拉取公有的repo,其实无论是共有的还是私有的下载后都在用户的/Users/用户名/.cocoapods/repos 目录下。每一个第三库都有一个spec文件,或者你自己的私有库也应该有这个spec文件。这些spec文件就在相应的repo里。
我将我自己创建一个私有库的spec文件贴出来
#
# Be sure to run `pod lib lint KBRCategory.podspec' to ensure this is a
# valid spec before submitting.
#
# Any lines starting with a # are optional, but their use is encouraged
# To learn more about a Podspec see http://guides.cocoapods.org/syntax/podspec.html
#
Pod::Spec.new do |s|
s.name = 'KBRCategory'
s.version = '0.1.2'
s.summary = 'KBRCategory.'
# This description is used to generate tags and improve search results.
# * Think: What does it do? Why did you write it? What is the focus?
# * Try to keep it short, snappy and to the point.
# * Write the description between the DESC delimiters below.
# * Finally, don't worry about the indent, CocoaPods strips it!
s.description = "a description KBRCategory"
s.homepage = 'https://gitee.com/BlueLegend'
# s.screenshots = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
s.license = { :type => 'MIT', :file => 'LICENSE' }
s.author = { 'raojb@knowbox.cn' => 'raojb@knowbox.cn' }
s.source = { :git => 'https://gitee.com/BlueLegend/KBRCategory.git', :tag => s.version.to_s }
#这里改成了不以tag版本来拉取,以最新的commit
# s.source = { :git => 'https://gitee.com/BlueLegend/KBRCategory.git'}
# s.social_media_url = 'https://twitter.com/<TWITTER_USERNAME>'
s.ios.deployment_target = '8.0'
s.source_files = 'KBRCategory/Classes/**/*'
# s.resource_bundles = {
# 'KBRCategory' => ['KBRCategory/Assets/*.png']
# }
# s.public_header_files = 'Pod/Classes/**/*.h'
# s.frameworks = 'UIKit', 'MapKit'
s.dependency 'AFNetworking'
end
里面无非就是你要提交到Cocoapods上的名字、版本号,简介、主页、License、作者信息、最低平台信息、从哪个Git上下载、需要引入的framework、那些文件需要被引入,那些文件是资源文件以及是否需要ARC的模式。
license
用MIT就可以了,一定要正确填写不然在验证的时候验证通过
source
是库的地址
s.source_files
是要将哪些文件放入进去
s.subspec 添加子模块
其实可以添加子模块,所谓的子模块,就是在pods出来后有子文件夹
s.subspec 'Security' do |ss|
ss.source_files = 'AFNetworking/AFSecurityPolicy.{h,m}'
ss.public_header_files = 'AFNetworking/AFSecurityPolicy.h'
ss.frameworks = 'Security'
end
二:创建公有库
- 向Cocoapods方面注册一个账号
这个命令会收到一份邮件,让你进行会话授权。具体机制没有研究过,当你切换电脑时,需要重新进行会话授权
pod trunk register raojb@knowbox.cn 'rjb' --description='My own computer'
创建spec文件
pod spec create 'KBCategory'
在写好代码后,在你项目的根目录下运行,会在该项目目录下生成一个spec文件。修改这个spec文件的里的相关信息。
如果是项目已经建立好了,需要创建时,可以在根目录下执行
pod spec create 'KBCategory'
也会生成一个spec文件
验证Podspec文件
pod lib lint Name.podspec
这一步是最坑人的地方。会有各种让你通不过的理由。比如,找不到文件,找不到Lience等。
我遇到了,spec文件与s.source_files文件路径设置的不一致问题。
开源协议文件也要生成。路径也要设置正确。
- ERROR | [iOS] xcodebuild: Returned an unsuccessful exit code.
遇到这样的错误,是编译没有通过的情况。如果自己在工程里编译通过,看是不是依赖库没有设置正确。别忘了依赖系统库也要填写。总之基本没有一次性验证通过的,具体问题具体查吧。
例如
s.framework = "UIKit"
最终你出现passed validation
就表示验证通过。验证通过表示,你给定的环境,单独编译这部分你提供的目录下的代码能自行编译通过。
上传
可上传项目到Cocoapods官方的仓库里。
pod trunk push 项目名.podspec
上传成功后,可以在命令行里pod search "库名字",若果没有应该是有缓存,删除这个文件
~/Library/Caches/CocoaPods/search_index.json
重新pod search就可以了。
三:创建私有库
其实创建私有库的核心过程还是跟公有库是差不多的。不管是私有库还是公有库,关注点都在于Podspec文件的书写。其实我们讲到pod trunk push 项目名.podspec这条命令,其实是默认我们的Podspec文件提交到Cocoapod的仓库(Specs),然后我们之后的pod install或者pod update都是从这个仓库中提取Podspec文件,然后根据文件里面的信息去取对应的源代码。大家可以上去找找自己的开源的Podespec文件转换成json的文件。
建立自己的私有仓库
pod repo add '仓库名' '仓库地址'
建立好后,可以在你的cd ~/.cocoapods/repos
目录下查看,是否有你的私有仓库。
写代码->写Podspec文件了->检查项目和Podspec文件->打tag
这些工作与创建公有库一样
提交podspec文件到仓库
公有库是pod trunk push 项目名.podspec
私有库是pod repo push '私有仓库名' 项目名.podspec
其实就都是讲podspec文件提交到相应的仓库里
特别说明
四:使用私有库
使用公有库与使用私有库的方式一样。都是在podfile文件里有一个source。这个source就是标识所要使用的源(spec文件仓库)。
#公用的私有远程索引库源
source 'git@gitee.com:BlueLegend/BlueLegendPrivateSpec.git'
#github远程索引库源
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '8.0'
target ‘testdown’ do
#pod 'lottie-ios'
pod 'Masonry'
pod 'SDWebImage', '~> 4.3.0'
pod 'YYModel', '~> 1.0.4'
pod 'MJRefresh', '~> 3.1.15.3'
pod 'KBRCategory'
end