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:收到错误“在框架模块中包含非模块化标头”的主要内容,如果未能解决你的问题,请参考以下文章

XCode6/Swift:发送到实例的无法识别的选择器

XCode6 Beta 中的编译器警告 - “速记外部参数名称”

误删Images.xcassets后报错,objective-c和xcode6.4

使用 xcode 6 提交时出现错误 ITMS-9000“无效的图像路径”

Xcode6 GM“代码签名错误”

失去与“iPhone 6”的连接。第一次在 xcode6 中运行我的 iOS 应用程序时