我的问题是,我不知道在我的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'
的原因吗?(我只知道它用于解决库中的重复符号)
答案 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)
这里的关键字是:
如果未指定明确的目标 ...
target:
和link_with
是互斥的:使用一个或另一个。
link_with
作为快捷方式。target:
为每个目标指定各个Pod依赖项。 注意:当定义了1个或多个link_with
时, target:
关键字忽略; target:
优先。使用cocoapods构建静态库
这是一种防止Pod被包含在静态库中的解决方法,因此所述Pod不属于所述Lib。通过向主静态库项目添加名为“Dummy”的实际目标,并指定您的Pod应该与“Dummy”链接,您欺骗Cocoapods获取所需的Pod,但不将它们包含在静态库中。相关文章:Building a static library with cocoapods。