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 <FBSDKCoreKit/FBSDKCoreKit.h>
【讨论】:
【参考方案3】:我遇到了同样的问题,我在 Xcode 6.4 上使用了最新的 Facebook SDK (FacebookSDKs-iOS-20160316),每当我将以下代码放入我的 AppDelegate.m
文件时,它都会一直给我这个错误:
#import <FBSDKCoreKit/FBSDKCoreKit.h>
当我切换到 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从 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 <Bolts/BFAppLinkResolving.h>
行中。
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/FBSDKCoreKit.h 未找到错误