Answers:
尝试进入“目标”下的“构建设置”,并将“允许框架模块中的非模块化包含”设置为“是”。
真正的答案是库所有者需要更改导入位置。这些文件ifaddrs.h,arpa / inet.h,sys / types.h将被导入到Xcode不喜欢的框架中的.h文件中。库维护者应将它们移至.m文件。例如,在GitHub上查看此问题,其中AFNetworking解决了相同的问题:https : //github.com/AFNetworking/AFNetworking/issues/2205
/usr/include/libproc.h
怎么办?
你可以设定 在“构建设置”的“ 框架模块”中将“ 允许非模块化包含 ”设置为受影响的目标。这是您需要编辑的构建设置:
注意:您应该使用此功能来发现潜在的错误,我发现这是由重复括弧括弧的全局包含在具有某些相关关系的文件中引起的,即:
#import <Foo/Bar.h> // referred to in two or more dependent files
如果将帧模块中的“ 允许非模块化包含”设置为“是”,则会导致出现一系列“ X是歧义引用”错误或类似的错误,那么您应该能够找出有问题的重复项并消除它们。清理代码后,将“ 框架模块”中的“允许非模块化包含”设置为NO。
实际上,更简单的解决方法是将#import
语句移到.m
文件顶部(而不是将其放在.h
头文件中)。这样,它就不会抱怨它包含一个非模块化的头文件。我有这个问题,即Allow non-module includes
设定为YES
没有不为我工作,所以通过其移动到实现文件,它停止抱怨。实际上,无论如何,这是导入和包括头文件的首选方式。完成此操作后,将其设置回NO
应该可以。
理想情况下,我们应该尝试的目标已经Allow non-module includes
设定NO
。YES
在大多数情况下将此设置为意味着您做错了什么。该设置将转换为“允许在磁盘上导入原本不是模块一部分的随机头文件”。实际上,这适用于极少数的用例,因此此设置应始终为NO
(即默认值)。
如果您正在开发自己的框架,请执行以下操作:
为什么会这样?
如果任何您已在提到公共的头文件module.modulemap具有被导入语句不会在modulemap提到的,这会给你的错误。由于它尝试导入一些未声明为模块化的标头(在module.modulemap中),因此破坏了框架的模块化。
我该如何解决?
只需包含将错误提供给您的module.modulemap的标头,然后再次构建!
为什么不只将allow non-modular设置为YES?
因为这里并不是真正的解决方案,所以您告诉您的项目“该框架应该是模块化的,但不是。应该以某种方式使用它,我不在乎。” 这不能解决您的库的模块化问题。
我遇到了同样的问题,但上面没有任何帮助。因此,我希望我的回答对某人有所帮助。就我而言,问题出在ALWAYS_SEARCH_USER_PATHS设置中。当它设置为NO时,没有项目可以正常工作。但是就其中一个Pod要求将其设置为YES,我收到了一个错误
在框架模块中包含非模块化头
经过几杯咖啡和整天的研究,我发现根据Xcode 7.1 Beta 2的已知问题发行说明:
•如果对于先前编译的框架出现错误,指出“在框架模块中包括非模块头,则包括在内”,请确保将“始终搜索用户路径”构建设置设置为“否”。仅出于传统原因,默认值为“是”。(22784786)
虽然我使用的是XCode 7.3,但似乎该错误尚未修复。
如果在构建动态框架时在伞状标题中看到此错误,请确保将文件导入为:
#import "MyFile.h"
和不作为#import <MyFramework/MyFile.h>
。
通过使用Git clean,我能够清除许多此类错误。这是命令: git clean -dffx && git reset --hard
ifaddrs
,则它们必然会导入ifaddrs.h。