做 iOS/macOS 的朋友, 相信都很熟悉 CocoaPods。那么怎样发布自己的框架到 CocoaPods 供别人使用呢?
假设我们要发布一个 MXDemoKit 的框架, 我们以最简单的情况进行说明, 首先在 Github 创建一个仓库, 克隆到本地。
# ~
$ cd ~/Desktop
$ git clone https://github.com/Meniny/MXDemoKit.git
接下来当然是编写代码并进行必要的测试。通常, 我们还会包含 README.md
、LICENSE
、.gitignore
文件及一个示例工程。
然后, 重点来了 (敲黑板!), 我们还需要创建一个描述文件对这个框架进行说明。
格式及常用的配置信息有:
Pod::Spec.new do |s|
s.name = "MXDemoKit" # 框架名称
s.version = "1.0.0" # 版本号
s.summary = "A delightful framework written in Swift" # 描述
s.description = <<-DESC
MXDemoKit is a delightful framework for iOS/macOS/watchOS/tvOS platform written in Swift.
DESC
# 详细的说明, 可选
s.homepage = "https://github.com/Meniny/MXDemoKit" # 主页
s.license = 'MIT' # 开源协议
s.author = { "Meniny" => "Meniny@qq.com" } # 作者信息
s.source = { :git => "https://github.com/Meniny/MXDemoKit.git", :tag => s.version.to_s } # 代码的来源, 这里指定了一个git仓库中与前面版本号一致的tag, 也就是 tag 1.0.0
s.social_media_url = 'https://meniny.cn/' # 社交媒体链接
s.ios.deployment_target = '8.0' # iOS 支持的最低系统版本号
s.osx.deployment_target = '10.10' # macOS 支持的最低系统版本号
s.tvos.deployment_target = '9.0' # tcOS 支持的最低系统版本号
s.watchos.deployment_target = '2.0' # watchOS 支持的最低系统版本号
# 不支持的平台不需要设置deployment_target
s.source_files = 'MXDemoKit/**/*{.h}','MXDemoKit/**/*{.swift}' # 有效的源文件, 指定哪些文件是被包含到框架中的, 使用相对路径
s.public_header_files = 'MXDemoKit/**/*{.h}' # 指定公开的头文件
s.frameworks = 'Foundation', 'UIKit' # 指定需要链接的系统框架
s.dependency "Jsonify" # 指定你的框架所依赖的其他CocoaPods框架, 没有可以忽略
end
将这些配置信息保存到刚才克隆好的文件夹根目录中, 文件名为 框架名称.podspec
, 本例中为 MXDemoKit.podspec
。
接下来, 为了避免不必要的麻烦, 在发布之前我们先进行验证:
# ~/Desktop
$ cd MXDemoKit
$ pod lib lint
这个操作可能会消耗一定的时间, 当你最终看到 框架名 passed validation.
提示后则表示通过了验证。如果出现错误和警告则需要按照实际情况进行修正, 并再次进行验证直到通过。
接着, 提交代码到远程仓库:
# ~/Desktop/MXDemoKit
$ git add .
$ git commit -m "new version"
$ git push
此外, 刚才在配置 .podspec
时也提到了, 需要创建与框架版本号一直的新 tag
:
$ git tag 1.0.0
$ git push --tags
完成后, 我们进行最后一步, 将框架发布到 CocoaPods:
# ~/Desktop/MXDemoKit
$ pod trunk push
当然, 出于各种原因, 你可能会存在一些警告信息不能及时解决, 对于这种情况, 你需要多使用 --allow-warnings
选项忽略这些警告:
# ~/Desktop/MXDemoKit
$ pod trunk push --allow-warnings
顺利的话, 等待一段时间后你会看到一个漂亮的提示信息:
-----------------------------------------------
🎉 Congrats
🚀 MXDemoKit (1.0.0) successfully published
📅 July 13th, 07:00
🌎 https://cocoapods.org/pods/MXDemoKit
👍 Tell your friends!
-----------------------------------------------
现在, 你可以通过 Podfile
来使用这个框架了。
pod 'MXDemoKit'
删除版本/废弃框架
有些情况下, 你可能会希望删除某个已经发布的版本, 或者废弃整个框架。这时候,除了删除 git 仓库的特定 tag 或整个仓库外, 你还可以通过 pod 指令来进行操作。
要删除某个版本时:
pod trunk delete 框架名 版本号
这个操作需要在执行后再次输入 y
进行确认, 执行结束后, 某些情况下可能会产生一些错误, 这时你可以在执行 pod repo update
之后使用 pod search 框架名
搜索进行确认。
当你想要废弃这个框架时:
$ pod trunk deprecate 框架名