【问题标题】:Facebook iOS8 SDK build module error for FBSDKCoreKitFBSDKCoreKit 的 Facebook iOS8 SDK 构建模块错误
【发布时间】: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>

根据我在别处读到的内容

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

我被难住了。

【问题讨论】:

标签: objective-c ios8 facebook-ios-sdk


【解决方案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' 问题,您可以尝试以下解决方案:

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

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

          1. 转到 Document/FacebookSDK 文件夹

            然后转到 FBSDKCoreKit.framework

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

          2. 将框架搜索路径设置为“~/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 重复)

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

              1. 如 Chris 所说,移除所有模块映射。
              2. 在 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 让它工作了,但由于这是一个悬而未决的问题,您可能只想等到官方修复明确:

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

                1. 将“允许框架模块中的非模块化包含”设置设置为“否”
                2. 启用模块(C 和目标 C)到 NO。
              2. 创建一个桥接头以包含 Facebook SDK 标头

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

              【讨论】:

              • @Joker 我包含了来自 Facebook 的答案。
              【解决方案11】:

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

              【讨论】:

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

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

              1. 将 -ObjC 标志添加到项目的 Other Linker Flags 构建设置中。 (如果您不想添加到项目配置中,用于初始化按钮类)
              2. “在构建设置中允许非模块化包含在框架模块中”设置为“是”
              3. 将“启用模块”(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)对我没有帮助。

                  我的解决方案:

                  1. 在 Bolts.framework 文件中创建模块映射:Modules/module.modulemap(如在 FBSDKCoreKit.framework 中)
                  2. 把这样的代码放进去

                    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,所有建议的解决方案都不适合我,请尽快帮助我。
                    猜你喜欢
                    • 2020-10-10
                    • 1970-01-01
                    • 2016-04-06
                    • 2017-10-26
                    • 2015-06-10
                    • 2015-11-12
                    • 1970-01-01
                    • 1970-01-01
                    • 2019-02-21
                    相关资源
                    最近更新 更多