Ошибка модуля сборки iOS8 для Facebook для FBSDKCoreKit

Я пытаюсь добавить SDK для Facebook в приложение iOS 8 Objective-C в Xcode. Я сделал установку в соответствии с инструкциями FB-dev. Тем не менее, я получаю "Не удалось создать ошибку модуля FBSDKCoreKit" при добавлении заголовка в файл AppDelegate.m.

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

Основываясь на том, что я читал в другом месте

  • Я уже очистил сборку и переустановил Xcode.
  • Я также заново установил установщик Facebook SDK и попытался добавить его в пустой проект (в случае с моим приложением что-то испорченное).
  • Я дважды проверил plist и файлы FB файлов фреймов в инструкциях, но ничего не показалось пропавшим.

Я в тупике.

Ответ 1

FBSDKCoreKit не может быть создан из-за ошибки "включить немодульный заголовок внутри фрейм-модуля" в файле заголовка FBSDKAppLinkResolver.h: в строке #import <Bolts/BFAppLinkResolving.h>.

Решение Ошибка компилятора Swift: "немодульный заголовок внутри фрейм-модуля" (переключение CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES) не помогло мне.

Мое решение:

  • Создать в карте модулей файлов Bolts.framework: Модули /module.modulemap(как в FBSDKCoreKit.framework)
  • Поместите такой код внутри

    framework module Bolts {
    umbrella header "Bolts.h"
    
    export *
    module * { export * }
    
    
    explicit module BFAppLinkResolver {
        header "BFAppLinkResolver.h"
        link "BFAppLinkResolver"
        export *
    }}
    

Интересным фактом является то, что в FBSDKCoreKit такая схема реализована Facebook, почему они не применили ее в Bolts...

Ответ 2

Не уверен, что у него есть побочные эффекты, но установка параметра "Разрешить немодульные включения в модульные модули" в значение "Да" в настройках "Сборка" решила проблему для меня. Надеюсь, это сработает и для вас.

Ответ 3

Просто сделав следующее, позвольте мне создать приложение успешно.

В настройках сборки Установите "Разрешить немодульное включение в рамки модуля" флаг ДА

И я не хотел устанавливать "Включить модули" (c и Objective-C) на НЕТ

enter image description here

Ответ 4

Для Objective-C Я использовал Пол Лен ответ: https://developers.facebook.com/bugs/362995353893156/

  • Добавьте в проект флаг -ObjC. Другие настройки сборки флагов компоновщика. (если вы не хотите добавлять конфигурацию проекта, для классов кнопок инициализации)
  • "Разрешить немодульное включение в модульные модули", чтобы установить YES в настройках сборки
  • Установите "Включить модули" (c и Objective-C) на "Нет"

(также не забывайте добавлять фреймворки, для меня это было: "Адресная книга" "QuartzCore" "CoreLocation" "CoreGraphics" и если все еще не добавлено, также "UIKit" "Фонд" "CoreData" )

и, наконец, он работал у меня

все это используется для связанного FBSDK в пользовательской папке в моей папке проекта не от ~/Documents/FacebookSDK

Ответ 5

От Криса Пана (команда Facebook): https://developers.facebook.com/bugs/362995353893156/

Добавлены модули модулей 4.0.1 с добавлением модулей (которые должны были устранить необходимость создания заголовков мостов), но похоже, что это вызвало некоторые другие проблемы совместимости. Мы работаем над правильным исправлением, но еще одним обходным решением является удаление карт модулей вручную из каждого пакета FBSDK * Kit.framework; например, rm -r ~/Documents/FacebookSDK/FBSDKCoreKit.framework/Modules/ (и повторить для FBSDKLoginKit и FBSDKShareKit)

Насколько я знаю, у нас есть 2 варианта решения этой проблемы:

  • Удалите все карты модулей, как сказал Крис.
  • Добавить временный (неофициальный) файл карты модуля в папке Bolts.framework(в папке FacebookSDK). Вы должны проверить, отсутствует ли эта папка или нет.

Ответ 6

Удалите Модуль Каталог из FacebookCoreKit.framwork.

enter image description here

Ответ 7

Если у вас возникла проблема с 'FBSDKCoreKit', вы можете попробовать следующие решения:

  • Перейти к настройке сборки и поиска "разрешить немодульное" и установить

    "Разрешить немодульное включение в модули Framework" в YES

enter image description here

  1. Перейдите в папку Document/FacebookSDK

    затем перейдите в FBSDKCoreKit.framework

    В папке "Удалить модули". Затем добавьте в свой проект библиотеку FacebookSDK.

  2. Установите путь поиска Framework в "~/Documents/FacebookSDK"

    Шаги по поиску пути поиска Framework

    Настройте параметры проекта и найдите "путь поиска каркаса".

    Затем добавьте "~/Documents/FacebookSDK"

enter image description here

Edit:

пожалуйста, откройте путь поиска Framework в приложении Facebook и скопируйте все пути, упомянутые там в вашем приложении. Подобно тому, как я прикреплен ниже в экранах экрана

enter image description here

Это устранит вашу проблему.

Ответ 8

