Facebook iOS8 SDK为FBSDKCoreKit构build模块错误
我正在尝试将Facebook SDK添加到Xcode中的iOS 8 Objective-C应用程序中。 我根据FB-dev指令进行了安装。 但是,当我将标题添加到我的AppDelegate.m文件时,出现“Could not build module'FBSDKCoreKit'”错误。
#import "AppDelegate.h" #import <FBSDKCoreKit/FBSDKCoreKit.h>
根据我在别处读到的内容
- 我已经清理了构build并重新安装了Xcode。
- 我也重新安装了Facebook SDK安装程序,并试图将其添加到一个空白的项目(万一有什么损坏我的应用程序)。
- 我已经在指令中检查了plist和框架文件FB列表,但没有看到任何东西丢失。
我很难过
在FBSDKAppLinkResolver.h头文件中: #import <Bolts/BFAppLinkResolving.h>
行中的FBSDKCoreKit不能被build立,因为在FBSDKAppLinkResolver.h头文件中包含“非模块化头文件在框架模块中 ”错误。
从Swift编译器的错误解决scheme:“框架模块内的非模块头” (切换CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES)没有帮助我。
我的解决scheme
- 在Bolts.framework文件模块映射中创build: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这样的scheme是由Facebook实现的,为什么他们不应用到Bolts …
不知道是否有副作用,但在“构build”设置中将“允许非模块化包含在框架模块”设置为YES解决了我的问题。 希望它也适用于你。
只要做到以下让我成功地build立应用程序。
在“生成”设置中将“允许非模块化包含在框架模块”标志设置为YES
我不想将“启用模块” (c和Objective-C)设置为NO
对于Objective-C,我使用Paul Lehn的答案: https : //developers.facebook.com/bugs/362995353893156/
- 将-ObjC标志添加到项目的其他链接器标志构build设置。 (如果你不想添加到项目configuration,初始化button类)
- “生成设置”中的“允许框架模块中的非模块化包含”设置为“是”
- 将“启用模块”(c和Objective-C)设置为No
(也不要忘记添加框架,对我来说是“AdressBook”“QuartzCore”“CoreLocation”“CoreGraphics”,如果还没有添加,也是“UIKit”“Foundation”“CoreData”)
它终于为我工作
所有这些用于我的项目文件夹中的自定义文件夹中的链接FBSDK 不是从 〜/ Documents / FacebookSDK
来自Chris Pan(Facebook团队): https : //developers.facebook.com/bugs/362995353893156/
4.0.1版本添加了模块映射(应该避免了桥接头的需求),但看起来可能导致了一些其他的兼容性问题。 我们正在做一个适当的修复,但另一个解决方法是从每个FBSDK * Kit.framework包中手动删除模块映射; 例如,
rm -r ~/Documents/FacebookSDK/FBSDKCoreKit.framework/Modules/
(并重复FBSDKLoginKit和FBSDKShareKit)
据我所知,我们有两个select来处理这个问题:
- 克里斯说,删除所有的模块地图。
- 在Bolts.framework文件夹(在FacebookSDK文件夹中)中添加一个临时(非正式)缺失的模块映射文件。 你应该检查这个文件夹是否丢失。
从FacebookCoreKit.framwork删除模块目录。
如果你有'FBSDKCoreKit'的问题你可以试试下面的解决scheme:
-
转到build立设置和search“允许非模块化”和设置
“允许框架模块中的非模块化包含”标志为YES
-
转到文档/ FacebookSDK文件夹
然后转到FBSDKCoreKit.framework
在此文件夹中删除模块文件夹。 然后在您的项目中添加FacebookSDK库。
-
将框架searchpath设置为“〜/ Documents / FacebookSDK”
find框架searchpath的步骤
转到构build项目的设置并search“框架searchpath”。
然后添加“〜/ Documents / FacebookSDK”
编辑:
请在Facebook应用程序中打开框架searchpath,并复制粘贴到您的应用程序的所有path。类似于我已经附加在下面的屏幕截图
这将解决您的问题
也有这个问题,你需要设置
Enable Modules (C and Objective-C)
到NO 。
我面临同样的问题。 问题是我的项目目录中包含名为“Application Demo”的空间。 这就是为什么每当我拖动Facebook框架,然后在设置框架searchpath中添加空间。 删除这个空间解决了这个问题。
您可能将Facebook SDK附带的“Samples”文件夹导入到您的项目中。 从你的项目中删除这些文件的引用,它应该工作。 无需更改您的构build设置上的标志。
我应该引导你分配给Facebook的这个当前未决问题: https : //developers.facebook.com/bugs/362995353893156/ 。 这里没有答案帮助我,所以我假设我们只是坐鸭子:
截至撰写本文时,来自Facebook的Chris Pan的消息:
“4.0.1版本添加了模块映射(应该避免了桥接标头的需求),但看起来这可能导致了一些其他的兼容性问题。我们正在进行一个适当的修复,但另一个解决方法是删除模块映射从每个FBSDK * Kit.framework包中手动获取;例如, rm -r ~/Documents/FacebookSDK/FBSDKCoreKit.framework/Modules/
-r〜 rm -r ~/Documents/FacebookSDK/FBSDKCoreKit.framework/Modules/
(以及重复用于FBSDKLoginKit和FBSDKShareKit)“
Kosala Ubayasekara已经开始工作了,但是由于这是一个悬而未决的问题,你可能只想等到正式的解决scheme明确之后:
-
在Apple LLVM模块下的“生成设置”中:
- 设置允许非模块化包含在框架模块“设置为NO
- 启用模块(C和Objective C)为NO。
-
创build一个桥接头来包含Facebook SDK头
- 在构build设置中链接桥接头:Swift编译器 – 代码生成。
- 将FBSDKCoreKit导入您的应用程序委托文件,并根据FB文档实现核心Facebook SDK要求
同样的问题在我身上。 …非上述解决scheme为我工作..我设置。 模块,旗帜和其他东西也…但没有什么帮助。
但对我来说,这个问题是通过解决
将您的框架文件夹移动到.pch文件所在的文件夹之后或之后。
当我的框架文件夹@ myapp/{frameworkFolder}/fbframeworks.
这是显示问题。
我将它移动到myapp/myapp/modal/{fbframework}/.
那么这个问题就解决了。 (我的.pch文件位于myapp / myapp。)
可能是一样的可以帮助任何人有同样的问题。
TL; DR删除您项目中的Bolts.framework参考。
这些或任何其他答案都没有为我工作(在我的情况)。 对于我的项目,我们从旧的Facebook SDK切换,我们有一个Bolts.framework。
阅读文档
SDK自动加载其框架和资源依赖关系。
因此,我认为这是一场冲突。 之前有过Bolts.framework,之后是我下载新的FacebookSDK包(本例中为4.7)的新包。
删除我的Bolts.framework解决了这个问题(确保在重build之前清理)。
我遇到了同样的问题,我在Xcode 6.4上使用了最新的Facebook SDK(FacebookSDKs-iOS-20160316),只要我把下面的代码放到我的AppDelegate.m
文件中就会一直给我这个错误: #import <FBSDKCoreKit/FBSDKCoreKit.h>
当我切换到Xcode 7.2,问题解决了,错误消失了。 猜猜这可能是版本兼容的问题
如果你面对同样的问题,你可以尝试使用Xcode 7.2来构build它。 问题是Xcod 6.4可能永远不能使用,只要你保持你的项目Facebook的SDK。
希望这可以帮助!
对于那些来到这里,像我一样犯了同样的菜鸟错误的人。 也许我可以节省一些时间。 我在一个主要由Objective-C代码组成的旧项目上工作。 我们试图在Swift中实现新的东西。
这是我在我的Swift代码中尝试的
import FBSDKCoreKit class SomeClass { func doSomething { FBSDKAppEvents.logEvent("Some Event") } }
但编译器抱怨说无法编译模块等
我是如何解决它的
- 从我的Swift代码中删除
import FBSDKCoreKit
。 - 编辑我们的
Bridging-Header.h
并FBSDKCoreKit
那里导入了FBSDKCoreKit
:#import <FBSDKCoreKit/FBSDKCoreKit.h>
确保你也导入了Bolts框架,这对我有用。