XCode6:收到错误“在框架模块中包含非模块化标头”

Posted

技术标签:

【中文标题】XCode6:收到错误“在框架模块中包含非模块化标头”【英文标题】:XCode6: Receiving error "Include of non-modular header inside framework module" 【发布时间】:2015-04-17 14:49:18 【问题描述】:

我有一个 ios 应用,它由一个应用、一堆我的自定义框架和一堆第三方框架组成:

App
    MyFramework1
    MyFramework2
        AFNetworking.framework
        Mantle.framework
        ..

我收到错误“在框架模块中包含非模块化标头”,其结构如下:

App/AppDelegate.m
#import <MyFramework2/MyFramework2.h>

MyFramework2/MyFramework2.h
#import "MyClass.h"

MyClass.h
#import <Mantle/Mantle.h>        <-- Error happens here

MyFramework2 自行构建

尝试构建 App 失败,并在导入 Mantle.h 的行出现错误“Include of non-modular header inside framework module”

如果我在 .m 文件中导入 Mantle.h,这个问题就会消失,但我不能这样做,因为我的类继承自在 Mantle 中定义的 MTLModel

here 已解决此问题,但它不是 Swift 特有的。

建议 (1) 确保所有自定义框架标题都是公开的。他们是。 (2) 进入“Target”下的Build Settings,将“Allow Non-modular Includes in Framework Modules”设置为YES

有谁知道为什么会发生这种情况以及如何解决它?将“允许框架模块中的非模块化包含”设置为“是”是否被认为是一种好习惯?为什么这是一个错误?

谢谢。

【问题讨论】:

【参考方案1】:

在项目导航器中选择 .h 文件。在右侧的目标会员区域中,目标旁边有一个下拉菜单。在那里选择“public”(现在可能选择了“project”)。

【讨论】:

请注意,即使您打开了“允许框架模块中的非模块化包含”的 CLANG 设置,这也是一个问题,您的答案可以解决。谢谢。 @Nikos M. 你能添加截图吗?我看不到那个下拉菜单。请帮忙。非常感谢 目标会员的下拉菜单在哪里? @lenhhoxung 这不是下拉菜单。它位于带有属性的右侧边栏中。 @NikosM。谢谢,但它不适用于我,因为头文件是通过 cocoapods 安装的

以上是关于XCode6:收到错误“在框架模块中包含非模块化标头”的主要内容,如果未能解决你的问题,请参考以下文章