webentwicklung-frage-antwort-db.com.de

Parse und Facebook SDK "verschraubt" Framework-Fehler

Ich habe eine App, auf der sowohl das Parse- als auch das Facebook-Framework installiert sind. Parse wurde installiert, indem Sie die Dateien in den Ordner "Frameworks" des Projekts ziehen und "Bei Bedarf kopieren" auswählen, während das Facebook-SDK durch Ziehen und nicht durch Kopieren der Option installiert wurde. Beide werden in der Liste der verknüpften Binärdateien angezeigt. Das Problem scheint zu sein, dass Bolts in beiden SDKs enthalten ist. Ich habe versucht, nur die Facebook-Version zu verwenden und die folgenden Link-O-Fehler zu erzeugen:

Undefined symbols for architecture x86_64:
  "_BFTaskMultipleExceptionsException", referenced from:
      ___53+[PFObject(Private) deleteAllAsync:withSessionToken:]_block_invoke214 in Parse(PFObject.o)
      ___65+[PFObject(Private) _deepSaveAsync:withCurrentUser:sessionToken:]_block_invoke311 in Parse(PFObject.o)
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Ich habe den Link zu Facebook gelöscht und versucht, die Parse zu ziehen, aber der Fehler blieb bestehen. Ich habe auch die Warnung bekommen 

ld: warning: ignoring file /Users/milesper/Documents/FacebookSDK/Bolts.framework/Bolts, missing required architecture x86_64 in file /Users/milesper/Documents/FacebookSDK/Bolts.framework/Bolts (2 slices)

obwohl ich die Datei aus dem Facebook-SDK gelöscht hatte. 

Wie soll ich das Projekt bereinigen und auf die Parse-Version von Bolts verweisen? Gibt es noch etwas, was ich tun sollte?

11
milesper

Nun, ich habe es gefunden. Das Problem war, dass alte Dateien (die jetzt gelöscht wurden) im Flag "Library Search Paths" referenziert wurden. Danke an diesen Beitrag für die Idee. Ich musste nur die alten Pfade löschen und es funktioniert jetzt wieder. 

BEARBEITEN: Es scheint, dass in einigen Situationen auch die Reihenfolge der Suchpfade eine Rolle spielt (siehe unten).

3
milesper

Stellt die Reihenfolge dar, in der Sie die Frameworks in Ihre Projektangelegenheiten einbeziehen/durchsuchen.

Folgendes habe ich gemacht, um mit Parse 1.6.4 und FacebookSDK ohne CacoaPods zu arbeiten

  1. Verwenden Sie die neueste Version von Bolts. (1.1.4)
  2. Ihre Include-Pfade sollten bestellt werden, um zuerst Bolt, dann FacebookSDK und dann Parse zu finden

Ordering your search paths

5
stone

Das hat für mich funktioniert Temporäre Problemumgehung für Parse 1.6.4 und Facebook SDK 3.23

Fügen Sie Ihrer AppDelegate.m oder einer anderen Klasse folgende Konstante nach dem Importieren und vor dem Implementierungsabschnitt hinzu: NSString *const BFTaskMultipleExceptionsException = @"BFMultipleExceptionsException";

Die Erklärung des Fehlers https://stackoverflow.com/a/29136507/1345244

Ein Hack, den ich für das Umgehen von fehlenden Symbolen fand, definierte das fehlende Symbol in meinem Code einfach neu.

Die Zeichenfolge BFTaskMultipleExceptionsException wird hier wie folgt definiert:

NSString * const BFTaskMultipleExceptionsException = @ "BFMultipleExceptionsException"; Versuchen Sie es also einfach, diese eine Zeile in Ihren Code einzufügen.

Aus der Geschichte auf github sieht es so aus, als ob dies vor etwa 19 Tagen zu Bolts hinzugefügt wurde. Die Version 1.1.4 von Bolts wurde vor 14 Tagen veröffentlicht (1.1.3 war vom Oktober letzten Jahres). Es ist also wahrscheinlich auf die Versionskonflikte der Bolzen zurückzuführen, die Sie bemerkt haben.

Eine andere Option könnte darin bestehen, eine ältere Version von Parse vor der Veröffentlichung von Bolts 1.1.4 zu erhalten.

Vermutlich wird dies behoben, sobald ein neues Facebook-SDK mit Bolts 1.1.4 verfügbar ist.

3
Joël

selbes Problem hier.

Ich hatte beide Frameworks ohne Problem, bis ich SponsorPay SDK hinzugefügt habe, das -ObjC in "Andere Linker-Flags" am Ziel "Build-Einstellungen hinzufügen muss. ".

Nach meiner Erfahrung tritt dieses Problem also nur auf, wenn die Flagge -ObjC vorhanden ist.

Ich habe alle hier vorgestellten Lösungen ausprobiert, aber nichts hat für mich funktioniert. Ich hoffe, dass jemand mehr Licht auf die Lösung dieses Problems bringen kann, selbst wenn das Flag -ObjC aktiv ist.

EDIT:

Es gibt eine Frage, die sich auf diese Frage bezieht. Ich werde den Link hier einfügen, falls dies für jemanden hilfreich ist: Widerspruch von Frameworks zu -ObjC

2
SFWdc

ich hatte ein Problem, ich entferne einfach Parser.framework in Linked Framework und Bibliotheken und arbeite gut.

0
alicanozkara