cocoapods系列教程---让自己的开源框架支持cocoapods

cocoapods系列教程---安装与使用
cocoapods系列教程---Podfile文件
cocoapods系列教程---Podfile.lock文件 和 Spec Repo
cocoapods系列教程---spec文件
cocoapods系列教程---原理篇
cocoapods系列教程---让自己的开源框架支持cocoapods
cocoapods系列教程---模块化设计
cocoapods系列教程---创建私有pods

参考:http://studentdeng.github.io/blog/2013/09/13/cocoapods-tutorial/

提交代码到代码托管平台

既然是开源,要求代码任何人都能够访问,这里选择github,当然也可以用其他平台如oschina等,项目必须是公开项目.比如我的这个:https://github.com/iOSSinger/SGExtension.git

创建spec文件

  • 将代码克隆到本地,如果本地已经存在,直接跳过这一步.

  • 创建.podspec文件,切换到项目根目录,创建spec文件:

    //切换到项目根目录
    cd SGExtenion
    
    //创建spec文件
    pod spec create SGExtension
    
    
  • 用xcode打开 SGExtension.podspec,里面有英文注释,我这里直接给简单模板,其实就是去掉了注释,详细的设置看这里

Pod::Spec.new do |spec|

spec.name                  = 'SGExtension'

spec.version               = '1.0.2'

spec.ios.deployment_target = '8.0'

spec.license               = 'MIT'

spec.homepage              = 'https://github.com/iOSSinger'

spec.author                = { "iOSSinger" => "747616044@qq.com" }

spec.summary               = '各种工具的合集'

spec.source                = { :git => 'https://github.com/iOSSinger/SGExtension.git', :tag => spec.version }

spec.source_files          = "SGExtension/**/{*.h,*.m}"

spec.resources             = "SGExtension/source.bundle"

spec.frameworks            = 'UIKit'

spec.library               = 'z'

spec.requires_arc          = true

end

解释下每行的意思:

  • spec.name
    名字,pod search 搜索的关键词,注意这里一定要和.podspec的名称一样,否则报错

  • spec.version
    版本号

  • spec.ios.deployment_target
    支持的ios最低版本

  • spec.license
    许可证,一般MIT,这里提醒一下,根目录下必须要有LICENSE这个文件,可以直接把我项目中的copy一份,改下作者名字即可.一般github创建仓库的时候可以选择许可为MIT,会自动帮你生成该文件.

  • spec.homepage
    项目主页地址,要求必须能访问

  • spec.author
    作者信息

  • spec.summary
    项目简介

  • spec.source
    项目的地址,填上项目的github地址,tag => spec.version表示git项目的tag值与上面的spec的版本一致,这里是 1.0.2 .

  • spec.source_files
    项目源文件,主要是.h和.m文件,

    • *表示匹配所有文件
    • {.h,.m} 表示匹配所有以.h和.m结尾的文件
    • ** 表示匹配所有子目录,以及递归子目录
  • spec.resources
    项目所需的资源文件,比如图片

  • spec.frameworks
    项目的依赖框架,比如UIKit,不需要后缀名

  • spec.library
    项目依赖的库文件(这个是系统的库文件),不需要后缀名,比如sqlite,libz等.以lib开头的需要省略掉lib这三个字母.例如:libz需要简写为z否则报错.

  • spec.requires_arc
    是否是arc,一般true

如果你的项目依赖了别的pod项目,可以这样写:

spec.dependency = 'AFNetworking'

提交代码,并打上tag
//提交代码
git push

//打tag
git tag 1.0.2

//将tag推送到远端
git push origin --tags

附上目录:

Paste_Image.png
验证podspec文件
pod spec lint SGExtemnsion.podspec

这一步如果报错,根据错误自行修改,根据大致意思能看出来个大概,终端会给出哪一行出错了.一般就是语法错误,资源找不到,git地址不对或者不能访问.指定的文件如{.h,.m}找不到,一般再检查检查基本没问题.

2018.1更新: 有时候明明代码没问题(很确定),但是还是不通过,可以尝试清理下缓存:

//获取已经缓存的列表
pod cache list

//清除指定的缓存
pod cache clean xxx(缓存的名字,上一步可获取)
注册trunk,并提交spec文件cocoapods仓库
  • 注册chunk,查看是否注册过

    pod trunk me
    
    
  • 如果没有注册,那么注册:

    pod trunk register 747616044@qq.com "iOSSinger"
      
    

    填上邮箱用户名就可以了.注册完成之后会给你的邮箱发个邮件,进入邮箱邮件里面有个链接,需要点击确认一下.然后再查看下是否注册成功:

    pod trunk me
    
    
  • 提交spec文件到 CocoaPods 中心仓库

    pod trunk push SGExtension.podspec 
    
    

    如果前面都没问题,这一步基本也没啥问题.不过网速比较慢可能要等很久,这一步建议翻墙,不然有可能真的很慢.

  • 然后验证一下,是否可以查到

    pod search SGExtension
    
    

如果能够查到,恭喜你 !,如果查不到,往下看

  • 解决方案:

    • 查看上一步(提交到代码仓库)是否成功,再次执行提交:
    pod trunk push SGExtension.podspec
    
    

    如果出现如下信息:

    [!] Unable to accept duplicate entry for: SGExtension (1.0.2)
    
    

    那么说明已经提交到cocoapods仓库成功,那么有可能就是本地仓库没有更新.更新本地仓库:

    pod repo update
    
    
    • 再次执行 pod search SGExtension 命令,如果还搜索不到,继续往下看:
    rm ~/Library/Caches/CocoaPods/search_index.json  
     
    

    这句话是移除已经生成的搜索目录缓存文件,移除之后,执行pod search会重新生成一份最新的缓存列表,基本到这里就差不多了.

    • 如果还有问题,那就需要终极大招,但是不推荐用,时间很长,除非翻墙.

      pod repo remove master  
      pod setup
      
      

      或者

      sudo rm -fr ~/.cocoapods/repos/master
      pod setup
      
      

      这两种写法的意思都是移除本地cocoapods仓库,重新从官网拉取一遍.可能时间比较长,所以不建议用,如果网速度快可以考虑使用,也可以翻墙.整个仓库打下大约500M+(截止当前时间).

集成到项目中试试
  target '项目名' do
  pod 'SGExtension'
  end

多人共同维护你的开源项目

如果需要多个人维护一个库,每个人都应该有权限push提交spec文件;第一个push的人可以被认为是管理员,可以再添加子管理员,这样子管理员就有权限push了

pod trunk add-owner 邮箱地址

移除某个管理员

pod trunk remove-owner 邮箱地址

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

推荐阅读更多精彩内容