发布CocoaPods公有库

这里所有的演示都是以我项目来的。

1. 去github新建一个代码仓库

github上创建项目仓库的时候记得创建LICENSE(许可证/授权)文件,此文件必须要有!

  • 打开终端, 将创建的代码仓库clone到本地 (这里可以直接使用终端git clone https://github.com/gouzyi/ZainSDK.git, 也可以使用git可视化工具。我用的sourcetree
  • 打开本地仓库ZainSDK,用Xcode新建一个工程ZainSDKExample注意项目是放在ZainSDK下的,把我们需要发布到CocoaPods的文件也一起放入。
  • 推送到Git远程仓库,这样我们的代码仓库基本上就OK了
1.png

2.创建spec 文件(create后面的名字就是需要上传到Cocoapods的库名)

  • 打开终端进入到上面的git本地仓库ZainSDK目录下。
  • 终端执行:pod spec create ZainSDK
  • 打开ZainSDK.podspec(这里提示一下:默认是用文本编辑器打开的。这里我们可以选择其他代开方式:Xcode, Atmo
  • 编辑podspec文件

一些常用的信息介绍:

name:框架名
version:当前版本(注意,是当前版本,假如你后续更新了新版本,需要修改此处)
summary:简要描述,在pod search ZCPKit的时候会显示该信息。
description:详细描述
homepage:页面链接
license:开源协议
author:作者
source:源码git地址
platform:支持最低ios版本
source_files:源文件(可以包含.h和.m)
public_header_files:头文件(.h文件)
resources:资源文件(配置的文件都会被放到mainBundle中)
resource_bundles:资源文件(配置的文件会放到你自己指定的bundle中)
frameworks:依赖的系统框架
vendored_frameworks:依赖的非系统框架
libraries:依赖的系统库
vendored_libraries:依赖的非系统的静态库
dependency:依赖的三方库

写好如下:


Pod::Spec.new do |spec|

  # 项目名
  spec.name         = "ZainSDK"
  # 版本号
  spec.version      = "0.0.1"
  # 简单描述
  spec.summary      = "ZainSDK是iOS日常开发常用的工具类"
  # 详细描述
  spec.description  = "包含UIView、UILabe、UIButton、NSString、UIColor...常用Extenions"
  # 项目的主页
  spec.homepage     = "https://github.com/gouzyi/ZainSDK"
  # 项目遵守的协议
  spec.license      = { :type => "MIT", :file => "LICENSE" }
  # 作者的邮箱
  spec.author       = { "zainguo" => "572249347@qq.com" }
  # 社交地址
  spec.social_media_url = "https://www.jianshu.com/u/b2d703ff4984"
  # 源码git地址
  spec.source       = { :git => "https://github.com/gouzyi/ZainSDK.git", :tag => spec.version }
  # spec.source_files  = "ZainSDK/**/*.{h,m}"
  # 源文件(可以包含.h和.m)
  spec.source_files  = 'ZainSDK/ZainSDKMacro.h'
  # 头文件(.h文件)
  spec.public_header_files = 'ZainSDK/ZainSDKMacro.h'
  # 是否支持ARC
  spec.requires_arc = true
  # 支持的版本
  spec.platform     = :ios, "8.0"

  spec.subspec 'ZainExtensions' do |e|
    e.source_files = 'ZainSDK/ZainExtensions/**/*'
    e.dependency 'MBProgressHUD'
    # 依赖的系统框架
    e.frameworks = 'UIKit'
  end

  spec.subspec 'NavigationBar' do |nav|

    nav.source_files = 'ZainSDK/NavigationBar/*.{h,m}'
    nav.dependency 'ZainSDK/ZainExtensions'

  end
  spec.subspec 'NetworkManager' do |net|
    net.source_files = 'ZainSDK/NetworkManager/*.{h,m}'
    net.dependency 'AFNetworking'
  end

end

source 常见写法

/// git commit -m =>"13287dd",讲pod版本与git仓库中的某一次提交绑定
spec.source = { :git => "https://github.com/gouzyi/ZainSDK.git", :commit => "13287dd" }

/// 将这个Pod版本与Git仓库中某个版本的comit绑定 
spec.source = { :git => "https://github.com/gouzyi/ZainSDK.git", :tag => 1.0.0 }

/// 将这个Pod版本与Git仓库中相同版本的comit绑定
spec.source = { :git => "https://github.com/gouzyi/ZainSDK.git", :tag => spec.version }

source_files资源文件目录:

# NavigationBar文件夹下的所有.h .m文件
nav.source_files = 'ZainSDK/NavigationBar/*.{h,m}'
# ZainExtensions所有路径下的所有匹配文件
e.source_files = 'ZainSDK/ZainExtensions/**/*'

3. 代码推送到GitHub,记得打上tag

因为cocoapods是依赖tag版本的,所以必须打tag,以后再次更新只需要把你的项目打一个tag,然后修改.podspec文件中的版本(version)接着提交到cocoapods官方就可以了。我这里打tag,也是用sourcetree来操作的。提交命令请看下面

git tag "0.0.1"  
git push --tags

4.校验podspec文件

编辑完podspec文件后,需要验证一下这个文件是否可用, 如果有任何WARNING或者ERROR都是不可以的,它就不能被添加到Spec Repo中,不过XcodeWARNING是可以存在的,验证需要执行命令:(二选一)

注意:需要cd到当前的本地仓库ZainSDK目录下,执行

pod lib lint (从本地验证你的pod能否通过验证)
pod spec lint(从本地和远程验证你的pod能否通过验证)

如果这样就表示OK啦

success.png

下面是出错的样子

我们可以使用如下命令来查看更多信息。按照他说的来慢慢修改

pod lib lint --verbose

其他:

 pod lib lint --allow-warnings :表示验证时候,忽略警告
 pod lib lint --verbose :表示验证如果出错会显示更详细的错误信息
当出现"XXX passed validation" 表示成功,Warning可以忽略

5.注册CocoaPods账号

Cocoapods官网

终端输入:

pod trunk register orta@cocoapods.org 'Orta Therox' --description='macbook air'

Example:

pod trunk register 572249347@qq.com 'Orta Therox' --description='macbook air'

输入完以后会提示已经发送了一个验证码到邮箱,你可以打开你的邮箱验证即可。打开邮件中的链接地址就OK了

查看注册信息

pod trunk me

发布自己的.podspeccocoapods

注意:是在当前的本地仓库ZainSDK目录下,执行

pod trunk push ZainSDK.podspec
complete.png

更新pod库

 pod setup

验证

pod search ZainSDK

如果出现这个:

[!] Unable to find a pod with name, author, summary, or description matching `ZainSDK`

因为刚提交后项目用pod search命令会搜不到,因为本地的索引没有更新,使用下面命令删除索引文件执行如下操作:

 rm ~/Library/Caches/CocoaPods/search_index.json

再次执行pod search ZainSDK 大功告成!

总结:要是遇到分层问题(subspec子组件),建议小伙伴们去下载AFNetworkingJKOCProjectTool看下.podspec文件。

题外话:

可以删除一个pod的特定版本来纠正意外推送。

pod trunk delete PODNAME VERSION
pod trunk delete ZainSDK 0.0.1

你也可以放弃整个pod和所有版本。

pod trunk deprecate PODNAME

为共有库添加或移除owners

pod trunk add-owner ZainSDK xxx@qq.com(即:pod trunk add-owner 库名 邮箱)

执行下面指令移除共有库owner:

pod trunk remove-owner ZainSDK xxx@qq.com(即:pod trunk remove-owner 库名 邮箱)

指令查看库当前状态,版本,所有人等

 pod trunk info ZainSDK

更新版本

  • 代码提交到git远程仓库
  • 打一个新的tag
  • 打开xxx.podspec文件,修改配置。和版本号
  • pod spec lint校验
  • pod trunk push xxx.podspec
  • pod setup
  • pod search xxx检查是否更新完成

参考文献:

利用cocoapods管理开源项目,支持 pod install安装整个流程记录(github公有库)

Cocoapods整理(三)——编写podspec文件

发布自己框架到CocoaPods

如何发布自己的开源框架到CocoaPods

cocoaPods之subspec子组件

iOS 开发创建CocoaPods公有库以及subspec分支功能

Cocopods组件化之podspec文件解析

cocoapods创建共有库过程中遇到的坑以及版本删除

[Cocoapods]项目添加Cocoapods支持遇到的坑

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