ios - 在框架错误中包含非模块化标头
问题描述
我意识到这是一个常见错误,并且已被多次询问,但在根据其他人的答案尝试了几种不同的方法后,我无法解决它。
我正在创建一个使用另一个第三方框架的框架项目(Obj-c)。在 MyFramework 的伞头中,我有第三方框架的导入声明。当我打包我的框架并将其包含在另一个 iOS 项目中时,它无法构建并出现此错误。
我尝试过的事情:
- 打开“允许框架模块中的非模块化包含”
- 将第三方框架的伞形标头添加为“公共”标头
请告知这里缺少的内容。提前致谢!
这是确切的错误:
在框架模块“MyFramework.TestManager”中包含非模块化标头:“/TestApp/WindowsAzureMessaging.framework/Headers/WindowsAzureMessaging.h”
此外,从路径来看,它似乎正试图在 TestApp 项目中搜索它,而它应该从框架中引用。
我在 Umbrella 标头中导入了 Azure 消息传递框架,如下所示:
#import <WindowsAzureMessaging/WindowsAzureMessaging.h>
解决方案
我能够重现您的错误。我看起来像WindowsAzureMessaging 标头和它引用的所有其他标头都没有用于模块化框架伞头,因为它使用“用户”导入而不是相对于框架的“系统”导入,而且它没有模块映射文件。
你有几个选择:
- 调整他们的代码并将其构建为模块(使其“模块化”)。
- 不要将它包含在伞形标题中(避免从那里引用东西),而是链接它并直接在应用程序和您的框架中使用。
- 您可以获取(复制)它们的源代码(m 和 h 文件)并编译到您的框架中,然后将一些标头作为您自己的标头公开,而不是将文件框架用作单独的实体。
我认为选项 1 是正确的方法。这并不难,如果你能做到这一点,考虑为他们的 repo 提出 pull request,因为这将使每个人都受益。
推荐阅读
- min - Geogebra 中 min 函数背后的数学原理是什么?
- recursion - 在 Ada 中使用递归绘制保龄球销(金字塔)
- reactjs - 尝试在反应组件中对 ag-grid 实施文本过滤器
- text-to-speech - 有没有办法让谷歌文本到语音,在所需的时间内说出文本?
- python - TypeError:预期的字符串或类似字节的对象 Tqdm
- cython - 如何在 'language=c++' 模式下使用 C 复数?
- windows - DART:为什么 dart 应用程序的规模如此之大?(控制台应用程序)
- node.js - 无法从 Heroku 上托管的 express 应用设置 cookie
- restsharp - 版本之间的 RestSharp 行为变化 - 休息请求参数中的令牌替换
- pygame - 使用 pygame 的多人游戏