在框架内部包含非模块化头文件错误

时间:2018-05-13 11:03:22

标签: ios objective-c import frameworks package

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

我正在创建一个使用另一个第三方框架的框架项目(Obj-c)。在MyFramework的伞形标题中,我有第三方框架的import语句。当我打包我的框架并将其包含在另一个iOS项目中时,它无法构建此错误。

我尝试的事情:

  • 打开"允许框架模块中的非模块化包含"
  • 将第三方框架的总括标题添加为" Public"头

请告知此处遗漏的内容。提前谢谢!

这里是精确错误:

  

在框架模块中包含非模块化头   ' MyFramework.TestManager&#39 ;:   ' /TestApp/WindowsAzureMessaging.framework/Headers/WindowsAzureMessaging.h'

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

我在Umbrella标头中导入了Azure Messaging Framework,如下所示:

#import <WindowsAzureMessaging/WindowsAzureMessaging.h>

1 个答案:

答案 0 :(得分:1)

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

您有几种选择:

  1. 调整他们的代码并使其构建为模块(使其“模块化”)。
  2. 不要将它包含在伞形标题中(避免在其中引用它),而是将其链接并直接在应用程序和框架中使用。
  3. 不是将文件框架作为单独的实体使用,而是可以(复制)它们的源代码(m和h文件)并编译到您的框架中,然后将一些标头公开为您自己的标头。
  4. 我认为选项1是正确的方法。这并不难,如果你设法做到这一点,考虑为他们的回购提出拉动请求,因为这将使每个人受益。