使自己的开源代码支持Cocoapods

作者: o翻滚的牛宝宝o | 来源:发表于2016-08-18 11:37 被阅读841次
Cocoapods!

说起Cocoapods,让我想起了在大学时手动拖第三方代码包的灰色经历。。。当时想玩玩百度地图和高德地图的api,各种link系统包,修改Build Settings里的参数,最后运行不起来还一行一行和官方文档里对。。特别是百度和高德地图都拖进一个项目中时各种问题真的泪崩。。自从使用了Cocoapods,PodFile里一行代码就解决了这些烦恼。

不过这里我并不想讲怎么装Cocoapods和怎么使用,因为对于iOS App的开发,几乎都采用了Cocoapods吧,而且网上教材很多,查找也很方便。这里我只想讲一下怎么在Cocoapods发布自己的代码。(其实在第一次使用Cocoapods我就有强烈的愿望这么做,一直拖到现在。。)

使开源库支持pod


我们先看一下Pod版本号:

pod --version
1.0.1

这里主要介绍下流程。其实使自己的开源库支持Pod的过程并不复杂,主要是在自己的git库里创建一个.Podspec文件,里面配置一些参数,然后推送到远程的cocoapods,这样其他人就能用你的开源库拉。一般都使用gitHub作为自己的git库,我也不例外,这里我选用我写的第三方库NMAutoHeightTableCell来测试。地址

创建.Podspec文件

  • 首先从githubclone你的项目文件到本地。(可以使用命令行,也可以使用图形界面SourseTree,为了方便截图,我使用SourseTree)
SourseTree 项目界面
  • cd 到你的项目目录下用pod spec create NMAutoHeightTableCell命令创建.Podspec文件。
    $ cd /Users/nuomi/NMKit/NMAutoHeightTableCell/lib 
    $ pod spec create NMAutoHeightTableCell
    
    Specification created at NMAutoHeightTableCell.podspec

于是我们的项目文件下就生成了NMAutoHeightTableCell.podspec文件。用文本编辑器或者vi开这个文件,去掉注释,大概就剩下这么几个部分。

Pod::Spec.new do |s|

 s.name         = "NMAutoHeightTableCell"
 s.version      = "0.0.1"
 s.summary      = "A short description of NMAutoHeightTableCell."
 s.description  = <<-DESC
               DESC

 s.homepage     = "http://EXAMPLE/NMAutoHeightTableCell"

 s.license      = "MIT"

 s.author             = { "nuomi" => "xsz88287703@126.com" }

 s.platform     = :ios, "7.0"

 s.source       = { :git => "http://EXAMPLE/NMAutoHeightTableCell.git", :tag => "#{s.version}" }

 s.source_files  = "Classes", "Classes/**/*.{h,m}"
 s.exclude_files = "Classes/Exclude"
 s.requires_arc = true
 s.dependency "Masonry", "~> 0.6"
end
  • s.name: 库名称,我这里是 NMAutoHeightTableCell

  • s.version: 版本号。

  • s.summary: 摘要,简要说明你的开源库。

  • s.description: 描述,写在<<-DESCDESC之间。

  • s.homepage: 项目主页。

  • s.license: 许可证,不懂就填MIT,具体可以网上查下MIT license

  • s.author: 作者。

  • s.platform: 支持语言和SDK包限制,我这里是支持IOS7以上

  • s.source: git地址和tag,什么是tag后面会讲。

  • s.source_files: 包含的文件。这里有必要说明下,怎么找自己的要公开的路径。我的项目路径为https://github.com/NBaby/NMKit/tree/master/NMAutoHeightTableCell/lib,前面s.source填写的是https://github.com/NBaby/NMKit.git,可见已经到NMKit这个文件夹了,所以s.source_files只要填NMAutoHeightTableCell/lib就能到Lib下了。后面因为只要.h,.m文件,所以s.source_files完整的形式为:"NMAutoHeightTableCell/lib", "*.{h,m}"

  • 主要的就是上面这些还有些其他的注意事项可以参考网上的解决方案:

如果我们的开源库依赖系统库怎么办?

# s.framework = 'SomeFramework'// 去掉#,设置依赖的系统库名称
# s.frameworks = 'SomeFramework', 'AnotherFramework'//设置多个系统库名称

# s.library = 'iconv'// 设置只依赖一个系统的library
# s.libraries = 'iconv', 'xml2' // 设置依赖多个系统的library

# s.xcconfig = { 'HEADER_SEARCH_PATHS' => '$(SDKROOT)/usr/include/libxml2' }// 这里是工程配置,这样使用者就不需要手动处理,由pod自动处理了。

如果我们的开源库依赖系统库怎么办?

s.dependency 'JSONKit', '~> 1.4'//设置我们的开源库依赖哪些第三方库和依赖的版本号。

我的例子:

