objective c carthage私有库 模块'myFramework'的标题包不包含标题'otherFramework.h'



carthage私有库 (9)

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

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

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

我的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'

这是我的框架标题:

#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找到头文件,警告消失。


Answer #1

看看这篇文章:

@import vs #import - iOS 7

它讨论了新模块导入的概念。 我有自己的自定义框架,并采用新方法导入objective-c框架

old: #import <MyFramework/MyFramework.h>

新: @import MyFramework;

它照顾了警告/


Answer #2

我今天遇到了同样的问题

问题是

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

而解决方案是

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

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

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

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

#import "HockeySDK/HockeySDK.h"

#import <HockeySDK/HockeySDK.h>

问题消失了..

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


Answer #3

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


Answer #4

对于其他人:在我的情况下,我已经移动了我想从我的框架中公开的标题,从“项目”到“公共”(构建框架目标的阶段)

然后Xcode给了我这个警告。

Xcode告诉我们,我们还需要在使用框架创建的公共头文件中的警告>中添加#import“标头名称”,因此框架的客户端将知道此标头。

所以修复:
1.to到框架公共头文件。(创建框架时由xcode创建的文件)。
2.添加#import“the-name-of-the-header-in-the-warning.h”


Answer #5

尝试修复存​​档构建错误导致我发生此错误并发布

我的解决方案非常简单,但我永远想弄清楚。

  • 当我运行$ pod install时,它在与我的.xcodeproj文件相同的目录中为我生成了一个工作区。
  • 但是我已经创建了一个工作空间用作其父目录。
  • 所以我只是删除了我的旧工作区,然后选择了pods创建的工作区

希望这有助于某人! glhf!


Answer #6

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

构建阶段>标题

你也应该

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

要么

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


Answer #7

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


Answer #8

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

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

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




carthage