这里所有的演示都是以我项目来的。
1. 去github
新建一个代码仓库
github
上创建项目仓库的时候记得创建LICENSE
(许可证/授权)文件,此文件必须要有!
- 打开终端, 将创建的代码仓库
clone
到本地 (这里可以直接使用终端git clone https://github.com/gouzyi/ZainSDK.git
, 也可以使用git
可视化工具。我用的sourcetree
) - 打开本地仓库
ZainSDK
,用Xcode
新建一个工程ZainSDKExample
。注意项目是放在ZainSDK
下的,把我们需要发布到CocoaPods
的文件也一起放入。 - 推送到
Git
远程仓库,这样我们的代码仓库基本上就OK了
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
中,不过Xcode
的WARNING
是可以存在的,验证需要执行命令:(二选一)
注意:需要cd到当前的本地仓库ZainSDK
目录下,执行
pod lib lint (从本地验证你的pod能否通过验证)
pod spec lint(从本地和远程验证你的pod能否通过验证)
如果这样就表示OK啦
下面是出错的样子
我们可以使用如下命令来查看更多信息。按照他说的来慢慢修改
pod lib lint --verbose
其他:
pod lib lint --allow-warnings :表示验证时候,忽略警告
pod lib lint --verbose :表示验证如果出错会显示更详细的错误信息
当出现"XXX passed validation" 表示成功,Warning可以忽略
5.注册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
发布自己的.podspec
到cocoapods
注意:是在当前的本地仓库ZainSDK
目录下,执行
pod trunk push ZainSDK.podspec
更新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子组件),建议小伙伴们去下载AFNetworking、JKOCProjectTool看下.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公有库)