Подтвердить что ты не робот

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

Я обновляю свой проект, чтобы использовать 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 является черным, поэтому я не думаю, что там есть какая-либо проблема. Он также выполняет автозаполнение для обоих из них, поэтому я не уверен, почему он не находит их во время компиляции.

Любые предложения?

4b9b3361

Ответ 1

Следующие работали для меня:

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

Ответ 2

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

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

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

enter image description here

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

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

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

Чтобы облегчить жизнь, я написал script, чтобы автоматически добавлять библиотеки после запуска 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

Ответ 3

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

  • libPod.a не включен в "link binary with libraries" (попробуйте удалить ссылку и снова добавить)
  • Компилятор не может найти библиотеку. Странное поведение, попробуйте написать путь к библиотекам с помощью ${PODS_ROOT} в "Путь поиска библиотеки". (Например, $(PODS_ROOT)/TestFlightSDK)
  • Компилятор не может найти заголовок. попробуйте написать путь к заголовкам, используя ${PODS_ROOT} в "пути поиска заголовка".

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