我的 Swift / iOS9 框架 'viewer_protocol' 使用另一个外部 Objective-C 框架(CocoaAsyncSocket)。我正在使用 Carthage 构建 CocoaAsyncSocket。到目前为止一切正常:在我的框架 Xcode 项目中有一个示例应用程序,使用我的框架没有任何问题。
现在我想在不同的 Xcode 项目中使用我的框架 - 尽管使用 Carthage。我只包含我的框架作为依赖项,Carthage 自动将依赖项解析为 CocoaAsyncSocket。我将这两个框架嵌入到这个新的 Xcode 项目中并构建了我的应用程序:这里一切正常 - 除了一个我无法摆脱的警告:
/Users/John/Repositories/my_project/<module-includes>:1:1:
Umbrella header for module 'my_project' does not include header 'GCDAsyncSocket.h'
这是我的框架标题:
#import <UIKit/UIKit.h>
//! Project version number for my_project.
FOUNDATION_EXPORT double my_projectVersionNumber;
//! Project version string for my_project.
FOUNDATION_EXPORT const unsigned char my_projectVersionString[];
// In this header, you should import all the public headers of your framework
using statements like #import <my_project/PublicHeader.h>
#import <CocoaAsyncSocket/CocoaAsyncSocket.h>
如您所见,CocoaAsyncSocket.h 已导入。此外,在我的框架内,包含 CocoaAsyncSocket.h 文件:
我在这里缺少什么?我在我的框架内使用了其他几个外部框架,它们没有任何警告——所有这些外部框架都是用 Swift 编写的——CocoaAsyncSocket 是纯 Objective-C。
这是我的框架 module.modulemap:
framework module my_project {
umbrella header "my_project.h"
export *
module * { export * }
}
module viewer_protocol.Swift {
header "my_project-Swift.h"
}
更新
我找到了一个解决方案:将我的框架标题中的导入语句从
#import <CocoaAsyncSocket/CocoaAsyncSocket.h>
至
#import "CocoaAsyncSocket/CocoaAsyncSocket.h"
现在 Xcode 找到头文件并且警告消失了。