我正在尝试将Facebook SDK添加到Xcode中的iOS 8 Objective-C应用程序中。我按照FB-dev说明进行了安装。但是,当我将标头添加到AppDelegate.m文件时,我收到"无法构建模块' FBSDKCoreKit'" 错误。
#import "AppDelegate.h"
#import <FBSDKCoreKit/FBSDKCoreKit.h>
基于我在别处读到的内容
我很难过。
答案 0 :(得分:47)
FBSDKCoreKit无法构建,因为&#34; 包含框架模块内的非模块化标头&#34; FBSDKAppLinkResolver.h头文件中的错误:在#import <Bolts/BFAppLinkResolving.h>
行。
来自Swift compiler error: "non-modular header inside framework module"的解决方案(切换CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES)对我没有帮助。
我的解决方案:
将此类代码放入
framework module Bolts {
umbrella header "Bolts.h"
export *
module * { export * }
explicit module BFAppLinkResolver {
header "BFAppLinkResolver.h"
link "BFAppLinkResolver"
export *
}}
有趣的事实是,在FBSDKCoreKit这样的方案是由Facebook实现的,为什么他们没有将它应用到Bolts ......
答案 1 :(得分:39)
不确定它是否有副作用,但在框架模块中设置&#34;允许非模块化包含&#34;在Build settings中设置为YES解决了我的问题。希望它也适合你。
答案 2 :(得分:14)
只需执行以下操作即可成功构建应用程序。
在构建设置中设置“允许框架模块中的非模块化包含”标记为是
我不想将“启用模块”(c和Objective-C)设置为否
答案 3 :(得分:11)
对于Objective-C 我用Paul Lehn回答: https://developers.facebook.com/bugs/362995353893156/
- 将-ObjC标志添加到项目的其他链接器标志构建设置中。 (如果你不想添加项目配置,初始化按钮类)
- &#34;允许框架模块中的非模块化包含&#34;在构建设置中设置为YES
- 设置&#34;启用模块&#34; (c和Objective-C)至否
醇>
(也不要忘记添加框架,对我而言: &#34; AdressBook&#34; &#34; QuartzCore&#34; &#34; CoreLocation&#34; &#34; CoreGraphics在&#34; 如果还没有添加,也 &#34; UIKit的&#34; &#34;基金会&#34; &#34; CoreData&#34)
它终于为我工作了
所有这些都用于项目文件夹中的自定义文件夹中的链接FBSDK 〜/ Documents / FacebookSDK
答案 4 :(得分:10)
从Facebook CoreKit.framework中删除模块目录。
答案 5 :(得分: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)
据我所知,我们有两种方法可以解决这个问题:
答案 6 :(得分:8)
如果您遇到&#39; FBSDKCoreKit&#39; 的问题,可以尝试以下解决方案:
转到构建设置并搜索&#34;允许非模块化&#34; 和设置
&#34;允许框架模块中的非模块化包含&#34;标记为是
转到Document / FacebookSDK文件夹
然后转到FBSDKCoreKit.framework
在此文件夹中删除模块文件夹。 然后在项目中添加FacebookSDK库。
将框架搜索路径设置为&#34;〜/ Documents / FacebookSDK&#34;
查找框架搜索路径的步骤
转到项目的构建设置并搜索&#34;框架搜索路径&#34;。
然后添加&#34;〜/ Documents / FacebookSDK&#34;
修改强>
请在Facebook应用中打开框架搜索路径并复制粘贴您应用程序中提到的所有路径。类似于我在下面的屏幕截图中附加的路径
这将解决您的问题
答案 7 :(得分:3)
也遇到了这个问题,你需要设置
Enable Modules (C and Objective-C)
到否。
答案 8 :(得分:1)
我遇到了同样的问题。问题是我的项目目录中包含名称&#34; Application Demo&#34;中的空格。这就是为什么每当我拖动Facebook框架时,它都会在设置中的框架搜索路径中添加空间。删除此空间解决了问题。
答案 9 :(得分:1)
TL; DR 删除项目中的Bolts.framework引用。
这些或任何其他答案都不适用于我(在我的情况下)。对于我的项目,我们从旧的Facebook sdk切换,我们有一个Bolts.framework。
阅读文档
SDK会自动加载其框架和资源依赖关系。
因此我认为发生了碰撞。我之前有过Bolts.framework,然后是我下载新的FacebookSDK捆绑包时出现的新版本(在这种情况下为4.7)。
删除我的Bolts.framework可以解决问题(确保在重建之前清理)。
答案 10 :(得分:0)
您可能正在导入&#34;样本&#34; Facebook的SDK附带到您项目中的文件夹。从项目中删除对这些文件的引用,它应该工作。无需更改构建设置上的标记。
答案 11 :(得分:0)
我应该指导您分配给Facebook的当前公开问题:https://developers.facebook.com/bugs/362995353893156/。这里的答案都没有帮助我,所以我假设我们只是坐在鸭子旁边:
截至撰写本文时,来自Facebook的消息Chris Pan:
&#34; 4.0.1版本添加了模块映射(应该已经避免了桥接头的需要)但看起来可能会导致一些其他兼容性问题。我们正在进行适当的修复,但另一种解决方法是从每个FBSDK * Kit.framework包中手动删除模块映射;例如,rm -r ~/Documents/FacebookSDK/FBSDKCoreKit.framework/Modules/
(并重复FBSDKLoginKit和FBSDKShareKit)&#34;
Kosala Ubayasekara让它发挥作用,但由于这是一个未解决的问题,您可能只想等到官方解决方案明确:
在Apple LLVM模块下的构建设置中:
创建桥接标头以包含Facebook SDK标头
答案 12 :(得分:0)
同样的问题与我有关。 ... 以上解决方案不适用于我.. 我设置 。模块,旗帜和其他东西也......但没有任何帮助。
但对我来说,这个问题已经解决了
移动您的框架文件夹AFTER或在.pch文件所在的文件夹中。
当我的框架文件夹
@ myapp/{frameworkFolder}/fbframeworks.
它显示出问题。
我将其移至myapp/myapp/modal/{fbframework}/.
然后这个问题就解决了。 (我的.pch文件位于myapp / myapp。)
可能对同样问题的任何人都有帮助。
答案 13 :(得分:0)
我遇到了同样的问题,我在Xcode 6.4上使用了最新的Facebook SDK(FacebookSDKs-iOS-20160316),每当我在我的AppDelegate.m
文件中放入以下代码时,它一直给我这个错误:
#import <FBSDKCoreKit/FBSDKCoreKit.h>
当我切换到Xcode 7.2时,问题解决了,错误消失了。猜猜这可能是版本兼容的问题
如果您遇到同样的问题,可以尝试使用Xcode 7.2来构建它。问题是只要你将Facebook sdk保留在你的项目中,Xcod 6.4就永远无法使用。
希望这有帮助!
答案 14 :(得分:0)
对于那些来到这里并像我一样犯了同样的菜鸟错误的人。也许我可以节省你一些时间。我从事一个主要由Objective-C代码组成的旧项目。我们尝试在Swift中实现新东西。
这是我在Swift代码中尝试的内容
import FBSDKCoreKit
class SomeClass {
func doSomething {
FBSDKAppEvents.logEvent("Some Event")
}
}
但是编译器抱怨它无法编译模块等。
我是如何解决的
import FBSDKCoreKit
。Bridging-Header.h
并导入了FBSDKCoreKit
:#import <FBSDKCoreKit/FBSDKCoreKit.h>
答案 15 :(得分:0)
确保您还导入了Bolts框架,这对我有用。