封装自己的库到CocoaPods (Trunk),以及podspec文件

说明

本文介绍采用 trunk 方式上传CocoaPods
trunk需要pod在0.33及以上版本,如果你不满足要求,需要更新pod.

CocoaPods官方博客

图片是流程图


image

一:在Github上新建一个repo,上传代码.

不多讲 此篇文章Demo地址

需要注意的一点是:必须跟远程仓库打tag

git tag 0.2.0 -light

解释:创建轻量标签不需要传递参数,直接指定标签名称即可。

git tag -a 0.1.0 -m "xxxxxxxxxxxx"

解释:创建附注标签时,参数-a即annotated的缩写,指定标签类型,后附标签名。参数m指定标签说明,说明信息会保存在标签对象中。

tag 相关操作

列出当前仓库的所有标签
$ git tag

列出符合模式的标签
$ git tag -l 'v0.1.*'

查看标签版本信息
$ git show v0.1.0

删除本地tag
git tag -d <tagname>
    
删除远程tag
git push origin --delete tag <tagname>

查看所有远程分支
git branch -a 

查看tag
git tag

在某个commit 上打tag
git tag test_tag c809ddbf83939a89659e51dc2a5fe183af384233  
  
本地tag推送到线上
git push origin test_tag 

本地删除tag   
git tag -d test_tag  

本地tag删除了,再执行该句,删除线上tag      
git push origin :refs/tags/test_tag 

切换  分支
git checkout xxxxxxxx

切换标签与切换分支命令相同
$ git checkout [tagname]
解释:切换标签后处于一个空的分支上,即”You are in ‘detached HEAD’ state.”

误打或需要修改标签时,需要先将标签删除,再打新标签
$ git tag -d v0.1.2
解释:参数-d即delete的缩写,意为删除其后指定的标签。

给指定的commit打标签
$ git tag -a v0.1.0 49e0cd22f6bd9510fe65084e023d9c4316b446a6
解释:打标签不必要在HEAD之上,也可在之前的版本上打,这需要你知道某个提交对象的校验和,通过git log命令获取。

将v0.1.0标签提交到git服务器
$ git push origin v0.1.0
解释:通常的git push不会将标签对象提交到git服务器,我们需要进行显式的操作。

将本地所有标签一次性提交到git服务器
$ git push origin –tags
git远程仓库的操作
git查看远程仓库地址命令:git remote -v
git移除远程仓库地址: git remote rm origin
git添加远程仓库地址: git remote add origin
git remote add origin https://xxxxxxxxxx.git
git push -u origin master

二 :注册 trunk

pod trunk register yourEmail  yourName  --verbose

邮箱以及用户名请对号入座。
用户名我使用的是我的邮箱前缀。(一般别人喜欢用GitHub名字)
--verbose参数是为了便于输出注册过程中的调试信息。
执行上面的语句后,你的邮箱将会受到一封带有验证链接的邮件,如果没有请去垃圾箱找找,有可能被屏蔽了。
点击邮件的链接就完成了trunk注册流程。使用下面的命令可以向trunk服务器查询自己的注册信息:

pod trunk me

输出如下信息就表示你注册成功,可以进行下面的流程:


Snip20180404_2.png

三:配置PodSpec文件

需要做两件事情
1、为你的代码添加podspec描述文件;
2、将podspec文件通过trunk推送给CocoaPods服务器

什么是podspec描述文件呢?
简单地讲就是让CocoaPods搜索引擎知道你的代码的作者、版本号、源代码地址、依赖库等信息的文件。任何支持CocoaPods的开源代码都必须有podspec文件。
官方配置文件说明地址

Pod::Spec.new do |s|
  s.name         = "LearnCocoaPods"
  s.version      = "0.0.1"
  s.summary      = "UIBarButtonItem extension"
  s.description  = "UIBarButtonItem extension  Learn CocoaPods"
  s.homepage     = "https://github.com/zhangxueyang/LearnCocoaPods"
  s.license      = "MIT"
  s.author             = { "cocoazxy" => "cocoazxy@gmail.com" }
  s.platform     = :ios, "5.0"
  s.source       = { :git => "https://github.com/zhangxueyang/LearnCocoaPods.git", :tag => "#{s.version}" }
  s.source_files  = "Classes", "Classes/**/*.{h,m}"
  s.requires_arc = true
end

podspec文件中有很多参数,但并不是每一个都能用上,我写的这个podspec文件中的参数基本上够用了。这个文件使用ruby语言写的,所以如果有ruby语言的功底看这个代码应该很熟悉,当然没有也没关系,因为理解起来实在太简单了。

下面还是挨个对每个参数介绍下:

1.name :pod的名字,应该与你的工程名保持一致
2.version: 版本号,你以为是你工程的版本号,那你就大错特错了,我在这个地方坑了好久。后来才知道这个version是和你的branch名称保持一致的,如果你的branch名字叫做1.0.0,那这个version就可以要写成1.0.0,当更新版本的时候,要重新建立一个branch命名为1.0.1,然后version也要写成1.0.1。
3.summary:一句话介绍你的pod
4.homepage:pod的url地址
5.license:你的pod所遵守的开源协议、 一般都是‘MIT’
6.author: 作者名,联系方式
7.platform:pod所支持平台和最小系统版本
8.ios.deployment_target:同上
9.source:pod的地址和tag
10.source_files:pod在工程中的所在目录,如果有多个不同的目录,则写成这种形式 :’floder1…’,’floder2….’,’….’
11.requires_arc:是否是ARC。

