做 iOS/macOS 的朋友, 相信都很熟悉 CocoaPods。那么怎样发布自己的框架到 CocoaPods 供别人使用呢?

假设我们要发布一个 MXDemoKit 的框架, 我们以最简单的情况进行说明, 首先在 Github 创建一个仓库, 克隆到本地。

# ~
$ cd ~/Desktop
$ git clone https://github.com/Meniny/MXDemoKit.git

接下来当然是编写代码并进行必要的测试。通常, 我们还会包含 README.mdLICENSE.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" => "[email protected]" } # 作者信息
  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 框架名