2015-04-03 124 views
43

我试图在Xcode中将Facebook SDK添加到我的iOS 8 Objective-C应用程序中。我根据FB-dev指令进行了安装。但是,我收到一个“无法生成模块'FBSDKCoreKit'”错误时,我将标题添加到我的AppDelegate.m文件。FBSDKCoreKit的Facebook iOS8 SDK构建模块错误

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

根据我读其他地方

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

我很难过。

+0

这些答案都不适合我。矿是与旧Bolts.framework碰撞。 http://stackoverflow.com/a/33114309/3324388 – Aggressor

回答

39

不知道是否有副作用,但设置了“允许非模块化的框架模块包括”设置为YES在生成设置解决了这个问题对我来说。希望它也适用于你。

+0

我试过这个,但仍然得到“包含非模块化标题”错误。那是你唯一改变的东西吗? – TIMEX

+0

是的,但我不确定它为什么起作用。我尝试了一个示例项目,并将其设置为NO。 – vlad

+0

好帖子适合我 – Girish

3

得到这个问题也一样,你需要设置

Enable Modules (C and Objective-C) 

NO

47

FBSDKCoreKit不能由于建“包括框架模块内部非模块式头座的”在FBSDKAppLinkResolver.h头文件的错误:在#import <Bolts/BFAppLinkResolving.h>线。

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

我的解决办法:

  1. 创建Bolts.framework文件模块图:模块/ 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的实现,他们为什么不申请入螺栓...

+0

这个答案是为我做的伎俩。 – Gabriel

+0

工程就像一个魅力! – nonamelive

+0

谢谢。最后得到你的解决方案,它在这里工作正常。 –

0

你可能导入随Facebook的SDK到您的项目“样本”文件夹中。从项目中删除这些文件的引用,它应该工作。无需更改您的构建设置标志。

11

对于Objective-C的 我用保罗莱恩回答: https://developers.facebook.com/bugs/362995353893156/

  1. 的-ObjC标记添加到项目中的其他链接器标记构建设置。(如果你不想添加到项目配置,初始化按钮类)
  2. “允许非模块化包含在框架模块”设置为YES在生成设置
  3. 设置“启用模块”(c和Objective-C )为无

(也不要忘了添加框架,对我来说是: “AdressBook” “QuartzCore” “CoreLocation” “CoreGraphics在” ,如果还没有加入,也 “UIKit” “基金会” “CoreData”)

及其终于为我工作

所有这些用于链接FBSDK在自定义文件夹在我的项目文件夹〜/文档/ FacebookSDK

+0

为我工作...酷(y) – good4pc

1

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

+0

哇,对我来说发生同样的事情。这有什么解释吗? – XcodeNOOB

0

我应该引导你分配给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. 在对苹果LLVM模块构建设置:

    1. 设置允许非模块化包含在框架模块中“设置为NO
    2. 使模块(C和Objective C)为NO。
  2. 创建一个桥接报头包括了Facebook SDK头

  3. 链接桥接在构建设置标题:斯威夫特编译器 - 代码生成。
  4. 导入FBSDKCoreKit到应用程序委托文件和实施Facebook核心SDK要求每FB documentation
+0

这不提供问题的答案。要批评或要求作者澄清,请在其帖子下方留言。 –

+0

@Joker我包括Facebook的答案。 –

+0

@three_pineapples^ –

9

从克里斯·潘(脸谱队): https://developers.facebook.com/bugs/362995353893156/

4.0。1发布增加了模块映射(应该避免了桥接头的需求),但看起来这可能导致了一些其他的兼容性问题。我们正在进行适当的修复,但另一个解决方法是从每个FBSDK * Kit.framework软件包中手动删除模块映射;例如,rm -r ~/Documents/FacebookSDK/FBSDKCoreKit.framework/Modules/(再次为FBSDKLoginKit和FBSDKShareKit)

据我所知,我们有2个选项来解决这个问题:

  1. 删除所有模块的地图克里斯说。
  2. 在Bolts.framework文件夹(在FacebookSDK文件夹中)中添加一个临时(非正式)缺失的模块映射文件。你应该检查这个文件夹是否丢失。
+0

它为我工作,谢谢! –

+0

此问题已在SDK 4.1中修复! –

+0

@TrinhNgocThuyen你确定它是固定的?我遇到这个问题4.6 – DevC

9

删除模块来自FacebookCoreKit.framwork的目录。

enter image description here

+1

好)现在愚蠢的fb框架开始工作 – LightNight

+0

感谢和快乐编码LightNight。 –

+1

其实只有为我工作的解决方案。 – Makalele

14

只是在做下面就让我来成功地构建应用程序。

在Build设置设置“允许非模块化包括框架模块”标志YES

我不想设置“启用模块”(c和Objective- C)到NO

enter image description here

+1

我只需要做:将“允许非模块化包含在框架模块”标志设置为YES才能正常工作 –

+0

当我设置启用模块= NO时,我正面临另一个库中的问题。和Facebook问题修复,但在另一个图书馆出现错误。请帮助我 –

+0

这是什么库? –

0

同样的问题与我同在。 ... 非上述解决方案适用于我.. 我设置了。模块,旗帜和其他东西......但没有任何帮助。

但对我来说这个问题是由

MOVE解决您的框架文件夹后,或在哪里.PCH文件位于该文件夹。

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

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

可能相同可以帮助任何人有同样的问题。

6

如果您有“FBSDKCoreKit”问题你可以试试下面的解决方案:

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

    “允许非模块化包含在框架模块中“标记为是

enter image description here

  • 转到文档和/或文件夹FacebookSDK

    然后转到FBSDKCoreKit.framework

    在该文件夹中删除模块文件夹。 然后在您的项目中添加FacebookSDK库。

  • 设置为框架搜索路径“〜/文档/ FacebookSDK”

    步骤查找框架搜索路径

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

    然后添加 “〜/文档/ FacebookSDK”

  • enter image description here

    编辑:

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

    enter image description here

    这将解决您的问题

    +0

    做到了这一切 - 仍然没有运气。在使用api和快速项目时,我只会遇到这个问题。脸书示例应用程序工作正常... –

    +0

    @ArEsiiX我已更新我的答案,我希望这对你有用。 – ABS

    0

    TL; DR在你的项目中删除您Bolts.framework参考。

    这些或任何其他答案都不适用于我(在我的情况)。对于我的项目,我们从旧的Facebook SDK切换到Bolts.framework。

    阅读该文档

    SDK会自动加载它的框架和资源依赖性。

    因此,我认为这是一场冲突。之前有过Bolts.framework,之后是我下载新的FacebookSDK包(本例中为4.7)时出现的新包。

    删除我的Bolts.framework可以解决问题(确保在重建前清理)。

    0

    我得到了同样的问题,我用的是最新的Facebook SDK上的Xcode 6.4(FacebookSDKs-IOS-20160316),它始终使我这个错误,每当我把下面的代码在我AppDelegate.m文件: #import <FBSDKCoreKit/FBSDKCoreKit.h>

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

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

    希望这会有所帮助!

    0

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

    这正是我想在我的银行代码

    import FBSDKCoreKit 
    
    class SomeClass { 
    
        func doSomething { 
        FBSDKAppEvents.logEvent("Some Event") 
        } 
    } 
    

    但是,编译器抱怨说,它无法编译模块等

    我如何解决它

    • 从我的Swift代码中删除import FBSDKCoreKit
    • 编辑了一​​和进口FBSDKCoreKit有:#import <FBSDKCoreKit/FBSDKCoreKit.h>
    0

    确保你还进口螺栓框架,这为我工作。