3.1---添加podspec描述文件

pod trunk push  LearnCocoaPods.podspec  --allow-warnings

pod trunk push  xxxxxxxxxx.podspec(换成你自己的podspec文件名字)

3.2--- 等待上传成功就好

在上传的过程工作了三件事
1、验证你的podspec文件是否合法。在trunk方式之前我们一般用“pod lib lint”命令进行验证。
2、上传podspec文件到trunk服务器(其实最终也会自动添加到https://github.com/CocoaPods/Specs中,只是使用trunk方式省去了以前先fork在pull request的繁琐操作)
3、将你上传的podspec文件转成json格式文件
执行上面的push操作,就相当于你把你的源代码提交给CocoaPods团队审核了,现在CocoaPods审核只需要几秒钟或者几分钟就可以完成了。
看到这个 说明成功了

--------------------------------------------------------------------------------
 🎉  Congrats

 🚀  LearnCocoaPods (0.0.1) successfully published
 📅  April 4th, 08:54
 🌎  https://cocoapods.org/pods/LearnCocoaPods
 👍  Tell your friends!
--------------------------------------------------------------------------------

3.3--- 搜索看能不能找到我们的库文件

先用"pod search"查找一下你的代码,有结果的话就欢天喜地;没有的话执行"pod setup"进行本地依赖库更新,再search。

pod setup 更新慢的解决办法

因为在 pod setup 更新过程中:
Cocoapods在将https://github.com/CocoaPods/Specs的信息下载到你电脑的~/.cocoapods目录下并进行文件比对,总数据大小大约在100MB左右,再加上服务器在国外,因此速度会比较慢。
在执行过程中你也可以新开一个Terminal窗口,cd到~/.cocoapods目录,用du -sh *来查看下载进度。

解决办法就是替换镜像文件
先用这个命令查看软件源

gem sources -l 
如果是 https://rubygems.org/ 
或者是 https://ruby.taobao.org/

就需要先移除掉
gem sources --remove https://rubygems.org/
gem sources --remove https://ruby.taobao.org/
gem sources --remove https://gems.ruby-china.org/
淘宝镜像已经不提供更新

换成这个
gem sources --add https://gems.ruby-china.com/

在进行pod setup 就会快很多

error: RPC failed

error: RPC failed

error: RPC failed; curl 56 GnuTLS recv error (-54): Error in the pull function.
fatal: The remote end hung up unexpectedly
fatal: early EOF

报错原因:

git缓存区不足

解决方案

修改Git的传输字节限制即可。

git config --global http.postBuffer  524288000

建议看下这篇文章 用CocoaPods做iOS程序的依赖管理
关于文章中的 淘宝镜像源 应该是作者好久没更新文章 所以还是淘宝的, 在上边已经说明,需要特别注意.

说下遇到的坑

1搜索不出来结果
Unable to find a pod with name, author, summary, or descriptionmatching 'xxxxxxx'。
解决办法:
删除~/Library/Caches/CocoaPods目录下的search_index.json文件

pod setup成功后会生成~/Library/Caches/CocoaPods/search_index.json文件。
终端输入rm ~/Library/Caches/CocoaPods/search_index.json
删除成功后再执行pod search

podspec文件更新方法

执行pod trunk push操作后发现podspec文件的某个地方写错了,想更新一下。
对于这种情况,我们可能会先尝试着在把podspec文件push一次。但是如果你的代码版本号没变(podspec里的version自然也没变)就会提示push失败,即使你更改了podspec的其他地方,pod也会认为这两个文件是同一个。
更新源代码版本号(如:1.1.1->1.1.2)
重新push version tag,然后再执行pod trunk push操作。

上边是直接提交了文件夹上去 接下来是提交带有demo的文件

参考下边文章就好了
使用Cocoapods创建私有podspec,带有DEMO
这个排版比较好点
更新版本的错误处理,一般是忘记改 版本号 或者 忘记在spec 文件没有改 version

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

推荐阅读更多精彩内容

  • 一、创建的github仓库原文地址 1 进入Github网站www.github.com登陆自己的账号后 2 建立...
    freesan44阅读 3,923评论 2 12
  • 项目组件化、平台化是技术公司的共同目标,越来越多的技术公司推崇使用pod管理第三方库以及私有组件,一方面使项目架构...
    swu_luo阅读 21,685评论 0 39
  • 网上将自己的项目做成Pod 的文档很多,但是有些文档已经很老了,不适合新手上手,经过这两天的研究我决定还是自己写一...
    黄鱼儿啦啦啦阅读 7,121评论 10 17
  • 筱雅/文 “家是最小国,国是千万家……”。 什么是家?有妈、有爸、有娃,这就是一个家。 什么是年?就是一个家聚在一...
    秋水浅语阅读 217评论 1 3
  • 我们总是把过错归结于无知,以为掩饰了伤口,就可以维持从前的美好!!却不知自己内心的伤口,却没那么容易修复,即使外表...
    BlueSky6阅读 299评论 0 0