【问题标题】:How to publish new official pod version?如何发布新的官方 pod 版本?
【发布时间】:2017-05-12 16:45:43
【问题描述】:

更新 pod 版本失败

我使用的是 Xcode 8.2.1 和 CocoaPods v1.1.1,我的代码是 Swift 3

我的问题是发布我的 pod 的新版本或更新现有版本,这在 pod spec lint 上失败了。

我创建了一个PlaybuzzSDK pod,我想更新它的代码。 我通过 GitHub 客户端提交并推送新代码,但更改并未反映在 pod 类上,仅反映在 Example 项目上。

我做了什么?

我创建了新标签并尝试推送它,但没有通过验证:

git tag 0.1.1 (successful)
git push origin 0.1.1 (successful)
pod spec lint PlaybuzzSDK.podspec (unsuccessful with error below)
pod trunk push PlaybuzzSDK.podspec  (unsuccessful with error below) 

-> PlaybuzzSDK (0.1.1) - 错误 | [iOS]未知:遇到未知错误([!] /usr/bin/git clone https://github.com/LudaFuxPlaybuzz/playbuzz-ios-sdk.git /var/folders/h0/knhpn8z16n3cz6tkny5rmtn00000gn/T/d20161228-47834-nli8c4 --template= --single-branch --深度 1 --branch v0.1.1

正在克隆到 '/var/folders/h0/knhpn8z16n3cz6tkny5rmtn00000gn/T/d20161228-47834-nli8c4'... 警告:找不到要克隆的远程分支 v0.1.0。致命:验证期间在上游源中找不到远程分支 v0.1.0。

[!] 由于 1 个错误,规范未通过验证。 [!] Swift 项目的验证器默认使用 Swift 3.0,如果您使用不同版本的 swift,您可以使用 .swift-version 文件为您的 Pod 设置版本。例如要使用 Swift 2.3,请运行:echo "2.3" > .swift-version。

我尝试过的其他事情:

  • 我从我的组合中删除了该项目并再次克隆它
  • 我已经清理了 CocoaPods 的缓存 rm -rf ~/Library/Caches/Cocoapods rm -rf ~/.cocoapods/repos
  • 我尝试创建一个新分支并尝试对分支进行 pod lint。

但我每次都会收到此错误。

我预期会发生什么

我希望从现在开始,如果有人添加

pod 'PlaybuzzSDK' 

并将更新他们的 pod,他们将获得新版本

新版本意味着 reloadItem 将具有以下签名:

public func reloadItem(_ itemAlias:String,
                         companyDomain: String,
                         showItemInfo:Bool)

发生了什么事

我无法通过 pod lint。 当我从示例项目更新 pod 时,函数 reloadItem 会返回到

public func reloadItem(_ userID: String,
                    itemAlias:String,
                    showRecommendations: Bool,
                    showShareButton: Bool,
                    showFacebookComments: Bool,
                    showItemInfo: Bool,
                    companyDomain: String)

演示问题的项目

https://github.com/LudaFuxPlaybuzz/playbuzz-ios-sdk

【问题讨论】:

  • 您应该更新您的版本并将源指向正确的 git 并使用正确的标签,也许是版本和标签 0.1.3?另外,在尝试推送之前先做一个pod spec lint
  • 我希望更新在主服务器上。不是新的分支和标签..
  • pod 将使用标签来更新其代码,而不是分支,它显示在您的 podspec 中,您将其指向带有标签 0.1.0 的 git
  • 那我到底应该怎么做呢?
  • 按照更新教程做上面我说的,把podspec里的东西指向正确的tag,pod按tag管理,只有安装的时候才能使用分支

标签: ios cocoapods podspec


【解决方案1】:

总结,更新一个 pod:

  1. 提前更新podspec中的版本和标签
  2. 提交,推送代码到 git
  3. 使用当前代码创建新标签,确保它与podspec中的标签相同

    git tag 0.1.1

    git push origin 0.1.1

  4. 致电pod spec lint 进行检查,并致电pod trunk push 将其更新到回购主列表中

    pod lib lint YourSDK.podspec

    pod trunk push YourSDK.podspec

您的 podfile 似乎使用标签 v0.1.1,但是您的存储库中的标签是 0.1.1,没有 v。这也会导致 linting 失败。

【讨论】:

  • pod push trunk 应该是 pod trunk push
  • 我使用的是私有源 pod repo,所以情况可能会有所不同。但是我用pod repo push myprivatesourcepodrepo YourSDK.podspec 代替了pod trunk push YourSDK.podspec
  • 另外,您似乎建议使用pod spec lint,但在示例中使用pod lib lint。这是故意的吗?两者似乎有不同的用例。
  • pod lib lint 可以帮助您在推送之前找出本地规范文件的问题,确保它可以正常工作后,您可以推送并使用pod spec lint 检查您的 pod 是否可以克隆和工作git, pod trunk push 也做 spec lint 所以这里不需要,你可以选择使用
  • 感谢您的澄清,但您确定不是相反吗? pod spec lint 听起来会检查 podspec,pod lib lint 会检查 lib...
【解决方案2】:

您需要将一个名为 .swift-version 的文件添加到存储库的顶层,以便在安装 pod 时正确配置您的用户项目。

在项目的顶层,运行以下命令:

echo "3.0" > .swift-version

然后提交并将您的标签更新为该提交。

您的 podfile 似乎也在使用标签 v0.1.1,但是您的存储库中的标签是 0.1.1,没有 v。这也会导致 linting 失败。

【讨论】:

  • Dave,使用 pod 1.4 我们不再需要创建 .swift-version 文件。在这个版本中,我们可以声明类似:s.swift_version = "3.0"