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

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

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

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

更新:

这是一个Swift编译器错误。

更新2:

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


当前回答

在允许导入非模块化include之后,你可以尝试使用Objective-C Bridging头文件导入该模块:

#import <YandexMobileMetrica/YandexMobileMetrica.h>

其他回答

迅速:

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项目。

#import "MyOtherFramework.h"

Do

#import <MyOtherFramework/MyOtherFramework.h>

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

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

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

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

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

在我的情况下(Xcode 9 beta 6 - Swift 4 -使用Cocoapods),当我删除Podfile时,这个问题得到了解决。然后再次运行pod install

当我在一个项目中包含我自己的框架时,我就遇到了这个问题。修正了将sqlite3.h的所有导入都放在。m文件中,而不是公共的。h文件中。我认为其他库也会在Xcode中标记出类似的问题。