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

时间:2013-06-21 19:52:34

标签: ios xcode cocoapods

我正在尝试将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

3 个答案:

答案 0 :(得分:4)

您是否尝试在podfile中添加:

link_with 'Target1', 'Target2'

我这样有5个不同的目标,它看起来效果很好。

答案 1 :(得分:1)

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

  1. 创建一个目标并配置了pod的项目。
  2. 使用此链接复制目标3次并更改套件ID等:http://swwritings.com/post/2013-05-20-concurrent-debug-beta-app-store-builds
  3. 为每个目标创建工作区级别方案。
  4. 为您的pod构建创建工作区级别方案。
  5. 修改您的计划并关闭“查找隐式依赖关系”#。
  6. 使您的方案取决于您的pod方案(编辑方案中的构建选项卡)。
  7. 我的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服务器上运行神奇版本。

    最后一个问题 - 构建平行转向! (编辑/ schemes / build)...或者您的pod将及时为应用程序构建看到它们

答案 2 :(得分:0)

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

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

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

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