2013-08-08 3 views
19

Я перехожу мой проект, чтобы использовать Cocoapods и когда я пытаюсь строить свой проект для устройства IOS или на тренажере я получаю:Cocoapods - Flurry & TestFlight - неопределенные символы для архитектуры

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

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

+0

звучит как проблема с вашими траекториями поиска заголовков. Двойная проверка - это то же самое для вашей цели, что и в Pods.xcconfig. – MishieMoo

+0

Я использую '$ (унаследованный)', поэтому он также тянет все пути поиска Pods.xcconfig. Это должно делать правильно? – RyanJM

+0

Я столкнулся с этой проблемой и просто удалил Testflight, Flurry и Parse из Cocoapods. Не стоит головной боли, чтобы работать. – rnystrom

ответ

70

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

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

+4

Вот оно! Спасибо SOOOO много !! – Marchy

+2

Не забудьте также проверить настройки «Настройка поиска в библиотеке». Это вызывало у меня проблему. –

+4

Это сработало. Никогда не знал, что вы можете ударить назад, чтобы удалить переопределения. Сначала я просто удалил «-ObjC», который был там, и он был пустым. По-видимому, «пустой» не означает «умолчания» – markrickert

1

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

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

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

22

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.

enter image description here

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

первого обновления мая 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 
+0

Это, похоже, не работало со мной в отношении Flurry. Я все еще получаю неопределенные символы error – s73v3r

+0

Возможно, Flurry - отдельная проблема. Пожалуйста, задайте новый вопрос со своей спецификой. –

+1

Это решение отлично подходит для меня. Я предлагаю @ s73v3r создать образец проекта и интегрировать flurry только add libFlurry. У меня нет библиотеки testflight. –

 Смежные вопросы

  • Нет связанных вопросов^_^