现在我想把我的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之后)及其所需的其他框架。

其他回答

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

我解决了它从框架中删除模块文件夹。

使用finder浏览到应用程序项目中显示的框架位置 进入Test.framework文件夹(在上面的例子中,它将是SOGraphDB.framework) &删除模块文件夹。 清洁和重新构建应用程序,它将解决问题。

迅速:

1. 修改你的Xcode项目和目标的构建设置如下所示:

允许非模块包含在框架模块中

Enable Bitcode:是

2. 使用当前最新版本的GoogleMaps iOS SDK(使用CocoaPods获取):

谷歌地图 (1.10.4)

3.注释有问题的导入:

//import GoogleMaps

4. 创建或修改桥接头文件,添加有问题的导入:

[你的Xcode项目名称]-Bridging-Header.h

// Use this file to import your target's public headers 
// that you would like to expose to Swift.
#import <GoogleMaps/GoogleMaps.h>

5. 清理并重新构建Xcode项目。

我有Facebook 4.02 sdk和FBSDKCoreKit的具体问题。

我做了所有的步骤,但仍然错误关于非模块化头。我只从框架中拖放特定的头以构建阶段->头节。

然后在顶部的项目导航器上自动创建标题的副本。

我从构建阶段->头文件中删除了它,并删除了新文件,工作正常。

好像它被重置了。

我想我解决了这个问题。我有一些在框架中使用sqlite3的模型代码。在我的例子中,罪魁祸首是<sqlite3.h>。

问题是在我的Module/Module.h头文件中,我导入了一个导入<sqlite3.h>的公共头文件。解决方案是隐藏所有sqlite3_xxx类型,并确保它们 没有出现在任何公共场所。所有对sqlite3的直接引用都是私有或项目可见性。例如,我有一个公共单例,它挂有一些sqlite3_stmt指针。我把它们移动到一个单独的类中,现在它只是一个公共报头中的前向声明。现在我可以建造了。

顺便说一句,clang_allow_non_modular_incles_in_framework_modules设置不起作用。我试着在框架和相关项目中都设置它。这种变通是必要的,尽管我不确定为什么。