现在我想把我的ObjC框架迁移到Swift,我得到了以下错误:

include of non-modular header inside framework module 'SOGraphDB'

引用是一个头文件,它只是定义了一个协议,我在一些类中使用这个头文件来使用这个协议。

这似乎与模块特性有关,但目前不太清楚如何修复,你知道解决方案吗?

更新:

这是一个Swift编译器错误。

更新2:

一个快速的解决方法(但不能解决根本原因)是将以下设置设置为yes: clang_allow_non_modular_incles_in_framework_modules = yes


当前回答

导入Parse框架时遇到了这个问题。我能解决这个问题的唯一方法是放弃我上次提交后所做的所有更改(简单地删除框架并清理项目不起作用),并再次添加Parse(在重新下载SDK之后)及其所需的其他框架。

其他回答

我知道这是一个老问题,但我也有同样的问题,上面没有任何东西能帮助我。所以我希望我的回答能对别人有所帮助。 在我的情况下,问题是在ALWAYS_SEARCH_USER_PATHS设置。当它被设置为NO时,项目建立并工作正常。但只要其中一个pod要求将其设置为YES,我就会收到一个错误

包括非模块化的头在框架模块内

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

如果你得到一个错误声明“包含非模块头在框架模块” 之前编译的框架,确保“Always Search User Paths” 构建设置设置为“No”。仅由于遗留原因,默认为“Yes”。(22784786)

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

头文件已分配给目标,但仅被标记为项目可见,只是更改为公共导致解决此错误。

这个答案已经过时了。

导入框架时,必须导入所有与根头文件共享依赖关系的头文件。确保这总是有效的最简单的方法是导入框架的“headers”文件夹中的所有头文件到你的公共头文件路径。

Swift编译器使用这些信息生成一个非破损符号的映射及其相关的类型信息。

对我来说,解决方案是去目标->构建设置->允许框架模块中的非模块化包含切换到YES!

Most commonly this error is caused by the chosen answer, yet I had this error appear once by accident when dragging framework files into my new project folder. I clicked to delete the frameworks but accidentally pressed to only 'Remove Reference' to the frameworks rather than to actually delete the files completely. At this point if I opened my project folder in Finder I saw files like 'CoreLocation' and 'AudioToolbox' there. Deleting these files from the project folder and cleaning the project fixed the issue.