创建pod库-podspec
#cocoapods #依赖管理 #podspec
创建pod库
这里以SYDCentralPivot 为例,阐述pod库从创建到发布的过程。

1. pod lib
pod lib命令是用来创建 develop pod 库:
pod lib create: 创建一个pod库pod lib lint: 验证一个pod库
2. 创建一个pod库
首先在项目目录下执行命令:
pod lib create [podname]
经过一系列的配置(平台,开发语言,测试框架,是否创建Demo),就完成了pod库的创建。
在项目目录下,生成了Demo,源码目录以及配置文件:

*.podspec
podspec是当前pod库的描述文件Example
Demo 工程pod库目录 (SYDCentralPivot)
pod库源码目录LICENSE
开源许可证README.md
3. 打开Demo 工程

在podfile中可以看到Demo工程以相对路径的方式引入了SYDCentralPivot库。此时,SYDCentralPivot属于 Development Pod,在 Development Pods目录下,而不是在Pods 目录下。
Development Pod 和 普通 Pod 的 区别
Development Pod 和 普通 Pod 的 区别Development Pod 可以直接修改源文件,并在主工程中编译运行。而 普通 Pod 是不可以的
4. 在pod库中添加或者修改源码
直接将需要的源文件拖到 SYDCentralPivot/Class文件夹下; 在 podspec文件的配置中,源文件都在该目录下
s.source_files = 'SYDCentralPivot/Classes/**/*'执行pod install后,源文件就会出现在 Development Pods目录下:

在 Demo 工程中,调用pod库的代码

5. podspec文件
podspec 文件是对pod库命名,地址,版本,源文件,资源文件以及依赖的具体描述。
version
pod库通过tag控制版本, 当前 `podspec`文件中的version应该与最新的tag保持一致summary,description
pod 库的描述homepage
远端库主页地址source
远端仓库地址source_files
源文件路径resource_bundles
资源文件路径public_header_files
公共头文件路径dependency
对于其他pod库的依赖frameworks
依赖的系统框架vendored_frameworks
依赖的非系统框架libraries
依赖的系统库vendored_libraries
依赖的非系统的静态库
Pod::Spec.new do |s|
s.name = 'SYDCentralPivot'
s.version = '1.1.0'
s.summary = 'A Simple Factory and Router for UIViewController,ServiceModel and some other object'
# 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 = 'Factory and Router'
s.homepage = 'https://github.com/ExistOrLive/SYDCentralPivot'
# s.screenshots = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
s.license = { :type => 'MIT', :file => 'LICENSE' }
s.author = { 'ExistOrLive' => '[email protected]' }
s.source = { :git => 'https://github.com/ExistOrLive/SYDCentralPivot.git', :tag => s.version.to_s }
# s.social_media_url = 'https://twitter.com/<TWITTER_USERNAME>'
s.ios.deployment_target = '9.0'
s.source_files = 'SYDCentralPivot/Classes/**/*'
# s.resource_bundles = {
# 'SYDCentralPivot' => ['SYDCentralPivot/Assets/*.png']
# }
# s.public_header_files = 'Pod/Classes/**/*.h'
# s.frameworks = 'UIKit', 'MapKit'
# s.dependency 'AFNetworking', '~> 2.3'
end
在修改了podspec文件后,记得使用pod lib lint 和 pod spec lint验证修改是否有效。
6. 添加资源文件
如果希望在Pod库中添加资源文件(图片,音频以及其他一些配置文件等),就需要用到配置resource_bundles
s.resource_bundles = {
'SYDCentralPivot' => ['SYDCentralPivot/Assets/*.png']
}而在代码中,并不能够通过MainBundle访问这些资源文件,因为这些文件并不在主工程下,而是在主工程依赖的库中。
// 通过pod库中定义的类获取pod库对应的bundle
let bundle = Bundle(for: ZLServiceManager.self)
// 在通过bundle获取文件内容或者路径
let configPath = bundle.path(forResource: "ZLServiceConfig", ofType: "plist")5. 将pod库推送到远程
这里推送到Github,首先在Github上创建一个仓库,将仓库克隆到本地,将pod库复制到本地的仓库中。
修改
podspec文件,homepage 应该设置为远端库主页地址 source 设置为远端库地址 version 与 tag 保持一致提交到远端库
git add . git commit -m “xxx” git remote add origin 远程代码仓库地址 git push origin master 或者 git push -u origin master(一般第一次提交用) git tag 版本号/git tag -a 版本号 -m “version 版本号”(注:这里的版本号必须和podspec里写的版本号一致) git tag 查看版本号是否提交成功 git push - -tags可以直接使用地址依赖pod库
pod 'SYDCentralPivot', :git => 'https://github.com/ExistOrLive/SYDCentralPivot.git'
6. 将podspec推送公共pod repo 或者 私有pod repo中
当把podspec文件推送到公共pod repo后,你就可以通过 pod search 搜索该pod以及直接使用名字安装pod库
6.1 推送到公共pod repo
pod trunk [COMMAND] 是用来和 Cocoapods API 交互的命令.

首次推送pod,需要注册账号

pod trunk push [PATH]pod trunk push将本地开发的pod库的podspec文件推送公共Cocoapods库中,即Cocoapods Specs在推送之前,pod 还会验证
podspec文件是够有效。如果不通过的话,就无法推送上去
因此在推送之前必须使用
pod lib lint或则pod spec lint去验证podspec文件后期pod库更新版本后,同样使用
pod trunk push推送。
6.2 推送到私有pod repo
7. 创建 subspec
subspec 需要指定子库的源文件和头文件
s.subspec 'Core' do |core|
core.ios.deployment_target = '9.0'
core.source_files = 'SYDCentralPivot/Classes/Core/*'
core.public_header_files = 'SYDCentralPivot/Classes/Core/*.h'
end参考文档
最后更新于
这有帮助吗?