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 => '[email protected]'

Но когда я скомпилирую проект, я получаю сообщение об ошибке:

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

Ответ 1

Вы пробовали обновление до последней версии CocoaPods? Я заметил, что вы упомянули, что используете устаревший кандидат на выпуск, который, возможно, виноват здесь.

В общем, вот что вам нужно делать при создании и использовании CocoaPod в вашем приложении:

1) В CocoaPod объявите все ваши зависимости в спецификации pod, используя s.dependency для каждого

2) В вашем приложении используйте CocoaPods для управления всеми зависимостями вашего приложения. То есть, не вручную перетаскивайте библиотеки в ваше приложение. Если вы это сделаете, вы рискуете создать дубликаты классов с теми, которые вы перетаскиваете и включаете.

3) Как в вашем приложении, так и в CocoaPod, зависит от вас как гибких версий. В общем, вы должны, по крайней мере, разрешить небольшие обновления версий, например. pod 'PodName', '~> 1.0.0'.

4) В вашем файле pod app укажите цель для вашего приложения и вашего целевого объекта unit test, например.

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

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

Если у вас более двух целей, укажите цель для каждого. Или, по крайней мере, укажите другую цель для модульных тестов, в результате чего приложение будет введено в нее.

Ответ 2

У меня была эта проблема некоторое время назад, кто-то импортировал заголовок cocoapod неправильно. Убедитесь, что вы используете скобку, E.G. скорее, чем: #import "theUsefulClass.h" вы должны использовать: #import <thePod/theUsefulClass.h>

Ответ 3

В Xcode вы можете проверить Symbol Navigator (Cmd-3), чтобы увидеть, где символ определяется дважды. Это позволит вам принять решение о том, что делать. В моем случае я нашел два символа с одинаковыми именами в двух разных библиотеках. Возможно, к одному из них может быть добавлен префикс к имени символа, чтобы устранить неоднозначность конфликта.