使自己的开源代码支持Cocoapods

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文件)。

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343

推荐阅读更多精彩内容