模块'myFramework'的标题包不包含标题'otherFramework.h'

hib*_*nto 48 xcode frameworks objective-c swift carthage

我的Swift/iOS9框架'viewer_protocol'使用另一个外部Objective-C框架(CocoaAsyncSocket).我正在使用Carthage构建CocoaAsyncSocket.到目前为止一切正常:在我的框架Xcode项目中有一个示例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'
Run Code Online (Sandbox Code Playgroud)

这是我的框架标题:

#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>
Run Code Online (Sandbox Code Playgroud)

如您所见,导入了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"
 }
Run Code Online (Sandbox Code Playgroud)

更新

我找到了一个解决方案:更改我的框架头中的import语句

#import <CocoaAsyncSocket/CocoaAsyncSocket.h>
Run Code Online (Sandbox Code Playgroud)

#import "CocoaAsyncSocket/CocoaAsyncSocket.h"
Run Code Online (Sandbox Code Playgroud)

现在Xcode找到头文件,警告消失.

小智 26

我最近遇到了同样的问题.显然我将头文件设置为public目标成员资格,但它没有在伞头中公开.修复了通过使用头文件project而不是public.


swi*_*Boy 25

我今天遇到了同样的问题

问题是

模块' HockeySDK '的Umbrella标头不包含标题' BITHockeyBaseViewController.h '

而解决方案是

1.构建并运行项目和go-to Report Navigator

2.查看警告,单击以展开详细信息

它将使您需要进行更改的文件名,如下面的屏幕截图所示

在此输入图像描述

所以我刚刚在AppDelegate.m文件中更新了我的import语句

#import "HockeySDK/HockeySDK.h"
Run Code Online (Sandbox Code Playgroud)

#import <HockeySDK/HockeySDK.h>
Run Code Online (Sandbox Code Playgroud)

问题消失了..

希望这会对某人有所帮助.谁来这里寻求解决方案.


Sen*_*ful 16

我遇到过同样的问题.似乎与旧的构建文件有关.

标准的Xcode问题修复程序对我有用:

  1. 清洁项目
  2. 删除了派生数据
  3. 重启Xcode


Ode*_*gev 14

对我来说,解决方案如下:

1)每个Objective C框架都有1个头文件,其中包含以下所有内容:

#import ...
#import ...
#import ...
Run Code Online (Sandbox Code Playgroud)

2)确保此文件导入缺少的标头.

3)再次构建项目,它应该删除警告.


pfl*_*ous 7

只是为了完整性,如果您的标题设置为公开:

构建阶段>标题

你也应该

像其他人提到的那样,在主标题中包含导入

要么

如果不需要公开,则将该标题移动到"私有"


iwa*_*bed 7

或者,您可能在Public框架的构建阶段区域中公开了应该实际移回该Project区域的文件.

如果您不希望这些文件位于框架的标题内,以便可以公开访问,那么您可以将其还原.

转到框架 - >目标 - >构建阶段并拖动以将不必要的头文件从Public移动到Project.

截图


Ann*_*ile 6

我们最近得到了这个,这是由于 DerivedData 中的损坏。删除该文件夹解决了问题。