【问题标题】:@import causes parse issue: "could not build module"@import 导致解析问题:“无法构建模块”
【发布时间】:2015-06-19 16:13:36
【问题描述】:

用 Xcode 6.3 更新后,我发现我的项目有些奇怪。

以下代码导致解析问题,显示“无法构建模块'AgendaFramework'”,AgendaFramework 是我为 ios8 定制的嵌入式框架:

@import MyEmbededFramework;

错误标记如下所示:

在索引未构建期间提出了问题。整个构建可以成功执行而不会出现任何错误或警告。我可以构建、存档、在设备上运行、部署、提交到 App Store。

但是,当我编辑属于扩展的类时,会出现错误标记。显式链接到嵌入式框架的扩展(小部件)。 (我知道当我使用@import 语句时我不必这样做。)

在这种状态下,我收不到任何有效的内容助手,很烦人。

我用旧样式替换import语句后,问题就消失了:

#import <AgendaFramework/AgendaFramework.h>

我有几个其他项目与导致此问题的项目具有非常相似的拓扑,但它们没关系。只有一个项目会导致此问题。我比较了每个细节构建设置,我找不到任何线索。

我试过了:

  • 删除派生数据
  • 完全清洁
  • 重启

欢迎提供任何线索。谢谢!

【问题讨论】:

  • 你真的创建了iOS8动态框架吗???
  • 它仍然适用于构建。该问题仅在实时索引时出现。
  • 清理构建文件夹(CMD+Option+Shift+K)并删除派生数据文件夹,重启Xcode,重启Mac
  • 我也有同样的问题。 #import 有效,而 @import Framework;说无法构建模块。有趣的是,该项目确实构建并成功运行;错误消息总是在构建后出现。
  • 我的框架位于主 .xcodeproj 文件的子文件夹中。我之前为所有 3rd 方框架使用了该子文件夹,并在设置中递归地添加了该搜索路径,因此我不必为我添加的每个框架都弄乱很多额外的搜索路径。不知何故,这不适用于@import,所以我只是将框架添加到与 .xcodeproj 文件相同的文件夹中,没有子文件夹或任何东西。然后事情开始起作用了——没问题。

标签: xcode xcode6.3


【解决方案1】:

在构建设置中关闭模块。这可能有效

【讨论】:

  • 你能详细解释一下吗?我制作了一个模块(一个框架)并使用了模块化导入语句。所以我认为这没有意义。
  • 尝试去构建设置和搜索模块并关闭它们。
【解决方案2】:

它看起来像打开: 允许框架模块中的非模块化包含为我解决了这个问题。

【讨论】:

  • 在特定情况下,这种方法现在也有效,有时也有效。
  • Allow Non-modular Includes=YES,怎么弄,我也有同样的问题,请支持我
  • 天哪,这在 Xcode 设置中被评为双重模糊... 围绕它点击目标 > 构建设置 > 全部 > 组合 > 允许框架模块中的非模块化包含。 Xcode 是一个悲惨的 POS。 (软件?)最重要的是,不,它不起作用。
【解决方案3】:

有时可以通过将框架添加到与 .xcodeproj 文件相同的文件夹来解决此问题,不要添加子文件夹或其他任何东西。

感谢 Jonny 在问题中将其作为评论指出。

【讨论】:

  • 那是一种丑陋的方式,但它对我有用。找不到更好的方法。如果你有,请更新这个帖子。
【解决方案4】:

今天我通过这些步骤解决了这个问题:

  1. 选择架构“MyEmbededFramework”
  2. 按 [Command + B] 构建
  3. 在构建阶段面板中,将“MyEmbededFramework.framework”添加到 Link Binary With Libraries

尝试构建您的项目,问题现在可能会消失。

【讨论】:

    【解决方案5】:

    你可以试试这个,它对我有用。删除有关您项目的 DerivedData 目录。step by step

    【讨论】:

      【解决方案6】:

      对我有用的解决方案:努力将框架头文件定向到系统样式导入......就像#import &lt;CoreXLib/CoreThreads.h&gt;故事:

      在我的例子中,我构建的框架来自多个代码库的组合,因为很明显,我可以通过 Framework 与脆弱的 Xcode 项目路径名在代码简化器中重用一些通用设计模式。

      当我构建我的框架“CoreXLib”时,我将它重新组织成 Xcode 典型的 Cocoa 框架。我改变了我的进口:

          #import "CoreTypeAliases.h"    // project local style   
      

          #import <CoreXLib/CoreTypeAliases.h>    // system or framework style
      

      适当地。使用 CoreXLib.framework 的几个项目(包括乐高文件夹中的公共标头)工作......所以我认为我很高兴......

      很遗憾,一些公开的标头没有得到完全更新。框架中的类以本地风格构建得很好。到目前为止,所有使用它的项目都可以工作,然后我遇到了一个没有...以及@jeeeyul 指出的错误

      因此,在找到此线程并找到 @kwz 的解决方案之后,我决定在我试图解决这个问题的同时完善代码。在抛光中,我发现一些#imports 没有像在 Xcode 搜索和替换中那样被更改。是时候进行一些手动干扰了...

      在我的 CoreXLib 项目标头的 all 中修复了 all 的这些引用(不仅仅是公共的,自卫)之后,我又回到了这个问题......我将新编译的 CoreXLib.framework 带到 嵌入它的错误项目中...问题消失了!我检查了框架项目和链接框架的项目中的Allow Non-modular Includes...,两者都是“否”。在几次测试中,同时切换到“是”和“否”没有任何区别。 唯一的其他更改是 #import "..."#import &lt;CoreXLib/...&gt; 的修改。

      所以有时候擦苹果?可以敲掉虫子??...

      【讨论】:

        【解决方案7】:

        您好,这是因为您在框架标题中公开的文件也必须是公开的。

        【讨论】:

          【解决方案8】:

          在构建设置中的Build Active Architecture Only 中设置为YES。 它对我有用。

          【讨论】:

          • 你解决了我的问题。一直试图解决这个问题超过 7 小时。谢谢
          猜你喜欢
          • 1970-01-01
          • 2016-04-19
          • 1970-01-01
          • 1970-01-01
          • 2022-11-02
          • 1970-01-01
          • 1970-01-01
          • 2023-02-26
          • 1970-01-01
          相关资源
          最近更新 更多