FBSDKCoreKit 的 Facebook iOS8 SDK 构建模块错误

Posted

技术标签:

【中文标题】FBSDKCoreKit 的 Facebook iOS8 SDK 构建模块错误【英文标题】:Facebook iOS8 SDK build module error for FBSDKCoreKit 【发布时间】:2015-06-08 17:33:51 【问题描述】:

我正在尝试将 Facebook SDK 添加到我在 Xcode 中的 ios 8 Objective-C 应用程序中。我根据 FB-dev 说明进行了安装。但是,当我将标头添加到我的 AppDelegate.m 文件时,我收到 "Could not build module 'FBSDKCoreKit'" 错误。

#import "AppDelegate.h"
#import <FBSDKCoreKit/FBSDKCoreKit.h>

根据我在别处读到的内容

    我已经清理了构建并重新安装了 Xcode。 我还重新安装了 Facebook SDK 安装程序并尝试将其添加到空白项目中(以防我的应用程序出现问题)。 我已经仔细检查了 plist 和 FB 说明中列出的框架文件,但似乎没有任何遗漏。

我被难住了。

【问题讨论】:

这些答案都不适合我。我的是与旧的 Bolts.framework 发生冲突。 ***.com/a/33114309/3324388 【参考方案1】:

确保您还导入了 Bolts 框架,这对我有用。

【讨论】:

【参考方案2】:

对于那些来到这里并像我一样犯了同样新手错误的人。也许我可以为你节省一些时间。我从事一个主要由 Objective-C 代码组成的旧项目。我们尝试在 Swift 中实现新的东西。

这是我在 Swift 代码中尝试的方法

import FBSDKCoreKit

class SomeClass 

  func doSomething 
    FBSDKAppEvents.logEvent("Some Event")
  

但是编译器报错无法编译模块等

我是如何解决的

从我的 Swift 代码中删除 import FBSDKCoreKit。 编辑了我们的Bridging-Header.h 并在那里导入了FBSDKCoreKit#import &lt;FBSDKCoreKit/FBSDKCoreKit.h&gt;

【讨论】:

【参考方案3】:

我遇到了同样的问题,我在 Xcode 6.4 上使用了最新的 Facebook SDK (FacebookSDKs-iOS-20160316),每当我将以下代码放入我的 AppDelegate.m 文件时,它都会一直给我这个错误: #import &lt;FBSDKCoreKit/FBSDKCoreKit.h&gt;

当我切换到 Xcode 7.2 时,问题解决了,错误消失了。猜猜这可能是版本兼容的问题

如果你和我遇到同样的问题,你可以尝试使用 Xcode 7.2 来构建它。问题是 Xcod 6.4 可能永远无法使用,只要您将 Facebook sdk 保留在您的项目中。

希望这会有所帮助!

【讨论】:

【参考方案4】:

TL;DR 删除项目中的 Bolts.framework 引用。

这些或任何其他答案都不适合我(就我而言)。对于我的项目,我们从较旧的 Facebook sdk 转换而来,并且有一个 Bolts.framework。

阅读文档

SDK 会自动加载其框架和资源依赖项。

因此,我认为发生了冲突。有我之前的 Bolts.framework,然后是当我下载新的 FacebookSDK 包(在本例中为 4.7)时出现的新的。

删除我的 Bolts.framework 可以解决问题(请务必在重建前进行清理)。

【讨论】:

【参考方案5】:

如果您遇到 'FBSDKCoreKit' 问题,您可以尝试以下解决方案:

    转到构建设置并搜索“允许非模块化”并设置

    “允许框架模块中的非模块化包含”标志为 YES

    转到 Document/FacebookSDK 文件夹

    然后转到 FBSDKCoreKit.framework

    在此文件夹中删除 Modules 文件夹。 然后在您的项目中添加 FacebookSDK 库。

    将框架搜索路径设置为“~/Documents/FacebookSDK”

    查找框架搜索路径的步骤

    转到项目的构建设置并搜索“框架搜索路径”。

    然后添加“~/Documents/FacebookSDK”

编辑:

