Рамка Parse и Facebook SDK "Болты"

У меня есть приложение с установленными фреймворками Parse и Facebook. Parse был установлен путем перетаскивания файлов в папку "Frameworks" проекта и выбора "скопировать при необходимости", в то время как SDK для Facebook был установлен путем перетаскивания, а не выбора опции копирования. Оба отображаются в списке Связанные двоичные файлы. Проблема заключается в том, что болты включены в оба SDK. Я попытался использовать только один Facebook, создав следующие ошибки Link-O:

Undefined symbols for architecture x86_64:
  "_BFTaskMultipleExceptionsException", referenced from:
      ___53+[PFObject(Private) deleteAllAsync:withSessionToken:]_block_invoke214 in Parse(PFObject.o)
      ___65+[PFObject(Private) _deepSaveAsync:withCurrentUser:sessionToken:]_block_invoke311 in Parse(PFObject.o)
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Я удалил ссылку на Facebook и попытался перетащить Parse one, но ошибка сохранилась. Я также получил предупреждение, что

ld: warning: ignoring file /Users/milesper/Documents/FacebookSDK/Bolts.framework/Bolts, missing required architecture x86_64 in file /Users/milesper/Documents/FacebookSDK/Bolts.framework/Bolts (2 slices)

хотя я удалил файл из SDK.

Как мне очистить проект и ссылку на версию "Болты"? Есть ли что-то еще, что я должен делать?

Ответ 1

Ну, я нашел его. Проблема заключалась в том, что старые файлы (которые теперь были удалены) ссылались на "Флаг путей поиска библиотек". Благодаря этому сообщению за предоставленную мне идею. Все, что мне нужно было сделать, это удалить старые пути, и теперь он работает снова.

EDIT: Похоже, что в некоторых ситуациях также имеет место порядок путей поиска (см. ниже).

Ответ 2

Вызывает порядок, в который вы включаете/выполняете поиск в рамках вашего проекта.

Вот что я сделал для работы с Parse 1.6.4 и FacebookSDK без CacoaPods

  • Используйте последнюю версию болтов. (1.1.4)
  • Ваши пулы include должны быть заказаны, чтобы сначала найти Bolt, затем FacebookSDK, затем Parse

Ordering your search paths

Ответ 3

Это сработало для меня Временное решение для Parse 1.6.4 и Facebook SDK 3.23

Добавьте в свой AppDelegate.m или другой класс следующую константу после импорта и перед секцией реализации: NSString *const BFTaskMultipleExceptionsException = @"BFMultipleExceptionsException";

Объяснение ошибки fooobar.com/questions/551305/...

Один хак, который я нашел для работы с отсутствующими символами, просто переопределял отсутствующий символ снова в моем коде.

Строка BFTaskMultipleExceptionsException определяется здесь следующим образом:

NSString * const BFTaskMultipleExceptionsException = @ "BFMultipleExceptionsException"; Так что, возможно, просто попробуйте поместить эту строку в свой код?

Из истории на github, похоже, что это было добавлено в Bolts около 19 дней назад. Версия 1.1.4 Bolts была выпущена 14 дней назад (1.1.3 была с октября прошлого года). Так что это, вероятно, вызвано несоответствием версии болтов, которые вы заметили.

Другой вариант может заключаться в том, чтобы получить более старую версию Parse, прежде чем был выпущен Bolts 1.1.4.

Предположительно, это будет исправлено, как только новый SDK для Facebook будет доступен с помощью болтов 1.1.4.

Ответ 4

та же проблема здесь.

У меня были оба фреймворка без проблем, пока я не добавил SDK SponsorPay, который должен добавить -ObjC в "Другие флаги компоновщика" в целевые "Настройки сборки".

Итак, по моему опыту эта проблема возникает только тогда, когда присутствует флаг -ObjC.

Я попробовал все решения, представленные здесь, но ничего не сработало для меня. Надеюсь, что кто-то может принести больше света, как решить эту проблему, даже если флаг -ObjC активен.

EDIT:

Вопрос, связанный с этим, я поставлю ссылку здесь, в случае, если кому-то будет полезно: Противоречивые рамки на -ObjC

Ответ 5

У меня была проблема, я просто удалю Parser.framework в Связанная структура и библиотеки и работайте хорошо.