У вас тоже есть проблема, вам нужно установить

Enable Modules (C and Objective-C)

до НЕТ.

Ответ 9

Я столкнулся с той же проблемой. Проблема заключалась в том, что мой каталог проекта содержал пробел в названии "Application Demo". Поэтому всякий раз, когда я перетаскивал фреймворки Facebook, он добавлял пространство в пути поиска Framework в настройках. Удалите это пространство, разрешив проблему.

Ответ 10

Вероятно, вы импортируете папку "Образцы", которая поставляется с SDK для Facebook, в ваш проект. Удалите ссылки на эти файлы из своего проекта, и он должен работать. Не нужно менять флаги в настройках сборки.

Ответ 11

Я должен направить вас на эту текущую открытую проблему, назначенную Facebook: https://developers.facebook.com/bugs/362995353893156/. Ни один из ответов здесь не помог мне, поэтому я предполагаю, что мы просто сидим уток:

Как на момент написания сообщения, сообщение от Facebooks Chris Pan:

"Добавлены модули модулей 4.0.1 с добавлением модулей (которые должны были устранить необходимость создания заголовков мостов), но похоже, что это вызвало некоторые другие проблемы совместимости. Мы работаем над правильным исправлением, но еще одним обходным решением является удаление модуль сопоставляется вручную из каждого набора FBSDK * Kit.framework, например, rm -r ~/Documents/FacebookSDK/FBSDKCoreKit.framework/Modules/ (и повторять для FBSDKLoginKit и FBSDKShareKit)"

Kosala Ubayasekara заставил его работать, но поскольку это открытая проблема, вы можете просто подождать, пока официальное исправление не будет ясно:

  • В настройках сборки в модулях Apple LLVM:

    • Установить Разрешить немодульное включение в Framework-модули "в положение NO
    • Включить модули (C и Object C) в NO.
  • Создайте заголовок моста, чтобы включить заголовки SDK для Facebook.

  • Заголовок связующего моста в настройках сборки: Swift Compiler - Генерация кода.
  • Импортируйте файл FBSDKCoreKit в файл делегата приложения и реализуйте основные требования к SDK для Facebook согласно документации FB

Ответ 12

Такая же проблема была со мной.... Для меня это не относится. Я поставил. модулей, флагов и других вещей... но ничего не помогает.

Но для меня эта проблема решается

ПЕРЕМЕЩАТЬ папку фреймов ПОСЛЕ или ВСТАВИТЬ папку, в которой находится файл .pch.

Когда моя папка рамки  @myapp/{frameworkFolder}/fbframeworks.
Он показывал проблемы.

Перемещаю его на myapp/myapp/modal/{fbframework}/. Затем этот вопрос был решен. (файл my.pch находится в myapp/myapp.)

Может быть, тот же самый может помочь любому, у кого есть такая же проблема.

Ответ 13

TL; DR Удалите ссылку на Bolts.framework в своем проекте.

Ни один из этих или любых других ответов не работал у меня (в моем случае). Для моего проекта мы переключались с более старого Facebook-sdk, и у нас был файл Bolts.framework.

Считывание документации

SDK автоматически загружает свои фреймворки и зависимости ресурсов.

Как таковой, я думаю, что происходит столкновение. Был файл Bolts.framework, который у меня был раньше, а затем новый, который появился, когда я загрузил новый пакет FacebookSDK (в этом случае это 4.7).

Удаление моего Bolts.framework устраняет проблему (обязательно очистите перед перестройкой).

Ответ 14

У меня такая же проблема: я использовал новейший Facebook SDK (FacebookSDKs-iOS-20160316) на Xcode 6.4, он постоянно дает мне эту ошибку всякий раз, когда я вставляю следующий код в свой AppDelegate.m файл:  #import <FBSDKCoreKit/FBSDKCoreKit.h>

Когда я переключился на Xcode 7.2, проблема решена, ошибка исчезла. Угадайте, что это может быть проблема, совместимая с версией.

Если вы столкнулись с той же проблемой со мной, вы можете попробовать использовать Xcode 7.2 для ее создания. Проблема в том, что Xcod 6.4 никогда не сможет использоваться, если вы сохраняете sdk Facebook в своем проекте.

Надеюсь, это поможет!

Ответ 15

Для тех, кто пришел сюда и совершил ту же ошибку новичков, что и я. Может быть, я смогу сэкономить некоторое время. Я работаю над старым проектом, который в основном состоит из кода Objective-C. Мы пытаемся внедрить новый материал в Swift.

Это то, что я пробовал в моем коде Swift

import FBSDKCoreKit

class SomeClass {

  func doSomething {
    FBSDKAppEvents.logEvent("Some Event")
  }
}

Но компилятор жаловался, что он не может скомпилировать модуль и т.д.

Как я решил это

  • Удалите import FBSDKCoreKit из моего кода Swift.
  • Отредактировал наш Bridging-Header.h и импортировал FBSDKCoreKit там: #import <FBSDKCoreKit/FBSDKCoreKit.h>

Ответ 16

Убедитесь, что вы также импортировали фреймворк Bolts, это сработало для меня.