cocoapods制作公有库
2020-03-18 本文已影响0人
pingxhcn
1、先在终端搜索一下看看名字是不是冲突
pod search xxx
如果没有冲突,就在github新建项目,并 git clone 到本地。
2、在项目文件夹下创建 podspec 文件, 执行以下命令,建议名字与你pod 名字一样
pod spec create xxx
3、将要上传的文件放在与 podspec 同级的文件中。
屏幕快照 2020-03-18 下午2.34.32.png4、用 Xcode 打开 .podspec 文件
#Pod::Spec.new do |s| 是它的语法, 就相当现在这个s 变量就是我们spec的对象,下面我们给它相关的属性赋值就可以.
Pod::Spec.new do |s|
#required,就是你pod 的名字.
spec.name = "XHBaseLibrary"
#required,版本号, 这里要说一下是,因为我们正常用的 source 是:git => :tag的方式,所以每次更新新版本要打tag push to git , tag 的version 写在这里.
spec.version = "0.0.1"
#required,摘要应该简短,但内容丰富.
spec.summary = "XHBaseLibrary info."
#optional,官方是说可选, 但建议写上,(描述比摘要要长)注意是在<<-DESC DESC之间写下.
spec.description = <<-DESC
You can write your description here.
DESC
#required,Pod主页的URL,如果你的项目上传到gitHub,就是你项目的首地址.
spec.homepage = "https://github.com/Pingxh/XHBaseLibrary"
#optional,显示Pod的效果截图。 适用于面向UI的库。 CocoaPods建议使用gif格式.
# spec.screenshots = "www.example.com/screenshots_1.gif", "www.example.com/screenshots_2.gif"
#required,Pod的许可证。我们当前在项目下创建的LICENSE现在派上用场了.注意名字一定是: LICENSE, 不用文件后缀的.它可以是txt文件名字为:LICENSE,不要后缀.
spec.license = { :type => 'MIT', :file => 'LICENSE' }
#required,pod维护的作者,前面是名字,后面是email.
spec.author = { "风筝" => "13286953452@126.com" }
#required,lib的位置,如果放在gitHub,就是gitHub项目下的地址,写上tag的版本, 新版本这样写:spec.version.to_s
spec.source = { :git => "https://github.com/Pingxh/XHBaseLibrary.git", :tag => "#{spec.version}" }
#写下你代码的位置, 也可以在后面指定.{h,m,swift},如果多个逗号隔开,swift提供对外的class与method建议加上public
spec.source_files = 'testOrderPlaceSDK/Classes/**/*'
#排除的文件.
#spec.exclude_files = "Classes/Exclude"
# 指定公开的.h 文件,如果不指定,那source_files中所有头文件都是public的.
#spec.public_header_files = "Classes/**/*.h"
#本地 framework
spec.ios.vendored_frameworks = 'testOrderPlaceSDK/frameworks/AlipaySDK.framework','testOrderPlaceSDK/frameworks/OrderPlaceSDK.framework'
#本地 a library
#spec.ios.vendored_library = 'Libraries/libProj4.a'
#导入 resource 的多种方式
spec.resources = ['XHBaseLibrary/Assets/AlipaySDK.bundle', 'XHBaseLibrary/Assets/*.png']
spec.resource_bundles = {
'XHBaseLibrary' => ['XHBaseLibrary/Assets/**/*.{storyboard,xib}']
}
#下载后不应删除的任何文件,比如某个txt
#spec.preserve_path = 'IMPORTANT.txt'
#spec.preserve_paths = 'Frameworks/*.framework'
#optional,如果code中用到swift,必须指定swift版本,如果用的是OC可以不用写.
spec.swift_version = '4.0'
#optional,指定支持的cocoapods版本.
#spec.cocoapods_version = '>= 0.36'
#optional,如果指定 use_frameworks! ,则pod应包含静态库框架.
spec.static_framework = true
#required,指定ios版本,这个相当重要,如果 profile文件中: platform :ios, "8.0",选择的版本是8.0.但我这个pod的spec.ios.deployment_target 是9.0,那这个就不会安装到ios 8.0上.对后面更新pod lib很有用.
spec.ios.deployment_target = "8.0"
#系统 frameworks
spec.frameworks = 'CoreTelephony', 'SystemConfiguration', 'QuartzCore', 'CoreText', 'CoreGraphics', 'UIKit', 'Foundation', 'CFNetwork', 'CoreMotion'
#系统 a libraries
spec.libraries = 'z', 'c++'
#依赖的其他pod
#spec.dependency 'AFNetworking', '~> 1.0'
#spec.dependency 'RestKit/CoreData', '~> 0.20.0' // 使用到其他subspecs
#spec.ios.dependency 'MBProgressHUD', '~> 0.5'
#requires_arc允许您指定哪个source_files使用ARC.这可以支持ARC的文件,true表示所有source_files都使用ARC.
#不使用ARC的文件会有-fno-objc-arc编译器标志.
#此属性的默认值为true.
# spec.requires_arc = true
#对subspec做个说明, 一般用到这种情况的不多, subspec类似p:NSOjbect ,而p可以说是subspec,它基于NSOjbect,我们一半用到subspec模式时会指定一个'Core'
#它包括基本的东西,而subspec是它的另一个子类~~可以这么理解吧
#下面看使用和配置
# 使用 subspec order : pod 'XHBaseLibrary/Order'
# 使用 core : pod 'XHBaseLibrary/Core'
# spec.default_subspec = 'Core'
# spec.subspec "Core" do |core|
# core.source_files = 'sources/extensions/ANAlipayResultCode.h'
# core.resources = 'AlipaySDK.bundle'
# core.vendored_frameworks = 'AlipaySDK.framework'
# core.public_header_files = 'AlipaySDK.framework/Headers/**/*.h', 'sources/extensions/ANAlipayResultCode.h'
# end
# spec.subspec "Order" do |order|
# order.source_files = 'sources/order/**/*.{h,m}'
# 注意要dependency core
# order.dependency 'AlipaySDK-2.0/Core'
# end
end
4、接下来我们验证下本地pod 有没效
*参数 --allow-warnings 是允许警告
pod lib lint XHBaseLibrary.podspec --allow-warnings
- 下面我们先把代码推送到gitHub
- 打上tag git tag '0.0.1', 注意tag 要版本号要与你在podspec 中所写的version 一致
- 再将tag 也push到github git push --tags
5、执行下面指令验证本地库与远程库有没效,如果看到 ** xxxx.podspec passed validation.** 就是通过了.看需要是否要添加(--allow-warnings)
pod spec lint XHBaseLibrary.podspec
6、push 到pod spec repo master
pod trunk push XHBaseLibrary.podspec
7、看到如下显示,说明就成功了
屏幕快照 2020-03-18 下午2.49.24.png
- 可以试试 pod search xxx , 如果报: [!] Unable to find a pod with name, author, summary, or description matching xxxx,请打开: /Users/用户名/Library/Caches/CocoaPods ,需要把search_index.json 删除再重新pod search , 它会重新创建检索索引, 这个过程有点长.
- 记录几个常用路径
- pod 命令安装路径: /usr/local/bin
- pod 框架索引信息缓存路径: /Users/用户名/.cocoapods/repos/master
- 索引缓存路径: ~/Library/Caches/CocoaPods/
可能出现的错误
- 如果提交成功,可以在 pod search xxxx 中搜索到,但是在项目中使用时,出现职下错误:
[!] CocoaPods could not find compatible versions for pod "XHBaseLibrary":
In Podfile:
XHBaseLibrary
Specs satisfying the `XHBaseLibrary` dependency were found, but they required a higher minimum deployment target.
要查看一下 .podspec 中的 platform :ios, 'xx' 与项目中的 Podfile 文件的 platform : ios, 'xx',版本数字是否相同,把 Podfile 中的 platform: ios, 'xx' 修改为一样就可以解决了。