在框架模块中包含非模块化头文件

我正在使用Xcode 6,

1)首先我要创build一个dynamic库(CoreLibrary)。 这个库包含RequestPoster.h文件。

2)然后我创build一个cocoa触摸框架,并添加了这个dynamic库(CoreLibrary)。

3)然后,这个框架添加到我的项目,它给RequestPoster.h文件(CoreLibrary)中的错误。

错误:在框架模块类中包含非模块化头文件:

ifaddrs.h,arpa / inet.h,sys / types.h>

这些文件在项目中找不到。

尝试在“目标”下执行“生成设置”,并将“允许框架模块中的非模块化包含”设置为YES。

真正的答案是图书馆所有者需要改变import的位置。 这些文件ifaddrs.h,arpa / inet.h,sys / types.h被导入到一个框架中的.h文件中,Xcode不喜欢。 图书馆的维护者应该把他们移到.m文件。 在GitHub上看到这个问题,AFNetworking解决了同样的问题: https : //github.com/AFNetworking/AFNetworking/issues/2205

您可以将受影响的目标的“生成设置” 中的“框架模块中的允许非模块化包含 ”设置为“是”。 这是您需要编辑的构build设置:

生成设置项目,你需要编辑

注意 :您应该使用此function来发现潜在的错误,我发现这经常是由于包含在具有一些依赖关系的文件中的angular度括号全局文件的重复引起的,即:

#import <Foo/Bar.h> // referred to in two or more dependent files 

如果在框架模块中设置允许非模块化包含YES会导致一组“X是模棱两可的引用”错误或类似的东西,您应该能够追踪违规副本并将其消除。 清理完代码后,将“ 允许非模块化包含”框架模块设置为“ 否”

确保头文件作为框架公共头文件的一部分公开提供。

转到框架 – >目标 – >构build阶段并拖动相关的头文件从项目到公共。 希望有所帮助!

截图

实际上,解决这个问题的一个更简单的方法是将#import语句移到.m文件的顶部,而不是将其放在.h头文件中。 这样它就不会抱怨它包含一个非模块化的头文件。 我有这个问题, Allow non-module includes设置为YES没有为我工作,所以通过将其移动到实施文件,它停止抱怨。 这实际上是导入和包含头文件的首选方式。

我有相同的问题,并通过公开头文件解决它。 [问题]

如果您正在处理项目中的多个模块。 那么你的头文件需要公开才能在项目的其他部分使用。 您需要的是select该头文件,并在项目实用工具视图。 将文件从Project / Private更改为Public。 见下图:

更改头文件范围

“在框架模块中包含非模块化头文件”

当你得到这个错误的时候,在某些情况下,解决scheme可能只是简单地在文件检查器“目标成员”中标记你想要导入为“公共”的文件。 默认是“Project”,当这样设置的时候会导致这个错误。 例如,在尝试将Google Analytics(分析)的标题导入框架时,情况就是如此。

我有同样的问题,上面没有帮助我。 所以我希望我的回答对某人有帮助。 在我的情况下,问题是在ALWAYS_SEARCH_USER_PATHS设置。 当它被设置为没有项目build立和工作正常。 但只要其中一个吊舱要求将其设置为YES,我正在收到一个错误

在框架模块中包含非模块化头文件

几杯咖啡和一整天的研究后,我发现,根据Xcode 7.1 Beta 2发行说明已知的问题:

•如果您之前编译的框架出现错误,指出“在框架模块中包含非模块化标题”,请确保“始终search用户path”编译设置设置为“否”。 仅出于传统原因,默认值为“是”。 (22784786)

虽然我使用XCode 7.3,但似乎这个bug还没有被修复。

如果您需要CocoaPods目标,请在Podfile添加以下行:

 post_install do |installer| installer.pods_project.targets.each do |target| target.build_configurations.each do |config| target.build_settings(config.name)['CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES'] = 'YES' end end end 

这对我来说是一个讨厌的问题。 没有任何build议似乎帮助我的个案,因为我需要在我个人的文件头文件中包含“非模块化”头文件。 我使用的工作是将导入调用粘贴在前缀头文件中。

同样的问题使疯狂。最后,我觉得把'导入xxx.h'在实现而不是界面可以解决问题。如果你使用Cocoapods来pipe理你的项目。你可以添加

s.user_target_xcconfig = {'CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES'=>'YES'}

在你的'xxx.podspec'文件中。