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