Моя среда Swift/iOS9 'viewer_protocol' использует другую и внешнюю среду Objective-C (CocoaAsyncSocket). Я использую Карфаген для сборки CocoaAsyncSocket. Пока все работает нормально: у меня есть пример приложения внутри моего фреймворка Xcode Project, использующего мой фреймворк без проблем.
Теперь я хочу использовать мой фреймворк в другом проекте Xcode - хотя и с использованием Carthage. Я включаю только мой Framework как зависимость, и Carthage автоматически разрешает зависимости в CocoaAsyncSocket. Я встроил обе фреймворки в этот новый проект Xcode и собрал свое приложение: здесь все отлично работает - кроме одного предупреждения, от которого я не могу избавиться:
/Users/hibento/Repositories/viewer_protocol/<module-includes>:1:1:
Umbrella header for module 'viewer_protocol' does not include header 'GCDAsyncSocket.h'
Это мой каркасный заголовок:
#import <UIKit/UIKit.h>
//! Project version number for viewer_protocol.
FOUNDATION_EXPORT double viewer_protocolVersionNumber;
//! Project version string for viewer_protocol.
FOUNDATION_EXPORT const unsigned char viewer_protocolVersionString[];
// In this header, you should import all the public headers of your framework
using statements like #import <viewer_protocol/PublicHeader.h>
#import <CocoaAsyncSocket/CocoaAsyncSocket.h>
Как вы можете видеть, CocoaAsyncSocket.h импортирован. Кроме того, внутри моего фреймворка включен файл CocoaAsyncSocket.h:
Что мне здесь не хватает? Я использую несколько других внешних фреймворков внутри своей фреймворк, предупреждений для них нет - все эти внешние фреймворки написаны на Swift - CocoaAsyncSocket - это чистый Objective-C.
Это мой фреймворк module.modulemap:
framework module viewer_protocol {
umbrella header "viewer_protocol.h"
export *
module * { export * }
}
module viewer_protocol.Swift {
header "viewer_protocol-Swift.h"
}
Обновление
Я нашел решение: изменив оператор импорта в заголовке моего фреймворка с
#import <CocoaAsyncSocket/CocoaAsyncSocket.h>
в
#import "CocoaAsyncSocket/CocoaAsyncSocket.h"
Теперь Xcode находит файл заголовка, и предупреждение исчезает.