首页 > 解决方案 > 在框架错误中包含非模块化标头

问题描述

我意识到这是一个常见错误,并且已被多次询问,但在根据其他人的答案尝试了几种不同的方法后,我无法解决它。

我正在创建一个使用另一个第三方框架的框架项目(Obj-c)。在 MyFramework 的伞头中,我有第三方框架的导入声明。当我打包我的框架并将其包含在另一个 iOS 项目中时,它无法构建并出现此错误。

我尝试过的事情:

请告知这里缺少的内容。提前致谢!

这是确切的错误:

在框架模块“MyFramework.TestManager”中包含非模块化标头:“/TestApp/WindowsAzureMessaging.framework/Headers/WindowsAzureMessaging.h”

此外,从路径来看,它似乎正试图在 TestApp 项目中搜索它,而它应该从框架中引用。

我在 Umbrella 标头中导入了 Azure 消息传递框架,如下所示:

#import <WindowsAzureMessaging/WindowsAzureMessaging.h>

标签: iosobjective-cimportframeworkspackage

解决方案


我能够重现您的错误。我看起来像WindowsAzureMessaging 标头和它引用的所有其他标头都没有用于模块化框架伞头,因为它使用“用户”导入而不是相对于框架的“系统”导入,而且它没有模块映射文件。

你有几个选择:

  1. 调整他们的代码并将其构建为模块(使其“模块化”)。
  2. 不要将它包含在伞形标题中(避免从那里引用东西),而是链接它并直接在应用程序和您的框架中使用。
  3. 您可以获取(复制)它们的源代码(m 和 h 文件)并编译到您的框架中,然后将一些标头作为您自己的标头公开,而不是将文件框架用作单独的实体。

我认为选项 1 是正确的方法。这并不难,如果你能做到这一点,考虑为他们的 repo 提出 pull request,因为这将使每个人都受益。


推荐阅读