FBSDKCoreKit的Facebook iOS8 SDK构建模块错误

时间:2015-04-03 15:45:45

标签: objective-c ios8 facebook-ios-sdk

我正在尝试将Facebook SDK添加到Xcode中的iOS 8 Objective-C应用程序中。我按照FB-dev说明进行了安装。但是,当我将标头添加到AppDelegate.m文件时,我收到"无法构建模块' FBSDKCoreKit'" 错误。

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

基于我在别处读到的内容

  1. 我已经清理了构建并重新安装了Xcode。
  2. 我还重新安装了Facebook SDK安装程序,并尝试将其添加到空白项目中(以防我的应用程序出现损坏的情况)。
  3. 我在说明书中仔细检查了plist和框架文件FB列表,但似乎没有任何遗漏。
  4. 我很难过。

16 个答案:

答案 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)对我没有帮助。

我的解决方案:

  1. 在Bolts.framework文件模块映射中创建: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 *
    }}
    
  3. 有趣的事实是,在FBSDKCoreKit这样的方案是由Facebook实现的,为什么他们没有将它应用到Bolts ......

答案 1 :(得分:39)

不确定它是否有副作用,但在框架模块中设置&#34;允许非模块化包含&#34;在Build settings中设置为YES解决了我的问题。希望它也适合你。

答案 2 :(得分:14)

只需执行以下操作即可成功构建应用程序。

  

在构建设置中设置“允许框架模块中的非模块化包含”标记为

     

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

enter image description here

答案 3 :(得分:11)

对于Objective-C 我用Paul Lehn回答: https://developers.facebook.com/bugs/362995353893156/

  
      
  1. 将-ObjC标志添加到项目的其他链接器标志构建设置中。 (如果你不想添加项目配置,初始化按钮类)
  2.   
  3. &#34;允许框架模块中的非模块化包含&#34;在构建设置中设置为YES
  4.   
  5. 设置&#34;启用模块&#34; (c和Objective-C)至否
  6.   

(也不要忘记添加框架,对我而言: &#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中删除模块目录。

enter image description here

答案 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)

据我所知,我们有两种方法可以解决这个问题:

  1. 删除所有模块地图,如Chris所说。
  2. 在Bolts.framework文件夹(在FacebookSDK文件夹中)中添加临时(非官方)缺失模块映射文件。您应该检查是否缺少此文件夹。

答案 6 :(得分:8)

如果您遇到&#39; FBSDKCoreKit&#39; 的问题,可以尝试以下解决方案:

  1. 转到构建设置并搜索&#34;允许非模块化&#34; 和设置

    &#34;允许框架模块中的非模块化包含&#34;标记为是

  2. enter image description here

    1. 转到Document / FacebookSDK文件夹

      然后转到FBSDKCoreKit.framework

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

    2. 将框架搜索路径设置为&#34;〜/ Documents / FacebookSDK&#34;

      查找框架搜索路径的步骤

      转到项目的构建设置并搜索&#34;框架搜索路径&#34;。

      然后添加&#34;〜/ Documents / FacebookSDK&#34;

    3. enter image description here

      修改

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

      enter image description here

      这将解决您的问题

答案 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让它发挥作用,但由于这是一个未解决的问题,您可能只想等到官方解决方案明确:

  1. 在Apple LLVM模块下的构建设置中:

    1. 在框架模块中设置允许非模块化包含&#34;设为NO
    2. 启用模块(C和目标C)为NO。
  2. 创建桥接标头以包含Facebook SDK标头

  3. 构建设置中的链接桥接头:Swift编译器 - 代码生成。
  4. 将FBSDKCoreKit导入您的App Delegate文件,并根据FB documentation
  5. 实施核心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")
  }
}

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

我是如何解决的

  • 从我的Swift代码中删除import FBSDKCoreKit
  • 编辑了我们的Bridging-Header.h并导入了FBSDKCoreKit#import <FBSDKCoreKit/FBSDKCoreKit.h>

答案 15 :(得分:0)

确保您还导入了Bolts框架,这对我有用。