在开发过程当中,常常会使用到第三框架,咱们经过一个pod install
命令,很方便的就将第三方框架加到咱们本身的项目中。
若是咱们也想将本身写的组件或库开源出去,让别人也能够经过pod install
命令安装本身的框架该怎么作呢?ios
下面,我就教你们一步一步的将本身的pods发布到CocoaPods
中。若是你如今对CocoaPods
还不太了解,推荐你看一看这篇文章:用CocoaPods作iOS程序的依赖管理git
下面我会经过一个名为HUPhotoBrowser
的项目来说解一下整个过程。
项目发布到github
后,须要打上tag
。以后咱们在工程根目录中初始化一个Podspec文件:github
pod spec create HUPhotoBrowser
该命令将在本目录产生一个名为HUPhotoBrowser.podspec
文件。用编辑器打开该文件,里面已经有很是丰富的说明文档。下面介绍如何声明第三方库的代码目录和资源目录,还有该第三方库所依赖ios核心框架和第三方库。这是个人podspec文件:正则表达式
Pod::Spec.new do |s| s.name = "HUPhotoBrowser" s.version = "0.0.2" s.summary = "photo browser for ios." s.homepage = "https://github.com/hujewelz/HUPhotoBrowser" s.license = "MIT" s.author = { "Jewelz Hu" => "hujewelz@163.com" } s.platform = :ios, "7.0" s.source = { :git => "https://github.com/hujewelz/HUPhotoBrowser.git", :tag => "0.0.2" } s.source_files = "HUPhotoBrowser", "HUPhotoBrowser/**/*.{h,m}" s.framework = "UIKit" # s.frameworks = "SomeFramework", "AnotherFramework"
s.name
是咱们库的名称,s.version
是库原代码版本号,s.summary
是对咱们库的一个简单的介绍,s.homepage
声明库的主页,s.license
是所采用的受权版本,s.author
是库的做者。 s.platform
是咱们库所支持的软件平台,这在咱们最后提交进行编译 时有用。s.source
声明原代码的地址。我这里是托管在github上,因此这里将地址copy过来就好了。json
对于不少第三方库而言,在发布的时候都会打上一个tag
,如版本0.0.1就会打上一个名为0.0.1
的tag
,你也能够选择一个最新的commit
来做为该库0.0.1版的代码, 那么最终source就是这样了:xcode
{:git => "https://github.com/hujewelz/HUPhotoBrowser.git", :commit => '65584b0e0b08e01f83e66d487180c164b5182409'}
我这里仍是使用的tag,因此我这里就是这样的:浏览器
{ :git => "https://github.com/hujewelz/HUPhotoBrowser.git", :tag => "0.0.2" }
之后咱们的库有新版本时,咱们能够修改相应的version
和source
。s.source_files
声明了咱们库的源代码的位置,因此这个地方不能填错了。
先看一下个人目录结构:网络
因此工程根目录下的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
。
编辑完podspec
文件后,须要验证一下这个文件是否可用,若是有任何WARNING或者ERROR都是不能够的,它就不能被添加到Spec Repo中,不过xcode的WARNING是能够存在的,验证须要执行命令:
pod spec lint PodName.podspec
当看到HUPhotoBrowser passed validation.
时,说明验证经过了。在检测你的podspec时候,若是直接用pod spec lint xxx.podspec的话,出现错误它只会直接一句红色的话The spec did not pass validation, due to 1 error.
告诉你的有多少个error和warning,而不会具体的指出你的错误出在哪里,这时候你能够在这句指令后面加上参数--verbose 这样就会告诉你具体的错误信息。这样根据它提示你的错误信息去解决就能够了。
编辑好podspec
文件后就能够将该podspec
文件保存到本机的~/.cocoapods/repos/master/Specs
目录中仅供本身使用,也能够将其提交到CocoaPods/Specs代码库中。下面咱们先将其保存到本机中:
下面能够看一下是否能够经过搜索找到该库:
一样在须要依赖于HUPhotoBrowser
这个库的项目,能够将下列添加到项目的Podfile
文件中
pod 'HUPhotoBrowser', '~0.0.2'
保存文件,并用pod install
安装HUPhotoBrowser
库。
经过以上步骤建立Pod库还只能供本身使用,下面会继续讲解如何将其提交到CocoaPods/Specs代码库中,让其余人也能够经过pod install
安装咱们的开源库。
在cocoapods使用了trunk以后,CocoaPods
须要0.33以上版本,用 pod --version
查看版本,若是版本低,须要更新。
$ pod trunk register orta@cocoapods.org 'Orta Therox' --description='macbook air'
你们在注册时须要替换成本身的邮箱和用户名,一切顺利的话就会受到一份邮件,点击邮件中的连接后验证一下:
pod trunk me
固然,若是你的pod是由多人维护的,你也能够添加其余维护者:
$ pod trunk add-owner ARAnalytics kyle@cocoapods.org
上面的工做完成以后,咱们就能够开始 trunk push
了。
pod trunk push
命令会首先验证你本地的podspec
文件(是否有错误),以后会上传spec
文件到trunk
,最后会将你上传的podspec
文件转换为须要的json
文件。在工程根目录(包含有.podspec)下执行命令:
pod trunk push
若是在trunk push
过程当中报错了,仔细查看一下错误信息。我当初就是使用了podspec
文件中描述的版本所没有的API,以后修改podspec
文件中 s.platform = :ios, "7.0"
就能够了。
若是你能看的上面的结果说明上传成功了。咱们也能够在本地的~/.cocoapods/repos/master/Specs
目录下看到转换以后的json
文件,
至此咱们整个制做本身的开源库的过程就完成了,之后有新版本只须要修改工程根目录下的podspec
文件就好了,而后从新执行pod trunk push
命令。
最后对这个过程作个总结:
开源库发布以后,须要打上tag
进入到项目根目录下,建立podspec
文件
pod spec create PodName
编辑podspec
文件中的相关信息,有两个比较重要的地方 s.source
和 s.source_files
,能够验证是否有误:
pod spec lint PodName.podspec
注册pod trunk
$ pod trunk register orta@cocoapods.org 'Orta Therox' --description='macbook air'
发布到pod trunk
pod trunk push [NAME.podspec]
该命令在包含有.podspec
文件的目录下执行
更新pod库
pod setup
若是pod trunk push
成功后没法pod search
到本身的库,可执行该命令。
哈哈。好吧,我认可其实我是来打广告的。例子中的HUPhotoBrowser是我开源的一个图片浏览器的库,使用起来很是简单,一行代码就以实现图片浏览功能,支持本地和网络图片。但愿你们能够支持一下,欢迎你们star。若是有什么问题的话能够直接issue我。最后,但愿能跟你们共同进步。项目地址:HUPhotoBrowser