Cocoapods: doppelte definition der Schnittstelle
Ich' wickelte mir private Bibliothek in cocoapods. Es hat die Abhängigkeit von ReactiveCocoa.
s.name = 'MineLibrary'
s.dependency 'ReactiveCocoa/Core'
s.source_files = 'Source/*.{h,m,swift}'
....
Einige header-Dateien enthält:
#import <ReactiveCocoa/RACSignal.h>
Ich in ein neues Projekt:
use_frameworks!
....
pod 'ReactiveCocoa'
pod 'MineLibrary', :git => 'git@.....'
Aber wenn ich das Projekt kompilieren, ich bin immer ein Fehler:
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
Wie es gelöst werden kann?
P. S. ich bin mit cocoapods 0.36.0.rc.1
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben Sie versucht, aktualisieren auf die neueste Version von CocoaPods? Ich bemerkte, Sie haben erwähnt, Sie sind mit einem veralteten release-Kandidat, der möglicherweise zu Unrecht.
Im Allgemeinen, hier ist was Sie tun müssen bei der Erstellung und Verwendung eines CocoaPod in Ihrer app:
1) In Ihrem CocoaPod, erklären alle Ihre Abhängigkeiten in der pod spec, mit
s.dependency
für jeden2) In Ihrer app verwenden CocoaPods zur Verwaltung aller Ihrer app-Abhängigkeiten. Das ist nicht manuell per drag-and-drop-Bibliotheken in Ihre app. Wenn Sie das tun, werden Sie riskieren die Schaffung von doppelten Klassen, mit denen, die Sie per drag-and-drop gehören.
3) In Ihre app und CocoaPod, davon abhängen, wie flexibel die Versionen, wie Sie können. In der Regel sollten Sie zumindest für die minor-version updates, z.B.
pod 'PodName', '~> 1.0.0'
.4) In Ihrer app-pod-Datei, geben Sie ein Ziel für Ihre app und Ihre unit-test-target, z.B.
Wenn du mehr als zwei Ziele, geben Sie ein Ziel für jeden. Oder zumindest, geben Sie ein anderes Ziel für unit-tests, die bekommen die app injiziert.
Wurde ich mit diesem Thema eine Weile zurück, jemand importiert cocoapod header falsch. Stellen Sie sicher, dass Sie das Klammer-notation, z.B. als:
#import "theUsefulClass.h"
Sie sollten mit:
#import <thePod/theUsefulClass.h>
In Xcode, können Sie das Symbol Navigator (Cmd-3), um zu sehen, wo das symbol definiert ist doppelt. Dies ermöglicht es Ihnen, eine Entscheidung zu treffen, was zu tun ist. In meinem Fall fand ich zwei Symbole mit dem gleichen Namen, die aus zwei verschiedenen Bibliotheken. Vielleicht einer von diesen könnte ein Präfix Hinzugefügt, um den symbol-Namen keine Verwechslungen der Konflikt.