请在 Facebook 应用程序中打开框架搜索路径,然后复制粘贴您的应用程序中提到的所有路径。类似于我在下面的屏幕截图中附加的路径

这将解决您的问题

【讨论】:

做到了所有这些 - 仍然没有运气。我只在将 api 与 swift 项目一起使用时才会遇到这个问题。 facebook 示例应用运行良好... @ArEsiiX 我已经更新了我的答案,我希望这对你有用。【参考方案6】:

我也遇到了同样的问题。 ... 上述解决方案都不适合我.. 我设置 。模块,标志和其他东西也......但没有任何帮助。

但对我来说,这个问题解决了

在 .pch 文件所在的文件夹之后或之内移动您的框架文件夹。

当我的框架文件夹 @myapp/frameworkFolder/fbframeworks. 它显示了问题。

我把它移到myapp/myapp/modal/fbframework/. 然后这个问题就解决了。 (我的 .pch 文件位于 myapp/myapp。)

可能对遇到相同问题的任何人都有帮助。

【讨论】:

【参考方案7】:

只需执行以下操作,我就可以成功构建应用程序。

在构建设置中将 “允许框架模块中的非模块化包含” 标志设置为 YES

而且我不想将 "Enable Modules"(c 和 Objective-C)设置为 NO

【讨论】:

我只需要:将“允许框架模块中的非模块化包含”标志设置为“是”即可正常工作 当我设置启用模块 = NO 时,我在另一个库中遇到了问题。和 Facebook 问题已修复,但在另一个库中出现错误。请帮帮我 @Randika 我通过在构建中添加一些框架来修复其他库问题。但再次收到 #import 未找到的错误。我很困惑我错过了什么,请帮助我 我必须在 Pods 项目上执行此操作才能使其正常工作。如果我只更换一两个抱怨的豆荚,它就不起作用了。【参考方案8】:

从 FacebookCoreKit.framwork 中删除 Module 目录。

【讨论】:

【参考方案9】:

来自 Chris Pan(Facebook 团队): https://developers.facebook.com/bugs/362995353893156/

4.0.1 版本添加了模块映射(这应该消除了桥接头的需要),但看起来这可能会导致一些其他兼容性问题。我们正在努力进行适当的修复,但另一种解决方法是从每个 FBSDK*Kit.framework 包中手动删除模块映射;例如,rm -r ~/Documents/FacebookSDK/FBSDKCoreKit.framework/Modules/(对于 FBSDKLoginKit 和 FBSDKShareKit 重复)

据我所知,我们有两种方法可以解决这个问题:

    如 Chris 所说,移除所有模块映射。 在 Bolts.framework 文件夹(在 FacebookSDK 文件夹中)添加一个临时(非官方)缺失的模块映射文件。您应该检查此文件夹是否丢失。

【讨论】:

SDK 4.1 已修复此问题! @TrinhNgocThuyen 你确定它是固定的吗?我在 4.6 中遇到了这个问题 @DevC 我在 4.6 中也遇到了同样的问题......这里的答案似乎都没有为我解决这个问题。你有没有让它发挥作用?【参考方案10】:

我应该将您定向到分配给 Facebook 的当前未解决问题:https://developers.facebook.com/bugs/362995353893156/。这里没有一个答案对我有帮助,所以我假设我们只是坐着鸭子:

截至撰写本文时,来自 Facebook 的消息 Chris Pan:

“4.0.1 版本添加了模块映射(这应该消除了对桥接头的需要),但看起来这可能导致了一些其他兼容性问题。我们正在努力进行适当的修复,但另一个解决方法是删除模块从每个 FBSDK*Kit.framework 包手动映射;例如,rm -r ~/Documents/FacebookSDK/FBSDKCoreKit.framework/Modules/(对于 FBSDKLoginKit 和 FBSDKShareKit 重复)"

Kosala Ubayasekara 让它工作了,但由于这是一个悬而未决的问题,您可能只想等到官方修复明确:

    在 Apple LLVM 模块下的构建设置中:

      将“允许框架模块中的非模块化包含”设置设置为“否” 启用模块(C 和目标 C)到 NO。

    创建一个桥接头以包含 Facebook SDK 标头

    构建设置中的链接桥接头:Swift 编译器 - 代码生成。 将 FBSDKCoreKit 导入您的 App Delegate 文件并按照FB documentation 实现核心 Facebook SDK 要求

