在开发过程中,经常会使用到第三框架,我们通过一个pod install命令,很方便的就将第三方框架加到我们自己的项目中。
如果我们也想将自己写的组件或库开源出去,让别人也可以通过pod install命令安装自己的框架该怎么做呢?下面,我就教大家一步一步的将自己的pods发布到CocoaPods 中。如果你现在对CocoaPods还不太了解,推荐你看一看这篇文章:用CocoaPods做iOS程序的依赖管理
近期研究CocoPods的制作,本文章为记录其制作过程以及本人所遇到的问题,以及解决方法。本文章记录本人制作的过程,如有可以修正之处,欢迎留言指教。
制作过程参考:
主要过程如下:
一、创建自己的git仓库
二、clone仓库到本地
三、向本地git仓库中添加创建Pods依赖库所需文件
四、提交修改文件到github
五、上传podspec文件到CocoaPods官方仓库中
六、查看我们自己创建的Pods依赖库
七、删除提交到cocoapods上的框架
篇章较长,本次介绍第三、四步,全部篇章如下:
三、向本地git仓库中添加创建Pods依赖库所需文件
打开终端,cd 进入步骤二clone的文件夹路径下,输入指令pod spec create ‘’你的命名‘’,我的命名与文件夹名一致。
pod spec create demo.podspec
“TextEdit” 打开该文件显示如下(截图部分截图):
![](https://img.haomeiwen.com/i3519106/fd69cb87ca60d508.png)
该文件是ruby文件,里面的条目都很容易知道含义。
其中需要说明的几个参数:
s.name是我们库的名称,s.version是库原代码版本号,s.summary是对我们库的一个简单的介绍,s.homepage声明库的主页,s.license是所采用的授权版本,s.author是库的作者。s.platform是我们库所支持的软件平台,这在我们最后提交进行编译 时有用。s.source声明原代码的地址。步骤一已经托管在github上,所以这里将地址copy过来就行了。
![](https://img.haomeiwen.com/i3519106/7d77f01d9d1cb532.png)
对于很多第三方库而言,在发布的时候都会打上一个tag,如版本0.0.1就会打上一个名为0.0.1的tag
我在github上面打的tag步骤为:
![](https://img.haomeiwen.com/i3519106/b4e03baf72aa4f10.png)
![](https://img.haomeiwen.com/i3519106/b1aca45df952460e.png)
填写相关release信息
![](https://img.haomeiwen.com/i3519106/09fbfe982c668cea.png)
我这里还是使用的tag,所以我这里就是这样的:
s.source = { :git => "https://github.com/......git", :tag => "#{s.version}" }
以后我们的库有新版本时,我们可以修改相应的version和source。
s.source_files声明了我们库的源代码的位置,所以这个地方不能填错了。
例如目录结构(此处摘自其他朋友写的简书说明,如何发布自己的开源框架到CocoaPods ):
![](https://img.haomeiwen.com/i3519106/4afcd59689c93b78.png)
所以工程根目录下的HUPhotoBrowse文件夹才是库的原代码目录。
s.source_files ="HUPhotoBrowser","HUPhotoBrowser/**/*.{h,m}"
目录的层级关系一定要跟代码库的保持一致。这里前一部分可以不用的,因为我这里后一部分的HUPhotoBrowser/**与前面是一致的,这个指定的目录下的文件都会进行编译。如果该目录下还有一些资源文件(如图片等),这些文件并不需要进行编译。可以使用s.resourcs声明。*.{h,m}是一个类似正则表达式的字符串,表示匹配所有以.h和.m为扩展名的文件。
s.framework声明了所依赖的核心库,我这里只用到了UIKit,所以是这样的:
s.framework ="UIKit"
如果你的项目中依赖多个库,可以使用
s.frameworks ="SomeFramework","AnotherFramework"
当然,我们开发的库中也可能还依赖第三方库,例如JSONKit,那么,就可以做如下声明:
s.dependency "JSONKit", "~> 1.4"
如果有多个需要填写多个s.dependency。
附上一份文件,可作为参考,也可自行请参考其他人发布的项目,获取下来参考他们如何编辑(比如:Lede-Inc/LDBusMediator ):
Pod::Spec.new do |s|
s.name = "POD名字"
s.version = "0.0.2"
s.summary = "说明."
s.description = <<-DESC
描述内容
DESC
s.license = {:type => 'MIT', :file => 'LICENSE'}
s.homepage = 'https://github.com/...git的主页地址'
s.author = { "作者" => "作者" }
s.source = { :git => "https://github.com/步骤一创建的git地址", :tag => "#{s.version}" }
s.platform = :ios, '9.0'
s.ios.deployment_target = '9.0'
s.source_files = '项目名字/发布的文件夹名字/*.{h,m}'
# s.resource = "*.png" 备注:如果有引用图片
# s.resource_bundles = { '你的项目名' => ['文件所在文件夹/*.{xib}'] } 备注:如果有引用xib , storyboard;以逗号分开
s.requires_arc = true
end
编辑完podspec文件后,需要验证一下这个文件是否可用,如果有任何WARNING或者ERROR都是不可以的,它就不能被添加到Spec Repo中,不过xcode的WARNING是可以存在的,验证需要执行命令:
XX为你制作的库的命名
pod spec lint XX.podspec
如果有引用到库framwork或C语言库的话必须使用
pod spec lint XX.podspec --use-libraries // 验证
pod spec lint XX.spec.podspec --verbose // 可以打印更多信息
pod spec lint XX.podspec --allow-warnings //忽略警告 ,如果你的项目存在警告
pod spec lint XX.podspec --use-libraries //引用到第三方
pod spec lint XX.podspec --verbose (打印错误信息)
当看到 “你的PodName” passed validation.时,说明验证通过了
验证podspec文件,遇到几个问题不能通过,文章最后把本人所遇到的问题以及解决方式说明一下,希望能帮助到遇到同样问题的朋友。
四、提交修改文件到github
在步骤三中增加很多新文件,需要将它们提交到github仓库中去。我使用SourceTree commit的。
根据步骤三内容,为pod添加版本号并打上tag。然后执行pod验证命令
pod lib lint
pod lib lint --allow-warnings //忽略警告 ,如果你的项目存在警告
如果一切正常,这条命令执行完后会出现下面的输出:
你的Pod名字 passed validation.
![](https://img.haomeiwen.com/i3519106/e1381ec56a45475d.png)
到此,pod验证就结束了。
需要说明的是,在执行pod验证命令的时候,打印出了任何warning或者error信息,验证都会失败!如果验证出现异常,打印的信息会很详细,大家可以根据对应提示做出修改。
网友评论