ios - 具有 cocoapod 依赖项 : define in Podspec s. 依赖项的静态库,在 Podfile 中,还是两者都有?

标签 ios static-libraries cocoapods

我正在将我们内部使用的静态库转换为 CocoaPod,以便我们的主机应用程序可以通过在其 Podfile 中引用它来简单地将其引入。这个静态库又依赖于名为 HockeySDK 的第三方 Pod。

在我的静态库的 Podspec 中,我指出 HockeySDK 依赖如下:

 # MyStaticLib requires the latest HockeySDK framework:
 s.dependency "HockeySDK", "3.6.4"

我还在我的静态库根目录中的 Podfile 中指出了依赖关系:

target "MyStaticLib" do
   pod "HockeySDK", "3.6.4"

这似乎工作正常 - 如果我在 MyApp 的 Podfile 中引用 MyStaticLib,它会引入 MyStaticLib 并神奇地引入 HockeySDK 依赖项,一切都很好。

这两个看似冗余的指示 HockeySDK 依赖性的机制有什么区别?为什么我要使用一个或不使用另一个或两者?

最佳答案

第一个场景用于指示您的库具有对 HockeySDK 的运行时(以及编译时,因为在 cocoapods 中基本上所有运行时的东西也是编译时)依赖。

第二种情况表示您的目标依赖于 HockeySDK 才能构建。

差异非常细微,但如果您不是静态链接,则差异会更加明显。由于您是静态链接,因此编译时和运行时依赖性是一回事(意味着第二种情况与第一种情况相同)。

如果您针对 HockeySDK 进行动态链接,则需要让主机应用程序知道这一点,以便它可以在链接您的库时提供依赖库。这样做的方法是通过 podspec 传播依赖关系。

在 podfile 中,您声明 1. 目标以及 2. 您需要目标文件以及来自 HockeySDK 的 header 才能编译目标。这只会影响您自己的库的构建。使用您的库的人使用规范而不是 Podfile。

关于ios - 具有 cocoapod 依赖项 : define in Podspec s. 依赖项的静态库,在 Podfile 中,还是两者都有?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30629587/

相关文章:

ios - 如何在 Swift 3 中将 NSData 转换为数据?

ios - Google 登录 CocoaPods 已弃用

iphone - "invitation only"是否意味着测试版?

linker - 静态链接lua的问题

swift - 无法构建 objective-c 模块 'FBSDKCoreKit'

ios - webViewDidFinishLoad 阻塞主线程

c++ - 静态和动态链接库

c++ - 找不到 -ljson11 的库,但找到 -lsqlite 3

ios - Flutter -ios - pod install gRPC-C++ sed ssl 问题

ios - Cocoapods 无法解析开发 pod 的依赖关系