发布于 

Cocoapods 管理开源项目

准备工作

在进行下面工作之前,请确保你做了下面三件事情:

1. 创建或者已经有了 github 账号.
2. 了解和熟悉如何在 github 上面创建 Repository.
3. MacOS 上面安装了 Cocoapods.

如果你还没有使用 Cocoapods, 建议看看 Mac OSX 10.11.1+ 安装 Cocoapods 这篇博客.

在博客 iOS 项目: 打造本地 pod 库 里面有介绍如何打造本地的 pod 库,不需要借助任何仓库就可以完成,操作简单,适合项目组内使用。

今天给大家分享如何将代码开源并放到 pod 库中,供别人使用。这种方式属于打造公共(Public repo)仓库, 任何人都可以搜索到你贡献的库并使用你的库。后面会跟大家分享如何打造私有(Private repo),敬请期待。

这篇博客是基于一个实际例子 MZInsetLabel 来说明的,期待与优秀的你交流讨论。

创建 Repository 并完善项目

1. 在 Github 上面创建 Repository,取名为 MZInsetLabel.

2. 将该工程 clone 到本地磁盘.

3. 写代码,这里我只写了 MZInsetLabel.h | .m 文件.

4. 创建 podspec 文件.

使用下面命令,即可产生该文件。

1
pod spec create MZInsetLabel

在当前目录会生成 MZInsetLabel.podspec 文件。按照文件规范和实际情况填写即可,如果不知道怎么填写,可以在 Github 上面找一个开源项目参考即可。

注意: Tag 版本号不要错误.

最终内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Pod::Spec.new do |s|
s.name = "MZInsetLabel"
s.version = "0.2.0"
s.summary = "MZInsetLabel is subClass of UILabel."
s.description = <<-DESC
MZInsetLabel is a sub class of UILabel that can be set insets.
DESC
s.homepage = "http://www.veryitman.com"
s.license = "MIT"
s.author = { "veryitman" => "veryitman@126.com" }
s.platform = :ios, "7.0"
s.source = { :git => "https://github.com/veryitman/MZInsetLabel.git", :tag => "#{s.version}" }
s.source_files = "*.{h,m}"
s.framework = "UIKit"
s.requires_arc = true
end

项目检测

检查该 podspec 文件,执行下面命令

1
pod lib lint MZInsetLabel.podspec

–verbose 可以输出更加详细的内容

1
pod lib lint MZInsetLabel.podspec --verbose

正确的话, 你可以看到下图如所示的内容:
1

在检测的过程中,如果有一些警告导致无法验证通过,可以使用 --allow-warnings 参数规避这些 warning,但我还是建议大家尽量将 warning 修改好。

1
pod lib lint --allow-warnings

pod lib lint *.podspec 是只从本地验证你的 pod 能否通过验证.

pod spec lint*..podspec 是从本地和远程验证你的 pod 能否通过验证.

大家可自行选择这两种方式。

添加项目到 Github Repository

将本地的代码 push 到 Github 的 Repository, 就是刚才创建的 MZInsetLabel.

1
2
3
4
5
git add `文件`或者`文件夹`

git commit -m "Init"

git push

在你的 Github Repository 上面创建一个 Release 作为 Tag(0.1.0版本),如图所示:
1

推送到 cocoapods

1. 注册 trunk

pod trunk register 你的邮箱 ‘用户名’ –description=’简单描述’

完整命令如下:

1
pod trunk register veryitman@126.com 'veryitman' --description='mark'

2. 打开邮箱, 激活邮件, 点击链接激活

3. 检查注册信息

执行命令如下:

1
pod trunk me

4.添加到 cocoapods

执行下面命令, 即可.

1
pod trunk push MZInsetLabel.podspec

成功的效果图:

1

1

验证使用

1. 检查是否可以搜索到

1
pod search MZInsetLabel

如果搜索不到, 请执行

1
pod setup

2. 在项目中可以使用该项目

1
pod 'MZInsetLabel', '~> 0.1.0'

然后在你的测试项目中,执行 pod install 即可。

可能遇到的麻烦

1. 执行 pod trunk push *.podspec 时, 好久没反应?

这种情况, 大多数都是因为你的网络不给力造成的, 如果你确定你的网络没问题, 那么请翻墙.

2. 执 行 pod trunk push *.podspec 时报错?

报错信息:

1
ERROR | [iOS] unknown: Encountered an unknown error (Simulator iPhone 4s is not available.) during validation.

这个错误是因为, 更新了 xcode8 之后不再支持 ios7 的缘故.

解决方案(我的), 升级 cocoapods.

1
sudo gem install -n /usr/local/bin cocoapods

3. pod trunk push 失败

失败提示信息类似:

1
2
3
4
5
Cloning into 'master'...
error: RPC failed; curl 56 SSLRead() return error -36
fatal: The remote end hung up unexpectedly
fatal: early EOF
fatal: index-pack failed

解决方案: 更新 gem

1
sudo gem update --system

Git 命令行操作

1. 向远程 Repository 添加 tag

1
2
3
git tag -m "注释" 0.0.1

git push --tags

执行后,可以看到 Github Repository 上会多一个对应的 tag 版本。

2.删除本地 Tag

1
git tag --delete [TagName]

如:

1
git tag --delete 0.0.1

3. 删除远程 Tag

1
git push --delete origin [TagName]

如:

1
git push --delete origin 0.0.1

在 Github 上面如果你不小心打错了 Release, 然后删除该 Release.
你会发现, tag 无法删除.使用上面方式妥妥的解决.

如果你删除 tag,想重新打一个相同的 tag,需要先删除本地的 tag,否则会失败。


扫码关注,你我就各多一个朋友~


本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。

veryitman