Pod::Spec.new do |s|


 s.name         = "NMAutoHeightTableCell"
  s.version      = "0.0.1"
 s.summary      = "一个可以使用Autolayout实现自动计算Cell高度的扩展库"

 s.description  = <<-DESC
               一个可以使用Autolayout实现自动计算Cell高度的扩展库
               DESC

  s.homepage     = "https://github.com/NBaby/NMKit/tree/master/NMAutoHeightTableCell"

  s.license      = "MIT"

 s.author             = { "nuomi" => "xsz88287703@126.com" }

 # s.platform     = :ios
 s.platform     = :ios, "7.0"
  s.source       = { :git => "https://github.com/NBaby/NMKit.git", :tag => "0.0.1" }
  s.source_files  = "NMAutoHeightTableCell/lib", "*.{h,m}"

 s.requires_arc = true

end

好了,如果这里都填好了,可以先测一下本地的.Podspec文件是否填对。

检验.Podspec文件

cd 到本地开源库项目的.Podspec文件目录下,使用pod lib lint命令来尝试编译,如果要忽略警告,可以在后面添上--allow-warnings,如果成功会显示passed validation

编译成功

如果有错也没事,根据错误提示慢慢改.Podspec文件,好了再编译,直到成功为止。

上传本地文件到gitHub

还记得我们.Podspec文件文件里用了:tag => "0.0.1"这句话么,这里就要用到了。首先用SourceTree切出一个分支,名字命名为“0.0.1”,这里一定要对上,否则后面会找不到。

tag 0.0.1

然后就可以推送的gitHub上去了。

推送到gitHub

这里用命令行完成操作也是可以的。

推送到远程的cocoapods

回到终端,通过 pod trunk push 库名.podspec --allow-warnings来推送到远程的cocoapods.
记得第一次推送到cocoapods会让你填一个邮箱,然后往你邮箱你发一封验证邮件。由于当时没截图。。这里就放上验证邮件的截图吧。。

验证邮件

一切顺利的话就能用Pod Search搜索你的库拉。

Paste_Image.png

咦,小伙伴的电脑搜不到怎么办。。试着pod repo update一下就ok~

总结


第一次尝试肯定会遇到横多问题,其实不用担心,将错误信息在网上搜一下就会出来很多解决方法。有些错误写得很直白,稍微看下也就懂了(像我的路径没对上就提示找不到xxx文件)。

这次尝试也算是实现了一年前的心愿,也算是一种进步吧~

我是翻滚的牛宝宝,欢迎大家评论交流~

相关文章

网友评论

  • 低调小青年:MacdeMacBook-Pro:DGCustom mac$ pod trunk push DGProgressHUD.podspec
    Updating spec repo `master`

    CocoaPods 1.1.0.rc.2 is available.
    To update use: `sudo gem install cocoapods --pre`
    [!] This is a test version we'd love you to try.

    For more information, see https://blog.cocoapods.org and the CHANGELOG for this version at https://github.com/CocoaPods/CocoaPods/releases/tag/1.1.0.rc.2

    Validating podspec
    -> DGProgressHUD (0.0.1)
    - WARN | description: The description is equal to the summary.
    - WARN | [iOS] license: Unable to find a license file

    [!] The spec did not pass validation, due to 2 warnings (but you can use `--allow-warnings` to ignore them).
    MacdeMacBook-Pro:DGCustom mac$ pod lib lint --allow-warnings

    -> DGProgressHUD (0.0.1)
    - WARN | description: The description is equal to the summary.
    - WARN | [iOS] license: Unable to find a license file

    DGProgressHUD passed validation.
  • 低调小青年:请问我用pod trunk push 库名.podspec 命令成功执行之后,pod search 库名 搜不到我的库是怎么回事?是不是还需要设置什么呢?pod repo update也用了,还是找不到。求大神指点。。。
    低调小青年:上面是我push命令执行后的结果显示DGProgressHUD passed validation.但是却搜不到,不知道那里错了?
    o翻滚的牛宝宝o:@低调小青年 看看是不是因为有警告而通不过,命令后面加上--allow-warnings
    o翻滚的牛宝宝o:你先确定下是不是push成功了。很可能没成功你以为成功了。
  • 天清水蓝:弱弱的问下,博主用的什么git工具?感觉蛮屌的,我命令行用不惯:cry:
    o翻滚的牛宝宝o:@天清水蓝 source tree mac和windows都有
  • guoguo_lay:最后一步,
    回到终端,通过 pod trunk push 库名.podspec来推送到远程的cocoa pods.
    推送远端cocoapod库,不是很明白。
    o翻滚的牛宝宝o:@zhang_lei 如果是第一次提交,还得注册一下,具体的可以网上找找。。
    o翻滚的牛宝宝o:pod trunk push 你的文件名.podspec 这个是一句终端的命令。

本文标题:使自己的开源代码支持Cocoapods

本文链接:https://www.haomeiwen.com/subject/pfdvsttx.html