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> 

根据我在别处读到的内容

  1. 我已经清理了构build并重新安装了Xcode。
  2. 我也重新安装了Facebook SDK安装程序,并试图将其添加到一个空白的项目(万一有什么损坏我的应用程序)。
  3. 我已经在指令中检查了plist和框架文件FB列表,但没有看到任何东西丢失。

我很难过

在FBSDKAppLinkResolver.h头文件中: #import <Bolts/BFAppLinkResolving.h>行中的FBSDKCoreKit不能被build立,因为在FBSDKAppLinkResolver.h头文件中包含“非模块化头文件在框架模块中 ”错误。

从Swift编译器的错误解决scheme:“框架模块内的非模块头” (切换CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES)没有帮助我。

我的解决scheme

  1. 在Bolts.framework文件模块映射中创build: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这样的scheme是由Facebook实现的,为什么他们不应用到Bolts …

不知道是否有副作用,但在“构build”设置中将“允许非模块化包含在框架模块”设置为YES解决了我的问题。 希望它也适用于你。

只要做到以下让我成功地build立应用程序。

在“生成”设置中将“允许非模块化包含在框架模块”标志设置为YES

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

在这里输入图像说明

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

  1. 将-ObjC标志添加到项目的其他链接器标志构build设置。 (如果你不想添加到项目configuration,初始化button类)
  2. “生成设置”中的“允许框架模块中的非模块化包含”设置为“是”
  3. 将“启用模块”(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来处理这个问题:

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

从FacebookCoreKit.framwork删除模块目录。

在这里输入图像说明

如果你有'FBSDKCoreKit'的问题你可以试试下面的解决scheme:

  1. 转到build立设置和search“允许非模块化”和设置

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

在这里输入图像说明

  1. 转到文档/ FacebookSDK文件夹

    然后转到FBSDKCoreKit.framework

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

  2. 将框架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明确之后:

  1. 在Apple LLVM模块下的“生成设置”中:

    1. 设置允许非模块化包含在框架模块“设置为NO
    2. 启用模块(C和Objective C)为NO。
  2. 创build一个桥接头来包含Facebook SDK头

  3. 在构build设置中链接桥接头:Swift编译器 – 代码生成。
  4. 将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.hFBSDKCoreKit那里导入了FBSDKCoreKit#import <FBSDKCoreKit/FBSDKCoreKit.h>

确保你也导入了Bolts框架,这对我有用。