【讨论】:

@Joker 我包含了来自 Facebook 的答案。【参考方案11】:

我也遇到过同样的问题。问题是我的项目目录包含名为“Application Demo”的空间。这就是为什么每当我拖动 Facebook 框架时,它都会在设置中的框架搜索路径中添加空间。删除这个空格解决了这个问题。

【讨论】:

哇,同样的事情发生在我身上。对此有什么解释吗?【参考方案12】:

对于 Objective-C 我使用了 Paul Lehn 的回答: https://developers.facebook.com/bugs/362995353893156/

    将 -ObjC 标志添加到项目的 Other Linker Flags 构建设置中。 (如果您不想添加到项目配置中,用于初始化按钮类) “在构建设置中允许非模块化包含在框架模块中”设置为“是” 将“启用模块”(c 和 Objective-C)设置为否

(也不要忘记添加框架,对我来说是: “地址簿” “石英芯” “核心位置” “核心图形” 如果仍然没有添加,也 “UIKit” “基础” “核心数据”)

它终于对我有用了

所有这些都用于在我的项目文件夹中的自定义文件夹中链接 FBSDK 不是来自 ~/Documents/FacebookSDK

【讨论】:

【参考方案13】:

您可能正在将 Facebook SDK 附带的“Samples”文件夹导入您的项目。从您的项目中删除对这些文件的引用,它应该可以工作。无需更改构建设置上的标志。

【讨论】:

【参考方案14】:

FBSDKCoreKit 无法构建,因为 FBSDKAppLinkResolver.h 头文件中出现“include of non-modular header inside framework module”错误:在#import &lt;Bolts/BFAppLinkResolving.h&gt; 行中。

Swift compiler error: "non-modular header inside framework module" 的解决方案(切换 CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES)对我没有帮助。

我的解决方案:

    在 Bolts.framework 文件中创建模块映射:Modules/module.modulemap(如在 FBSDKCoreKit.framework 中)

    把这样的代码放进去

    framework module Bolts 
    umbrella header "Bolts.h"
    
    export *
    module *  export * 
    
    
    explicit module BFAppLinkResolver 
        header "BFAppLinkResolver.h"
        link "BFAppLinkResolver"
        export *
    
    

有趣的是,FBSDKCoreKit 中这样的方案是由 Facebook 实现的,为什么他们不将其应用到 Bolts 中...

【讨论】:

是的,你为我节省了一个小时的挠头时间——谢谢:D 这比更改构建设置要好 “在 bolts 框架中创建”是什么意思 - 你的意思是在 bolts framework.framework 中添加一个标题? 谁能解释一下如何执行此步骤。 “在 Bolts.framework 文件中创建模块映射:Modules/module.modulemap”。将不胜感激。【参考方案15】:

也遇到了这个问题,需要设置

Enable Modules (C and Objective-C)

【讨论】:

【参考方案16】:

不确定它是否有副作用,但在构建设置中将“允许框架模块中的非模块化包含”设置为“是”解决了我的问题。希望它也对你有用。

【讨论】:

我已经尝试过了,但仍然收到“包含非模块化标头”错误。这是你唯一改变的吗? 是的,但我不确定它为什么会起作用。我尝试了其中一个示例项目,并将设置设置为 NO。 @vladiMilk 我正在使用 pod 来集成 fb,所有建议的解决方案都不适合我,请尽快帮助我。

以上是关于FBSDKCoreKit 的 Facebook iOS8 SDK 构建模块错误的主要内容,如果未能解决你的问题,请参考以下文章

找不到模块 FBSDKCoreKit Cocoapods

FBSDKCoreKit/FBSDKCoreKit.h 未找到错误

FBSDKCoreKit/FBSDKCoreKit.h 未找到错误

Facebook 应用链接问题

快速设置facebook登录

FBSDKCoreKit 框架,在 xCode 7 协议 FBSDKApplicationDelegate 无法识别