【CocoaPods】细说 pod trunk

https://leodev.me

前几天手贱改了下 GitHub 用户名(LeoiOS -> iTofu),然后发现整个世界都崩溃了。。。

逗比的开始

如个人博客等各处 GitHub 链接慢慢找出来替换(直到现在我都不确定全部替换完了。。。),CocoaPods 上个人库源地址逐个更新。。。(此处略去一千字)

在更新 CocoaPods 库源地址的时候还发现一个悲催的问题,我修改完 GitHub 用户名后再去更新库,不让我更了。。。

1
[!] You are not allowed to push new versions for this pod.

我勒个去,这。。。这是要挨骂的节奏?亲爱的用户们轻拍。。。第一反应是去啃 CocoaPods 文档,想了想,啃啥文档,直接去提了个 Issue。。。所幸作为开源社区的一份子,CocoaPods 的开发者们尤其友好,主要开发者之一 segiddins 很快也很热心地帮我解决了这个问题。

原来如此

segiddins 的解释下弄清楚了,其实这个问题并非因为我更换 GitHub 用户名产生(P关系都木),而是我更换了邮箱地址,导致 CocoaPods 认为我是另一名用户,进而中断了我的更新请求。

我是这样解决的

解决方案也不复杂,流程如下:

  • 用原邮箱登录(确认库拥有者身份)
  • 添加新邮箱到目标库的拥有者列表
  • 用新邮箱登录
  • (可选)从目标库的拥有者列表移除老邮箱

命令是这样的:

1
2
3
4
5
pod trunk register [OLD EMAIL] [USERNAME]
pod trunk add-owner [POD REP NAME] [NEW EMAIL]

pod trunk register [NEW EMAIL] [USERNAME]
pod trunk remove-owner [POD REP NAME] [OLD EMAIL]

参考:CocoaPods API

哦了,解决了~ 再次向友好的 segiddins 致谢~

加点料,细说 Pod trunk

安利一下可能是你用 CocoaPods 时打交道最多的 pod trunk ,其实呢,这些命令在 CocoaPods API 上都能找得到,只不过老外的思维和我们略有不同,你可能不知道这个命令原来是干这个的罢了。好比上面这个问题,老外提供的这几个步骤(德国人吧这么认真。。。),如果是国人写的话可能直接一个 pod trunk change owner A to B 命令就完了。。。

pod trunk register [EMAIL] [USERNAME]

注册&登录。

在你的 Mac 上只需要运行一次,然后去邮箱中点击确认邮件的链接即可,当然你也可以使用该命令在不同的账号中来回切换。
示例:

1
pod trunk register devtip@163.com `Leo`

pod trunk push [PATH]

发布库。

我一般在本地操作,PATH 一般就是 PodRepName.podspec。不过官网文档上说 PATH 缺省是当前目录,所以 cd 到库的本地目录,然后直接 pod trunk push 应该也是可以滴!
示例:

1
2
3
pod trunk push LCActionSheet.podspec
...
Done!

pod trunk me

查看自己的账号信息,以及账号拥有的仓库。

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
bogon:hexo Leo$ pod trunk me
- Name: Leo
- Email: devtip@163.com
- Since: April 1st, 05:09
- Pods:
- LCActionSheet
- LCNewFeature
- LCProgressHUD
- LCDownloadManager
- LCLoadingHUD
- LCCoolHUD
- LCNavigationController
- LCBannerView
- LCTabBarController
- LCTabBarControllerForLM
- Sessions:
- April 1st, 05:09 - August 7th, xx:22. IP: xxx.xxx.xx.xxx
- April 4th, 20:44 - August 10th, xx:58. IP: xxx.xxx.xx.xxx
- April 4th, 21:37 - August 12th, xx:33. IP: xxx.xxx.xx.xxx

pod trunk info [POD REP NAME]

查看某个库的信息,包括拥有者、各版本版本号及发布时间。

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
bogon:hexo Leo$ pod trunk info LCActionSheet

LCActionSheet
- Versions:
- 1.0.1 (2015-11-09 05:43:23 UTC)
- 1.0.2 (2015-11-09 06:08:47 UTC)
- 1.0.5 (2015-11-09 08:14:53 UTC)
- 1.0.6 (2015-11-09 08:28:27 UTC)
- 1.1.0 (2015-12-07 04:49:24 UTC)
- 1.1.1 (2015-12-09 11:12:05 UTC)
- 1.1.3 (2015-12-16 10:18:15 UTC)
- 1.1.5 (2016-02-17 10:59:12 UTC)
- 1.2.0 (2016-03-07 02:23:21 UTC)
- 1.2.1 (2016-03-15 11:01:57 UTC)
- 1.2.2 (2016-04-05 03:03:16 UTC)
- 1.2.3 (2016-04-05 04:22:12 UTC)
- Owners:
- Leo <devtip@163.com>

pod trunk add-owner [POD REP NAME] [OWNER-EMAIL]

pod trunk remove-owner [POD REP NAME] [OWNER-EMAIL]

添加/移除某个库的拥有者,上文有提到该命令。

你必须先运行过 pod trunk register 登录过,并且操作的是你账号拥有的库。


pod trunk deprecate [POD REP NAME]

不赞成使用,让某个库过期的意思。

如果导入声明 deprecate 的库,应该会收到警告。
该命令貌似是 CocoaPods V 1.0.0 推出来的,由于目前 V 1.0.0 是 beta 版,我使用的正式版是 V 0.39.0,所以暂时无法演示该命令。


pod trunk delete [POD REP NAME] [VERSION]

删除某个库的某个版本,该行为不可回退。

⚠️ 官方文档也明确表示 不赞成 使用该命令,建议使用 pod trunk deprecate 代替,以防止导入该库的用户项目无法运行,请注意这是一种及其不友好且让人恼火的行为!
该命令暂无示例,原因同上条。

题外话

顺带吐槽下国内社区对 CocoaPods 等开源项目的关注度,比如 CocoaPods,用国内的搜索引擎某度搜到的百分之九十九都是安装教程,更新教程,我靠。。。面包有了我们能不能考虑考虑黄油?

再提下,好像 GitHub Pages 的 帮助页 被墙了?貌似是这几天某站在亚太放了台服务器,然后某墙新增屏蔽时的误操作?各位珍重。。。

联系与捐赠

  • Mail:echo bGVvZGF4aWFAZ21haWwuY29tCg== | base64 -D
  • GitHub:iTofu