Cocoapods:重复的接口定义

时间:2015-02-26 15:17:41

标签: ios xcode swift xcode6 cocoapods

我'将我的私人图书馆包裹成cocoapods。它依赖于ReactiveCocoa。

s.name =  'MineLibrary'
s.dependency 'ReactiveCocoa/Core'
s.source_files = 'Source/*.{h,m,swift}'
....

某些头文件包含:

#import <ReactiveCocoa/RACSignal.h>

我将它包含在一个新项目中:

use_frameworks!
....
pod 'ReactiveCocoa'
pod 'MineLibrary', :git => 'git@.....'

但是当我编译项目时我得到了一个错误:

duplicate interface definition for class 'RACStream'
duplicate interface definition for class 'RACSignal'


/Users/USER/Library/Developer/Xcode/DerivedData/Project-emcwpmbbuimotuftzijeemvngrvj/Build/Products/Debug-iphoneos/Pods/ReactiveCocoa.framework/Headers/RACStream.h:27:1: error: duplicate interface definition for class 'RACStream'

@interface RACStream : NSObject
^
/Users/USER/Workspace/Project/Pods/ReactiveCocoa/ReactiveCocoa/RACStream.h:27:12: note: previous definition is here
@interface RACStream : NSObject

如何解决?
附:我使用的是cocoapods 0.36.0.rc.1

3 个答案:

答案 0 :(得分:23)

我有一段时间没遇到这个问题,有人错误地导入了cocoapod标头。确保使用括号表示法E.G。而不是: #import "theUsefulClass.h" 你应该使用: #import <thePod/theUsefulClass.h>

答案 1 :(得分:1)

您是否尝试过更新到最新版本的CocoaPods?我注意到你提到你正在使用一个过时的候选版本,这可能是错误的。

一般来说,这是您在应用中创建和使用CocoaPod时需要做的事情:

1)在CocoaPod中,使用s.dependency为每个

声明pod规范中的所有依赖项

2)在您的应用中,使用CocoaPods来管理您的所有应用依赖项。也就是说,手动将库拖放到您的应用中。如果这样做,您可能会冒险使用拖放包含的类创建重复的类。

3)在你的app和CocoaPod中,尽可能依赖于灵活的版本。通常,您至少应该允许进行次要版本更新,例如pod 'PodName', '~> 1.0.0'

4)在您应用的pod文件中,为您的应用和单元测试目标指定目标,例如

target "MyApp" do
  # App pods...
end

target "MyAppTests", :exclusive => true do
  # Test pods...
end

如果您有两个以上的目标,请为每个目标指定一个目标。或者,至少为单元测试指定一个不同的目标,这将使应用程序注入其中。

答案 2 :(得分:0)

在Xcode中,您可以检查Symbol Navigator(Cmd-3)以查看两次定义符号的位置。这将使您可以决定要做什么。就我而言,我从两个不同的库中发现了两个具有相同名称的符号。也许其中之一可以在符号名称上添加前缀以消除冲突。