2013-08-08 14 views
19

Ich bin ein Upgrade mein Projekt Cocoapods zu verwenden und wenn ich mein Projekt für ein iOS-Gerät versuchen, den Aufbau oder für einen Simulator ich:Cocoapods - Flurry & Testflug - undefinierte Symbole für Architektur

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) 

(mit der Architektur natürlich anders)

Unter "Link Binary mit Bibliotheken" libPods.a ist schwarz, so glaube ich nicht, dass es da ein Problem gibt. Es macht auch Autocomplete für beide, also bin ich mir nicht sicher, warum es sie zur Kompilierzeit nicht findet.

Irgendwelche Vorschläge?

+0

wie ein Sound Problem mit Ihren Header-Suchpfaden. Überprüfen Sie, ob es für Ihr Ziel genauso ist wie in Pods.xcconfig. – MishieMoo

+0

Ich benutze '$ (geerbt)' so zieht es auch alle Pods.xcconfig Suchpfade. Das sollte es richtig machen? – RyanJM

+0

Ich stieß auch auf dieses Problem und entfernte nur Testflight, Flurry und Parse von Cocoapods. Lohnt sich nicht die Kopfschmerzen zu arbeiten. – rnystrom

Antwort

70

Die folgenden für mich gearbeitet:

in den Build-Einstellungen nicht "Andere Linker Flags" außer Kraft setzen. Wenn es fett gedruckt ist, wählen Sie es aus und drücken Sie die Rücktaste, es sollte wieder in den Normalzustand zurückkehren. Wenn es nicht behoben ist, lösche alle Flags, entferne und installiere Pods neu und das sollte es beheben.

+4

Das ist es! Danke SOOOO viel !! – Marchy

+2

Vergewissern Sie sich, dass Sie auch die Build-Einstellung für die Bibliothekssuchpfade aktiviert haben. Dies verursachte das Problem für mich. –

+4

Das hat funktioniert. Ich wusste nie, dass Sie die Rücktaste drücken können, um Überschreibungen zu entfernen. Zuerst habe ich das "-ObjC" entfernt und es war leer. Scheinbar "leer" bedeutet nicht "defaults" – markrickert

1

Ich habe festgestellt, dass einige Gründe für dieses Problem sein kann:

  1. libPod.a nicht in „mit Bibliotheken Link binären“ enthält (versuchen Bezug zu entfernen und wieder hinzufügen)
  2. Compiler kann‘ t Bibliothek finden. Seltsames Verhalten, versuche den Pfad zu Bibliotheken mit $ {PODS_ROOT} unter "Library search path" zu schreiben. ($ (PODS_ROOT)/TestFlightSDK zum Beispiel)
  3. Compiler kann Header nicht finden. Versuchen Sie, den Pfad zu den Headern mit $ {PODS_ROOT} unter "Header search path" zu schreiben.

Ich hoffe, dass dies hilfreich ist.

22

Cocoapods enthält libTestFlight.a aus irgendeinem Grund nicht im TestFlight-Ziel. Also dieses Problem zu beheben, jedes Mal, wenn pod install laufen, müssen Sie:

  1. öffnen Pods-TestFlightSDK Ziel im Pods.xcodeproj Projekt
  2. öffnen Build Phases Registerkarte
  3. Add (via "Andere Hinzufügen ...") libTestFlight.a zu Link Binary With Libraries Dropdown

libTestFlight.a können in Ihrem [$SRCROOT]/Pods/TestFlightsSDK Ordner.

enter image description here

Machen Sie dasselbe mit Flurry und du bist gut zu gehen!

aktualisieren 1. Mai 2014

Es ist wie "Integration fehlt Bibliothek" aussieht, ist ein Symptom für die Verwendung des --no-integrate Flag (zum Beispiel pod install --no-integrate).

Und das Leben einfacher zu machen, habe ich ein Skript geschrieben automatisch die Bibliotheken nach pod (update|install) --no-integrate

Bedarf anpassen Lauf hinzuzufügen und diese Ihre Podfile nach unten hinzufügen:

# 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

Bei Flurry schien das nicht mit mir zu funktionieren. Ich bekomme immer noch die undefinierten Symbole Fehler – s73v3r

+0

Vielleicht Flurry ist ein separates Problem. Bitte posten Sie eine neue Frage mit Ihren Angaben. –

+1

Diese Lösung funktioniert gut für mich Ich schlage @ s73v3r vor, Beispielprojekt zu erstellen und flurry nur ein add libFlurry zu integrieren. Ich habe keine Testflight-Bibliothek integriert. –