具有cocoapod依赖性的静态库:在Podspec s.dependency,Podfile或两者中定义?

时间:2015-06-03 20:02:32

标签: ios static-libraries cocoapods

我正在将我们在内部使用的静态库转换为CocoaPod,以便我们的宿主应用程序可以通过在其Podfiles中引用它来简单地将其拉入。这个静态库依赖于名为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依赖的机制有什么区别?我为什么要使用其中一个或不同时使用?

1 个答案:

答案 0 :(得分:0)

第一个场景用于表示你的库有一个运行时(也是编译时,因为在cocoapods中基本上所有运行时都是编译时)依赖于HockeySDK。

第二个场景说你的目标依赖于HockeySDK来建立。

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

如果您是动态链接到HockeySDK,那么主机应用程序需要知道这一点,以便它可以在链接库时提供依赖库。这样做的方法是通过podspec传播依赖项。

在podfile中,你声明1.一个目标,以及2.你需要目标文件以及HockeySDK的头文件来编译目标。这只会影响您自己的图书馆的建设。使用您的库的人使用规范而不是Podfile。