15

我有一个 cocoapod 项目(我们称之为“Main”),它与另一个 cocoapod 有依赖关系(我们称之为“Util”)。

我可以通过“pod 'Util'”在 Main 的 Podfile 中添加 Util,并通过“s.dependency 'Util'”将其指定为 podspec 中的依赖项

只要至少编写了其中一个,我的 pod 测试项目就可以正常运行(尽管 podspec 中没有依赖项,但运行“pod lib lint”命令会返回错误)

在 Podfile 中指定 pod 可以让我更详细地了解我希望版本的精确度,甚至允许我使用 :head 作为目标。然而,依赖似乎更加有限,需要标签。

我想知道这两种方法之间的区别,以及当一个 Pod 依赖于另一个 Pod 时是否有好的做法可以使用(特别是因为我最终想将 Main 用作其他项目的 Pod)

4

2 回答 2

1

你可以说 Podfile 是你的项目配置,而 Podspec 是你的配置。

播客文件:

  • 存在于根目录中,作为文件调用Podfile
  • 所有想要使用 Cocoapods 的应用程序(例如通过添加依赖项pod 'library_name')都需要有一个 Podfile。这就是信息的去向。

Podspec(Pod 库规范):

  • 存在于根目录中,作为名为 的文件Library_name.podspec,使用 Ruby DSL 语法格式化
  • 将您的库上传到 Cocoapods.org(或通过 使用它)需要此文件pod 'library_name'。当您 时pod trunk push,您正在推送此文件的 JSON 版本,LibName.podpsec.json例如,here
  • Libraries/packages 还可以在 Podspec 之上指定一个Podfile,用于在下游用户使用该库时开发人员不希望访问的特定代码。
  • 它有版本限制,因为要决定选择使用库的应用程序(Podfile)的版本

差异:

就您而言,您只有不与任何人共享的代码。因此,它不需要是库,您可以将 Podfile 中的所有内容作为单独的目标,甚至不需要 Podspec。如果你想通过 Cocoapods 与其他人共享库,那么你需要 Podspec 文件。但是,如果您想在不同的项目中重复使用 main,那么您想要与这些项目共享的配置应该在.podspec文件中,并且您可以在其他 repos 中引用包含 podspec 的本地目录。

文档中有关 Podspec 的更多信息。

规范描述了 Pod的一个版本。它包括有关应从何处获取源、要使用的文件、要应用的构建设置以及其他一般元数据(例如其名称、版本和描述)的详细信息。

给未来读者的注意事项

我建议你通过 Swift 包管理器而不是 Cocoapods 或 Carthage 发布你的包/库。Cocoapods 的所有好处都可以通过 SPM 实现。用户可以轻松迁移到在其 Xcode 项目中使用 Swift 包,因为它是内置的,因此无需支持其他包管理器。

于 2021-05-27T19:25:19.257 回答
-1

如果我理解正确,你需要两者。

您将Util放在MainPodfile中,以便它可以使用它并进行编译。

您将Util放在Main.podspec中,这样任何安装Main的人都会自动获得UtilMain

此外,这篇文章可能对您有用,因为它展示了如何通过subspec.

您可以制作包含不同依赖项的多个版本的 pod。例如从文章中,以下内容.podspec

...
spec.default_subspec = 'Lite'

spec.subspec 'Lite' do |lite|
    # subspec for users who don't want the third party PayPal 
    # & Stripe bloat
end

spec.subspec 'PayPal' do |paypal|
    paypal.xcconfig =  
        { 'OTHER_CFLAGS' => '$(inherited) -DKITE_OFFER_PAYPAL' }
    paypal.dependency   'PayPal-iOS-SDK', '~> 2.4.2'
end

spec.subspec 'ApplePay' do |apple|
    apple.xcconfig =   
        { 'OTHER_CFLAGS' => '$(inherited) -DKITE_OFFER_APPLE_PAY' }
    apple.dependency      'Stripe', '2.2.0'
    apple.dependency      'Stripe/ApplePay'
end

允许以下 3 个 pod:

pod "Kite-Print-SDK", "~> 1.0"
pod "Kite-Print-SDK/PayPal", "~> 1.0"
pod "Kite-Print-SDK/ApplePay", "~> 1.0"
于 2016-01-18T01:17:21.070 回答