我有这个主要项目,将生成一个静态库(调用它 MySDK).我有一个组件(调用它 Analytics)作为私人cocoapod。

所以我最终得到了这样的文件结构:

+ MySDK
    - src
+ Pods
    + Pods
        - Analytics

每个项目都有自己的测试,但现在我需要做一些集成测试,所以在我的Podfile中我使用 link_with, ,但是每当我这样做时,我甚至无法运行原始测试,因为我得到了一堆 duplicate symbol 错误:

duplicate symbol _OBJC_METACLASS_$_PodsDummy_Pods in:
    /.../DerivedData/Build/Products/Release-iphonesimulator/libPods.a(Pods-dummy.o)
    /.../DerivedData/Build/Products/Release-iphonesimulator/libMySDK.a(Pods-dummy.o)
...
duplicate symbol _MYPREFIXFileTableIDColumnName in:
    /.../DerivedData/Build/Products/Release-iphonesimulator/libPods.a(MYPREFIXDatabaseConstants.o)
    /.../Build/Products/Release-iphonesimulator/libMySDK.a(MYPREFIXDatabaseConstants.o)

所有的错误都来自我的 Analytics 组件。所有导致问题的文件都有 C函数 (我正在直接处理sqlite)和/或(全局) 常量, ,或者他们是 类别:, ,但它们都是前缀。

我的 Podfile 看起来像这样:

platform :ios, '7.0'
link_with ['MySDK', 'MySDKTests']
pod 'Analytics', '0.0.1'

我的podscpec为 Analytics 看起来像这样:

Pod::Spec.new do |s|
  s.name     = 'Analytics'
  s.version  = '0.0.1'
  s.platform = :ios
  s.summary  = "Analytics utility"
  s.homepage = 'http://google.com'
  s.author   = { 'Me' => 'me@me.com' }
  s.source   = { :git => 'https://github.com/Company/Analytics.git', :tag => '0.0.1' }
  s.source_files = 'Analytics/**/*.{h,m}'
  s.requires_arc = true
  s.ios.deployment_target = '6.0'
end

我得到这些错误是有原因的吗?我应该将这些文件编译为非arc还是使用一些特殊的标志?

任何想法

有帮助吗?

解决方案

我终于得到了它的工作!

我不应该把我的豆荚和 MySDKTests, ,由于最终产品(MySDK, ,一个图书馆,已经连接起来了。 Analytics).

不过,我还是在我的 podspec 档案:

  s.public_header_files = 'Analytics/**/*.h'

  s.xcconfig = { 'HEADER_SEARCH_PATHS' => '"$(SRCROOT)/Pods/Headers/Analytics"' }

第二行是不是真的有必要,因为它不是修改我的 MySDKTests 目标。我必须补充一点 HEADER_SEARCH_PATHS 致我的 MyDSKTests 使这些标头可用于测试。

我读过有些人成功地使用 LIBRARY_SEARCH_PATHS 相反,但这对我不起作用。如果有人愿意解释为什么,那就太好了,但现在我将把我的解决方案留在这里给其他人,以防他们遇到类似的问题。

这另一个问题 有关资料

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top