web-dev-qa-db-fra.com

Erreur du framework "Bolts" de Parse and Facebook SDK

J'ai une application avec les cadres Parse et Facebook installés. Parse a été installé en faisant glisser les fichiers dans le dossier "Frameworks" du projet et en sélectionnant "Copier si nécessaire", alors que le SDK de Facebook a été installé en faisant glisser et en ne sélectionnant pas l'option de copie. Les deux apparaissent dans la liste des fichiers binaires liés. Le problème semble être que Bolts est inclus dans les deux kits de développement logiciel (SDK). J'ai simplement essayé d'utiliser celui de Facebook, en produisant les erreurs Link-O suivantes:

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)

J'ai supprimé le lien vers celui de Facebook et essayé de faire glisser celui de Parse, mais l'erreur a persisté. J'ai aussi l'avertissement que 

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)

même si j’avais supprimé le fichier du SDK de Facebook. 

Comment dois-je nettoyer le projet et créer un lien vers la version Parse de Bolts? Y a-t-il autre chose que je devrais faire?

11
milesper

Eh bien je l'ai trouvé. Le problème était que les anciens fichiers (qui étaient maintenant supprimés) étaient référencés dans "l'indicateur des chemins de recherche de bibliothèque". Merci à ce post pour me donner l’idée. Tout ce que j'avais à faire était de supprimer les anciens chemins et cela fonctionne à nouveau. 

EDIT: Il semble que dans certaines situations, l’ordre des chemins de recherche soit également important (voir ci-dessous).

3
milesper

Il s'avère que l'ordre dans lequel vous incluez/recherchez les cadres dans votre projet est important.

Voici ce que j'ai fait pour travailler avec Parse 1.6.4 et FacebookSDK sans CacoaPods

  1. Utilisez la dernière version de Bolts. (1.1.4)
  2. Vos chemins d’inclusion doivent être commandés pour trouver Bolt d’abord, puis FacebookSDK, puis Parse

Ordering your search paths

5
stone

Cela a fonctionné pour moi Solution temporaire pour Parse 1.6.4 et Facebook SDK 3.23

Ajoutez à votre AppDelegate.m ou à une autre classe une constante après les importations et avant la section d’implémentation: NSString *const BFTaskMultipleExceptionsException = @"BFMultipleExceptionsException";

L’explication du bogue https://stackoverflow.com/a/29136507/1345244

Un hack que j'ai trouvé pour travailler sur les symboles manquants, était simplement de redéfinir le symbole manquant dans mon code.

La chaîne BFTaskMultipleExceptionsException est définie ici comme suit:

NSString * const BFTaskMultipleExceptionsException = @ "BFMultipleExceptionsException"; Alors, essayez peut-être simplement d'insérer cette ligne dans votre code?

D'après l'historique de github, il semble que cela ait été ajouté à Bolts il y a environ 19 jours. La version 1.1.4 de Bolts a été publiée il y a 14 jours (la version 1.1.3 datait d'octobre dernier). Cela est probablement dû à la non-concordance de version de Bolts que vous avez remarquée.

Une autre option pourrait être d’obtenir une version plus ancienne de Parse avant la publication de Bolts 1.1.4.

Vraisemblablement, cela sera corrigé lorsqu'un nouveau SDK de Facebook sera disponible avec Bolts 1.1.4.

3
Joël

même problème ici.

J'avais les deux frameworks inclus sans aucun problème, jusqu'à ce que j'ajoute le kit de développement SponsorPay SDK qui doit ajouter le -ObjC dans "autres drapeaux de l'éditeur de liens" sur la cible "Paramètres de génération ".

Donc, d'après mon expérience, ce problème ne se produit que lorsque le drapeau -ObjC est présent.

J'ai essayé toutes les solutions exposées ici mais rien ne fonctionnait pour moi. J'espère que tout le monde pourra apporter des éclaircissements sur la façon de résoudre ce problème, même avec le drapeau -ObjC actif.

EDIT:

Il y a une question liée à cela, je vais mettre le lien ici au cas où cela serait utile à quelqu'un: Contradicting frameworks sur -ObjC

2
SFWdc

j'ai eu un problème, je viens de supprimer Parser.framework dans Cadre lié et bibliothèques et fonctionne bien.

0
alicanozkara