我正在将我们在内部使用的静态库转换为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依赖的机制有什么区别?我为什么要使用其中一个或不同时使用?
答案 0 :(得分:0)
第一个场景用于表示你的库有一个运行时(也是编译时,因为在cocoapods中基本上所有运行时都是编译时)依赖于HockeySDK。
第二个场景说你的目标依赖于HockeySDK来建立。
差异非常微妙,但如果您不是静态链接则更明显。由于您静态链接,编译时和运行时依赖性是相同的(意味着第二种情况与第一种情况相同)。
如果您是动态链接到HockeySDK,那么主机应用程序需要知道这一点,以便它可以在链接库时提供依赖库。这样做的方法是通过podspec传播依赖项。
在podfile中,你声明1.一个目标,以及2.你需要目标文件以及HockeySDK的头文件来编译目标。这只会影响您自己的图书馆的建设。使用您的库的人使用规范而不是Podfile。