我有这个主项目,它将生成一个静态库(称之为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'
Analytics
的我的podscpec如下所示:
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
我有没有理由收到这些错误?我应该将这些文件编译为非弧形还是使用一些特殊的标志?
任何想法
答案 0 :(得分:2)
我终于开始工作了!
我不应该将我的广告连接到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
,但这对我不起作用。如果有人想解释原因,那就太棒了,但是现在我会把这个解决方案留给其他人,以防他们遇到类似的问题。
有关相关信息,请参阅this other question