Cocoapods:将 pod 链接到多个目标问题

Posted

技术标签:

【中文标题】Cocoapods:将 pod 链接到多个目标问题【英文标题】:Cocoapods: Linking pod to multiple targets issue 【发布时间】:2013-06-21 19:52:34 【问题描述】:

我正在尝试将 Cocoapods 生成的静态库链接到我工作区中的多个目标。当我这样做时,在构建时的链接阶段会出现重复符号错误。这是有道理的,因为我将库链接了两次。

我该如何解决这个问题?我是否应该只链接到主目标并在共享目标中包含指向 Pod 的标头路径?我将如何在 Cocoapods 中做到这一点?我可以手动设置 Pod 的标头路径,但似乎无法使用pod install

以下是我的工作空间设置。它由一个主项目和多个静态库组成,作为它们自己的共享代码的 xcode 项目。我将两个静态库项目的产品链接到主目标,它们自动成为主目标的依赖项。

shared1.xcodeproj -> target shared1
shared2.xcodeproj -> target shared2 
main.xcodeproj -> target main

这是我的 Podfile:

workspace 'Main.xcworkspace'
xcodeproj 'Main.xcodeproj'
xcodeproj 'Shared1.xcodeproj'
platform :ios

target :ThirdParty, :exclusive => true do
    link_with ['main', 'shared1']

    pod 'MKNetworkKit'
    pod 'SBJSON'
    ...
end

【问题讨论】:

我现在使用的解决方案是仅链接到主目标并手动编辑共享目标构建设置以将递归标头搜索路径添加到 Pods BuildHeaders 目录。 这仍然是您想出的最佳解决方案吗? 这是我想出的解决方案。它基本上与你的相反,需要更少的工作:***.com/a/17869668/106703 我不喜欢每次运行 pod install 都必须更新构建阶段设置的想法,尤其是在源代码控制的环境中。不过还是谢谢你的建议!! 我支持你,但在 Cocoapods 解决问题之前,这是我能找到的最佳解决方案。 【参考方案1】:

您是否尝试在 podfile 中添加此内容:

link_with 'Target1', 'Target2'

我的这种方法有 5 个不同的目标,而且看起来效果很好。

【讨论】:

它有效,但是如何仅指定我在 Target2 中需要的 pod,因为我不需要 Target1 可用的所有 pod?【参考方案2】:

我刚刚经历了这种可怕的情况并修复了它 - 我现在有一个工作区,它将通过命令行或 xcode 构建,它有 4 个具有不同捆绑 ID 的不同目标。上述方法的问题在于,您最终会疯狂地链接,因为每个目标都会构建 pod。我所做的是:

    创建项目并配置一个目标和 pod。 使用此链接复制目标 3 次并更改捆绑 ID 等:http://swwritings.com/post/2013-05-20-concurrent-debug-beta-app-store-builds 为每个目标创建工作区级别方案。 为您的 pod 构建创建工作区级别方案。 编辑您的方案并关闭“查找隐式依赖项”。 使您的方案依赖于您的 pod 方案(编辑方案中的构建选项卡)。

我的 podfile 看起来像这样 - 和开始时一样:

target 'test-target' do
    pod 'HockeySDK'
    pod 'RestKit', '~> 0.23.1'
    pod 'RKXMLReaderSerialization', :git => 'https://github.com/RestKit/RKXMLReaderSerialization.git', :branch => 'master'
    pod 'NSLogger'
    pod 'Parse-iOS-SDK'
end

我在构建时确实遇到了很多问题,它一直告诉我它无法链接到我通过将构建设置中的“库搜索路径”更改为:

$(PROJECT_DIR)/Build/Products/$(CONFIGURATION)-$(PLATFORM_NAME)

使用 /Build/Products 有点奇怪,但这似乎是 Pods 开箱即用的功能,如果你反对它,事情就会变得丑陋。

很难写出详细的操作指南,因为我花了 5 天的时间进行实验,才能让神奇的构建在 Xcode、xcodebuild 和我们的 Teamcity CI 服务器中运行。

最后一个问题 - 构建并行化的转变!!! (edit/schemes/build) ... 或者您的 pod 会及时让应用程序构建看到它们

【讨论】:

【参考方案3】:

我遇到过这个。我修复它的方法是删除主项目的依赖项。由于主项目与共享项目链接,它会自动访问依赖项。

workspace 'Main.xcworkspace'
xcodeproj 'Main.xcodeproj'
xcodeproj 'Shared1.xcodeproj'
platform :ios

target :ThirdParty, :exclusive => true do
    link_with ['shared1']

    pod 'MKNetworkKit'
    pod 'SBJSON'
    ...
end

【讨论】:

以上是关于Cocoapods:将 pod 链接到多个目标问题的主要内容,如果未能解决你的问题,请参考以下文章

奇怪的 cocoapods 问题为每个 pod 安装目标

使用 CocoaPods 有啥好处?

Cocoapods:无法设置 pod 构建设置

为 CocoaPods 的 pod 设置部署目标

Cocoapods pod 创建目标并在使用时更改 Xcode 中的目标

Firebase CocoaPods 出现重复符号链接器错误