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

Posted

技术标签:

【中文标题】在框架模块错误中包含非模块化标头【英文标题】:Include of non-modular header inside framework module error 【发布时间】:2016-11-20 06:49:49 【问题描述】:

尝试将 ParseLiveQuery cocoapod 集成到我的项目中,但是在构建时我不断收到错误消息:

'Bolt.BFCancellation'

我通过 cocoapods 安装了 ParseLiveQuery(连同 Parse)。这是我的 podfile:

use_frameworks!

pod 'ParseLiveQuery'
pod 'Parse'

post_install do |installer|
  installer.pods_project.build_configuration_list.build_configurations.each do |configuration|
    configuration.build_settings['CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES'] = 'YES'
  end
end

我还在构建设置中将 Allow Non-module Includes In Framework Modules 设置为 Yes,但仍然出现此错误。

【问题讨论】:

【参考方案1】:

我解决了从框架中删除 Modules 文件夹的问题。

使用查找器浏览到应用程序项目中存在的框架位置

进入Test.framework 文件夹(在上述情况下为ParseLiveQuery.framework)并删除Modules 文件夹。

清理并重新构建应用程序,它将解决问题。

【讨论】:

【参考方案2】:

我自己也遇到了。我将头文件添加到框架的伞头文件中,然后将其作为 Public 添加到 Headers 部分。 (我正在添加可达性库)

到目前为止,它似乎对我有用。

【讨论】:

在这种情况下,可达性将在框架之外可见。但是我不想暴露这些Reachability类,我该怎么办? —— 我不得不考虑一下,但这真的重要吗? Reachability 是一个“公共”库,那么通过您的库“提供”它的缺点是什么? 是的,这很重要。由于我的框架中有很多 OC 代码。我不希望我的框架的用户看到这些 OC 代码。无论如何,我找到了另一个解决方案:使用像这个家伙这样的模块:***.com/questions/42085217/… @DàChún this answer 基本上说要为 Obective-C 代码制作一个单独的 swift 模块,这样标题就不必设置为 Public

以上是关于在框架模块错误中包含非模块化标头的主要内容,如果未能解决你的问题,请参考以下文章

xCode 7 错误:在 Google 地图的框架模块中包含非模块化标头

带有 iOS 9.1 错误的 Xcode 7.1:在框架模块“Parse.PFGEoPoint”中包含非模块化标头

Flutter:在框架模块“firebase_core.FLTFirebasePlugin”中包含非模块化标头

在框架模块中包含非模块化标头

在框架模块中包含非模块化标头

具有依赖项的 CocoaPods 框架 - 在框架模块中包含非模块化标头