代码之家  ›  专栏  ›  技术社区  ›  user591410

框架内包含非模块化标头错误

  •  0
  • user591410  · 技术社区  · 7 年前

    我意识到这是一个常见的错误,已经被问了好几次,但在根据别人的答案尝试了几件不同的事情后,我无法解决它。

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

    我尝试过的事情:

    • 打开“允许非模块化包含在框架模块中”
    • 将第三方框架的伞形标头添加为“Public”标头

    请告知此处缺失的内容。提前感谢!

    下面是确切的错误:

    框架模块内包含非模块化标头 '我的框架。TestManager': “/TestApp/WindowsAzureMessaging。框架/标题/WindowsAzureMessaging。h'

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

    我在伞形标题中导入了Azure消息框架,如下所示:

    #import <WindowsAzureMessaging/WindowsAzureMessaging.h>
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   battlmonstr    7 年前

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

    您有多种选择:

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

    我认为选项1是正确的选择。这并不难,如果你能做到这一点,考虑向他们提出回购请求,因为这将惠及所有人。