我的Swift / iOS9框架'viewer_protocol'使用另一个外部Objective-C框架(CocoaAsyncSocket)。我正在使用Carthage构建CocoaAsyncSocket。到目前为止一切正常:在我的框架Xcode Project中使用我的框架有一个示例App没有任何问题。
现在我想在不同的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语句#import <CocoaAsyncSocket/CocoaAsyncSocket.h>
到
#import "CocoaAsyncSocket/CocoaAsyncSocket.h"
现在Xcode找到头文件,警告消失。
答案 0 :(得分:22)
我今天遇到了同样的问题
问题是
模块' HockeySDK '的标题不包含标题' BITHockeyBaseViewController.h '
,解决方案是
1.构建并运行项目并转到报告导航器
2.查看警告,点击展开详细信息
它将使您成为需要进行更改的文件名 正如你在下面的屏幕截图中看到的那样
所以我刚刚在AppDelegate.m文件中更新了我的import语句
新
#import "HockeySDK/HockeySDK.h"
旧
#import <HockeySDK/HockeySDK.h>
并且问题消失了......
希望这会对某人有所帮助。谁来这里寻求解决方案。答案 1 :(得分:21)
我最近遇到了同样的问题。显然我在目标成员资格中将头文件设置为public
,但它没有在伞头中公开。通过使用project
访问权限而不是public
来生成头文件来解决问题。
答案 2 :(得分:14)
对我来说,解决方案如下:
1)每个Objective C框架都有1个头文件,其中包含所有:
#import ...
#import ...
#import ...
2)确保此文件导入缺少的标头。
3)再次构建项目,它应该删除警告。
答案 3 :(得分:11)
我有同样的问题。似乎与旧的构建文件有关。
标准Xcode问题修复程序对我有用:
答案 4 :(得分:7)
只是为了完整性,如果您的标题设置为公开:
构建阶段&gt;标题
你应该
在其他人提到的
中包含您的主标题中的导入OR
如果不需要公开,则将该标题移至“私人”
答案 5 :(得分:7)
或者,您可能在框架的构建阶段的Public
区域内公开了文件,这些文件应该实际移回Project
区域。
如果您不希望这些文件位于您框架的标题内,以便他们可以公开访问,那么您可以将其恢复。
转到框架 - &gt;目标 - &gt;构建阶段并拖动以将不必要的头文件从Public移动到Project。
答案 6 :(得分:2)
我们最近得到了这个,这是由于DerivedData中的损坏。删除该文件夹可以解决问题。
答案 7 :(得分:0)
看一下这篇文章:
它涵盖了新模块导入的概念。 我有自己的自定义框架,并采用新方法导入objective-c框架
旧:
#import <MyFramework/MyFramework.h>
新:
@import MyFramework;
它处理了警告/
答案 8 :(得分:0)
对于其他人: 就我而言,我已经将要从框架公开的标头从“项目”移到“公共”(框架目标的构建阶段)
然后Xcode给了我这个警告。
Xcode告诉我们,我们还需要在使用框架创建的公共头文件中添加#import“警告中的头名称”,以便(框架的)客户端知道该头。
所以解决方法:
1.转到框架公共头文件。(创建框架时由xcode创建的文件)。
2.添加#import“警告中的标题名称”
答案 9 :(得分:0)
就我而言(Obj-c框架):
Umbrella header for module 'opus' does not include header 'opus_multistream.h'
我需要更改:
@import opus.opus_defines;
进入
@import opus;
(对于框架,我#import "....h"
或#import <....h>
中没有)
答案 10 :(得分:-1)
尝试修复存档构建错误导致我出现此错误并发布
我的解决方案非常简单,但我永远想知道。
答案 11 :(得分:-1)
对我而言,修复非常简单,提交所有更改并重新构建。警告消失了。