Cocoapods - Flurry & TestFlight - Неопределенные символы для архитектуры

Я обновляю свой проект для использования Cocoapods, и когда я пытаюсь создать свой проект для устройства iOS или для симулятора, я получаю:

Undefined symbols for architecture armv7:
  "_OBJC_CLASS_$_TestFlight", referenced from:
      objc-class-ref in PhotoPreviewViewController.o
  "_OBJC_CLASS_$_Flurry", referenced from:
      objc-class-ref in MyAppDelegate.o
      objc-class-ref in InitialSetupViewController.o
      objc-class-ref in InitialDownloadViewController.o
      objc-class-ref in HistoryViewController.o
ld: symbol(s) not found for architecture armv7
clang: error: linker command failed with exit code 1 (use -v to see invocation)

(конечно, с другой архитектурой)

В разделе «Связать двоичный файл с библиотеками» libPods.a черный, поэтому я не думаю, что здесь есть какая-то проблема. Он также выполняет автозаполнение для них обоих, поэтому я не уверен, почему он не находит их во время компиляции.

Какие-либо предложения?


person RyanJM    schedule 08.08.2013    source источник
comment
Похоже, проблема с вашими путями поиска в заголовке. Дважды проверьте, что для вашей цели это то же самое, что и в Pods.xcconfig.   -  person MishieMoo    schedule 09.08.2013
comment
Я использую $(inherited), поэтому он также извлекает все пути поиска Pods.xcconfig. Это должно сделать это правильно?   -  person RyanJM    schedule 09.08.2013
comment
Я тоже столкнулся с этой проблемой и просто удалил Testflight, Flurry и Parse из Cocoapods. Не стоит головной боли, чтобы начать работать.   -  person rnystrom    schedule 27.08.2013
comment
Это то, что я сделал также. Хотел бы я сохранить его в Cocoapods.   -  person RyanJM    schedule 27.08.2013
comment
Есть решение! Смотрите мой ответ, чтобы решить проблему, сохранив поддержку Cocoapod.   -  person Tom Redman    schedule 30.10.2013
comment
@RyanJM, можешь проверить правильный ответ?   -  person quaertym    schedule 27.10.2014


Ответы (3)


Для меня работало следующее:

В настройках сборки не переопределяйте «Другие флаги компоновщика». Если он выделен жирным шрифтом, выберите его и нажмите клавишу Backspace, он должен вернуться в нормальное состояние. Если это не исправлено, удалите все флаги, удалите и переустановите модули, и это должно исправить это.

person quaertym    schedule 20.10.2013
comment
Это оно! Спасибо ТААААААА!! - person Marchy; 13.11.2013
comment
Не забудьте также проверить настройки сборки путей поиска в библиотеке. Это было причиной проблемы для меня. - person Isaac Overacker; 15.11.2013
comment
Это сработало. Никогда не знал, что вы можете нажать Backspace, чтобы удалить переопределения. Сначала я просто удалил -ObjC, который был там, и он был пуст. По-видимому, пустое не означает значения по умолчанию - person markrickert; 04.12.2013
comment
Это на самом деле не объясняет, почему это решает проблемы. Могут быть веские причины для редактирования или добавления других флагов компоновщика. По крайней мере, в случае TestFlight причина, по которой это, вероятно, устраняет проблему, заключается в том, что он гарантирует, что -lTestFlight является частью флагов компоновщика. Если вам нужно настроить флаги компоновщика, убедитесь, что у вас есть этот флаг для TestFlight. - person Fostah; 03.04.2014
comment
1000 ПОЦЕЛУЕВ ДЛЯ ВАС. Я сделал то же самое, что и Маркрикерт. Удалите -ObjC, думая, что он исчез! - person super9; 19.04.2014
comment
Постоянное напоминание о собственной глупости. Благодарю вас! - person Ben Kreeger; 07.10.2014
comment
Благодарю вас! Это было очень полезно. - person Rich Seviora; 27.10.2014
comment
Почему это сработало?? Вы можете помочь мне понять? - person Eduardo Urso; 07.11.2014

Cocoapods по какой-то причине не включает libTestFlight.a в цель TestFlight. Итак, чтобы решить эту проблему, каждый раз, когда вы запускаете pod install, вы должны:

  1. Откройте цель Pods-TestFlightSDK в проекте Pods.xcodeproj
  2. Откройте вкладку Build Phases
  3. Добавить (через «Добавить другое...») от libTestFlight.a до Link Binary With Libraries раскрывающегося списка

libTestFlight.a можно найти в папке [$SRCROOT]/Pods/TestFlightsSDK.

введите здесь описание изображения

Сделайте то же самое с Flurry, и все готово!

Обновление от 1 мая 2014 г.

Похоже, что «отсутствие интеграции с библиотекой» является признаком использования флага --no-integrate (например, pod install --no-integrate).

И чтобы облегчить жизнь, я написал скрипт для автоматического добавления библиотек после запуска pod (update|install) --no-integrate

При необходимости отрегулируйте и добавьте это внизу Podfile:

# Use post_install to automatically include required libraries
post_install do |installer_representation|
    installer_representation.project.targets.each do |target|
        if target.name == 'Pods-TestFlightSDK'
            libFile = installer_representation.project.new_file('TestFlightSDK/libTestFlight.a')
        end

        if target.name == 'Pods-Brightcove-Player-SDK'
            libFile = installer_representation.project.new_file('Brightcove-Player-SDK/Library/libBCOVPlayerSDK.a')
        end

        unless libFile.nil?
            puts "    - Adding %s to %s Frameworks Build Phases" % [libFile, target.name]
            target.frameworks_build_phase.add_file_reference(libFile)
        end
    end
end
person Tom Redman    schedule 29.10.2013
comment
Похоже, это не сработало со мной в отношении Flurry. Я все еще получаю ошибку неопределенных символов - person s73v3r; 05.11.2013
comment
Пожалуй, Flurry — это отдельная тема. Пожалуйста, напишите новый вопрос с вашими особенностями. - person Tom Redman; 06.11.2013
comment
Это решение отлично работает для меня. Я предлагаю @s73v3r создать пример проекта и интегрировать flurry только с добавлением libFlurry. У меня нет встроенной библиотеки testflight. - person Rajan Maharjan; 29.11.2013

Я обнаружил, что может быть несколько причин этой проблемы:

  1. libPod.a не включен в "бинарный файл связи с библиотеками" (попробуйте удалить ссылку и добавить снова)
  2. Компилятор не может найти библиотеку. Странное поведение, попробуйте написать путь к библиотекам, используя ${PODS_ROOT} в "Путь поиска библиотеки". (например, $(PODS_ROOT)/TestFlightSDK)
  3. Компилятор не может найти заголовок. попробуйте написать путь к заголовкам, используя ${PODS_ROOT} в "Пути поиска заголовков".

Надеюсь, что это полезно.

person HereTrix    schedule 15.10.2013