【问题标题】:How to mark an imported Cocoapod framework deprecated如何标记已弃用的导入的 Cocoapod 框架
【发布时间】:2021-12-03 14:50:32
【问题描述】:

在我们的一个框架中,我们使用了 SwiftObserver pod。我们的框架用于我们应用的其他几个框架中。

在将开发目标提升到 iOS 13.0 后,我想将所有使用 SwiftObserver 方法的方法标记为已弃用,以逐步更改我们的代码库以使用 Combine 的观察器。

我正在考虑从现在开始分叉 SwiftObserver 或链接 pod 的本地副本。但是,应用程序中仍然使用 SwiftObserver 的部分应该能够使用 pod update 继续更新它,只要不是所有代码都已更改为使用 Combine。

是否有更简单的方法(可能在 podfile 中,或者通过某种覆盖)来标记该 pod 的使用已弃用,而不会破坏其任何功能?

如果您还有其他问题或我可以提供任何代码示例,请告诉我。

【问题讨论】:

  • 没有不推荐使用的库。库的一部分可以标记为已弃用,但考虑到库中的代码会随着时间的推移而发展,将整个库标记为已弃用几乎没有意义。

标签: ios swift frameworks cocoapods deprecated


【解决方案1】:

@SoumyaMahunt 提出的使用 swiftlint 的替代方法是设置您自己的私人仓库。

您可以通过以下方式实现您想要的目标:

  1. 创建一个私有规范存储库以用于解决 CocoaPod 依赖项。
  2. SwiftObserver 创建一个 podspec 并将其设置为已弃用 -> s.deprecated = true
  3. source 'https://github.com/CocoaPods/Specs.git' 上方添加私有规范存储库,这对于强制 CocoaPods 在搜索全局默认存储库之前针对您的私有存储库进行解析非常重要。

优点

  • 您可以将此私有规范存储库用于其他私有 pod
  • 您可以弃用其他 pod,而无需在您的项目中破解

缺点

  • 手动确保第三方 pod 更新到最新版本可能很麻烦(您必须手动为更新版本添加新的 podspec)。
有用的链接:

https://guides.cocoapods.org/making/private-cocoapods.html

https://guides.cocoapods.org/syntax/podspec.html#deprecated

【讨论】:

  • 感谢您的解决方案,但是在将新的私有 pod 标记为已弃用时,仅pod update 会发出弃用警告。有没有办法将该 pod 中的方法的任何使用标记为已弃用?不单独标记方法?
  • 您是否尝试在尚未创建 Podfile.lock 的新 CocoaPod 配置上运行 pod install
  • 是的,我运行了pod deintegratepod cleanpod cache clean --allpod install,并在构建之前清理了构建文件夹。我仍然没有在 Xcode 中收到任何弃用警告。也许我在某处缺少设置?
  • 确保在尝试在pod deintegrate 之后运行pod install 之前也删除Podfile.lock
  • 是的,我这样做了,pod clean 也在这样做。好像我错过了其他一些阻止 Xcode 显示这些警告的设置。我会尝试更多。
【解决方案2】:

如果您使用swiftlint,您可以添加自定义规则以产生警告,并显示一条指示弃用的消息。您还可以调整这些警告的严重性以导致编译错误。

要使用 SwiftObserver pod 生成警告,请在 swift lint config file (.swiftlint.yml) 中创建以下自定义规则:

custom_rules:
  pod_deprecation:
    name: "Deprecated POD use"
    regex: "(SwiftObserver)"
    match_kinds:
      - identifier
    message: "Use of deprecated pods"

此规则将导致警告,并在 message 参数中为所有导入 SwiftObserver 的文件提供消息:

【讨论】:

  • 感谢您的回答!您能否通过代码示例更新您的答案,说明如何为 pod 实现该自定义规则?
  • @MarcoBoerner 添加了您需要添加到 swift 配置文件的示例配置,项目页面中描述了更多高级选项。希望这会有所帮助。
  • 感谢代码更新。它非常适合将导入标记为已弃用。我仍然使用 Laffens 解决方案进行了一些更改,以标记每个使用过的类都已弃用。这些都不是理想的,我更喜欢更流畅的解决方案。但再次感谢您的努力! :)
猜你喜欢
  • 2018-08-07
  • 2016-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多