Ссылка на объект неоднозначна

#ios #swift #onesignal #couchbase-lite

#iOS #swift #onesignal #couchbase-lite

Вопрос:

Я получаю ошибку компиляции Xcode:

 <unknown>:0: error: reference to 'Session' is ambiguous
/ProjectDirectory/Pods/OneSignal/iOS_SDK/OneSignalSDK/Framework/OneSignal.framework/Headers/OneSignal.h:244:29: note: candidate found by name lookup is 'Session'
typedef NS_ENUM(NSUInteger, Session) {
                            ^
/Users/MyUserName/Library/Developer/Xcode/DerivedData/AppName-apoiuurqrcguucdjqrtzfoqixrcx/Build/Products/Debug-iphoneos/UserData.framework/Headers/UserData-Swift.h:245:12: note: candidate found by name lookup is 'Session'
@interface Session : CBLModel
  

Похоже, Xcode выдал эту ошибку, потому что project имеет класс, Session который наследует CBLModel (CouchBase document), а project использует OneSignal framework.

Если сеанс объекта не наследуется CBLModel , Xcode компилируется без серьезных проблем.

Кажется, что из-за CouchBase Xcode каким-то образом генерирует дополнительные файлы?

Xcode предоставляет Candidate found by name lookup is 'Session' :

 SWIFT_CLASS("_TtC8UserData7Session")
@interface Session : CBLModel
@property (nonatomic) int64_t created;
@end
  

И

 /* OneSignal Influence Types */
typedef NS_ENUM(NSUInteger, Session) {
    DIRECT,
    INDIRECT,
    UNATTRIBUTED,
    DISABLED
};
  

Есть идеи, как решить проблему без переименования Session ?

Комментарии:

1. Я сомневаюсь, что это возможно, и именно поэтому настоятельно рекомендуется всегда добавлять префиксы к типам Objective-C, поскольку в нем нет понятия пространства имен и тому подобного, Особенно с таким вездесущим именем, как Session

2. @Xernox вы пробовали переименовать объект сеанса?

3. @Jay Да, я переименовал свой сеанс. Это казалось единственным исправлением

4. UserData.framework/Headers/UserData-Swift.h и OneSignal.framework/Headers/OneSignal.h оба не похожи на классы фреймворка CBL. Вы уверены, что изменение наследования только от CBLModel исправляет ошибку неоднозначного имени класса?

5. Я переименовал свой собственный сеанс, который унаследовал документ CBL. Как только мой объект наследует CBL — вот и все, его нельзя назвать сеансом.