Podfile中link_with的真正含义是什么?

时间:2015-07-01 06:21:09

标签: ios xcode cocoapods

我的问题是,我不知道在我的Podfile中使用link_with后发生了什么,所以我不知道何时何地使用它。我已阅读guide但是描述是为了简要了解link_with的含义。

在我的测试之后,我知道如果我在我的Podfile中使用link_with而没有target,默认的Pods库 libPods.a 将链接到由link_with。但如果Podfile中有target,则link_with似乎不再使用。

除此之外,官方指南中没有提到在哪里写link_with,所以当我在link_with 'Dummy'区块中看到target时,我感到非常困惑。

有人可以解释link_with的编写时间和地点以及使用link_with 'Dummy'的原因吗?(我只知道它用于解决库中的重复符号)

2 个答案:

答案 0 :(得分:7)

正如document所说,与一个目标项目一起使用没有意义:

  

如果未指定显式目标,则Pods目标将是   与项目中的第一个目标相关联。所以,如果你只有一个   目标您无需指定要链接的目标。

例如,我有多目标应用程序,这里是我的Podfile的前几行:

platform :ios, '9.3'

workspace 'MyApplication'
link_with 'target1', 'target2', 'target3', 'target4'

pod 'AFNetworking', '~> 2.5.4'
pod 'Reachability'
pod 'SDWebImage', '~> 3.7.2'
pod 'CocoaLumberjack'

在这里使用有意义,因为如果不使用“target2,target3和target4”,则在构建时会出错。这就是为什么我们使用它。

或者,您可以为每个目标指定pod,并为常见的pod添加共享pod,如下所示:

platform :ios, '9.3'

workspace 'MyApplication'

def shared_pods
    pod 'AFNetworking', '~> 2.5.4'
    pod 'SDWebImage', '~> 3.7.2'
    pod 'CocoaLumberjack', '~> 2.0.0'
end

target :target1, :exclusive => true do
  shared_pods
end 

target :target2, :exclusive => true do
  shared_pods
  pod 'Mantle'
end

target :target3, :exclusive => true do
  shared_pods
  pod 'MBProgressHUD', '~> 0.9.1'
end 

target :target4, :exclusive => true do
  shared_pods
end 

现在一切都很清楚@Yujie Ren?

另外,请检查here是否有:exclusive => true do含义。

答案 1 :(得分:2)

问题1:link_with与目标:

这里的关键字是:

  

如果未指定明确的目标 ...

target:link_with是互斥的:使用一个另一个。

  • 如果您的目标所有使用相同的Pod依赖项,请使用link_with作为快捷方式。
  • 使用target:为每个目标指定各个Pod依赖项。 注意:当定义了1个或多个link_with时, target:关键字忽略; target:优先。

问题2:link_with'Dummy'

  

使用cocoapods构建静态库

这是一种防止Pod被包含在静态库中的解决方法,因此所述Pod不属于所述Lib。通过向主静态库项目添加名为“Dummy”的实际目标,并指定您的Pod应该与“Dummy”链接,您欺骗Cocoapods获取所需的Pod,但不将它们包含在静态库中。相关文章:Building a static library with cocoapods