web-dev-qa-db-fra.com

Analyser pour iOS: erreurs lors de la tentative d'exécution de l'application

J'ai travaillé avec le SDK Parse et j'ai suivi le guide rapide. Lorsque j'essaie de courir, j'obtiens ces 8 erreurs. Une quelconque idée du pourquoi? Cela ressemble à quelque chose à voir avec la partie Facebook de Parse que je n'utilise pas.

 Undefined symbols for architecture armv7:
"_FBTokenInformationTokenKey", referenced from:
  -[PFFacebookTokenCachingStrategy accessToken] in Parse(PFFacebookTokenCachingStrategy.o)
  -[PFFacebookTokenCachingStrategy setAccessToken:] in Parse(PFFacebookTokenCachingStrategy.o)
 "_FBTokenInformationExpirationDateKey", referenced from:
  -[PFFacebookTokenCachingStrategy cacheTokenInformation:] in     Parse(PFFacebookTokenCachingStrategy.o)
  -[PFFacebookTokenCachingStrategy expirationDate] in Parse(PFFacebookTokenCachingStrategy.o)
  -[PFFacebookTokenCachingStrategy setExpirationDate:] in Parse(PFFacebookTokenCachingStrategy.o)
 "_OBJC_METACLASS_$_FBSessionTokenCachingStrategy", referenced from:
  _OBJC_METACLASS_$_PFFacebookTokenCachingStrategy in Parse(PFFacebookTokenCachingStrategy.o)
"_OBJC_CLASS_$_FBSessionTokenCachingStrategy", referenced from:
  _OBJC_CLASS_$_PFFacebookTokenCachingStrategy in Parse(PFFacebookTokenCachingStrategy.o)
"_FBTokenInformationUserFBIDKey", referenced from:
  -[PFFacebookTokenCachingStrategy facebookId] in Parse(PFFacebookTokenCachingStrategy.o)
  -[PFFacebookTokenCachingStrategy setFacebookId:] in Parse(PFFacebookTokenCachingStrategy.o)
"_OBJC_CLASS_$_FBRequest", referenced from:
  objc-class-ref in Parse(PFFacebookAuthenticationProvider.o)
"_OBJC_CLASS_$_FBSession", referenced from:
  objc-class-ref in Parse(PFFacebookAuthenticationProvider.o)
 ld: symbol(s) not found for architecture armv7
 clang: error: linker command failed with exit code 1 (use -v to see invocation)
80
Sarabyte Studios

Il s'agit d'une sorte de bogue associé à la version Parse iOS 1.1.33, car plusieurs personnes voient les mêmes erreurs, y compris moi-même.

Il y a quelques solutions de contournement-

Si vous n'utilisez pas une bibliothèque qui nécessite l'indicateur de l'éditeur de liens -ObjC, vous pouvez supprimer -ObjC de votre projet:

Paramètres de construction> Autres indicateurs de l'éditeur de liens> supprimer -ObjC

ou si vous utilisez une bibliothèque qui nécessite cet indicateur, vous pouvez ajouter le SDK Facebook.

Les deux options élimineront les erreurs. J'espère qu'ils corrigent cela car je n'ai pas besoin du SDK Facebook dans mon application.

Suivez la discussion ici:

https://parse.com/questions/cocoapods-incompatibility

137
blueHula

Voici une solution de contournement potentiellement plus simple que le téléchargement, la compilation et l'installation du kit FB, qui est plutôt volumineux et encombrant. Notez que, bien sûr, vous ne pourrez utiliser aucune des fonctionnalités de type FB dans Parse et vous rencontrerez des problèmes graves si vous déclenchez l'un des codes Parse qui prévoit d'utiliser ces symboles fictifs. Mais si vous restez loin d'eux, tout ira bien je pense. Alors...

  1. Créez un objet dans votre application appelé FBMissingSymbols

  2. Supprimez le .h vous n'en aurez plus besoin

  3. Mettez ceci dans le .m:

NSString *FBTokenInformationExpirationDateKey = @"";
NSString *FBTokenInformationTokenKey = @"";
NSString *FBTokenInformationUserFBIDKey = @"";
@interface FBAppCall:NSObject
@end
@implementation FBAppCall
@end
@interface FBRequest:NSObject
@end
@implementation FBRequest
@end
@interface FBSession:NSObject
@end
@implementation FBSession
@end
@interface FBSessionTokenCaching:NSObject
@end
@implementation FBSessionTokenCaching
@end
@interface FBSessionTokenCachingStrategy:NSObject
@end
@implementation FBSessionTokenCachingStrategy
@end
102
dbquarrel

Vous devez supprimer l'ancien ParseFacebookUtils.framework et conservez le nouveau ParseFacebookUtilsV4.framework pour le faire fonctionner.

27
Marco Martignone

J'ai adoré la réponse de dbquarrel, mais ça ne marche plus car il manque de nouvelles classes sociales.

Faites donc la même chose, mais à la place, ajoutez ceci:

NSString *FBTokenInformationExpirationDateKey = @"";
NSString *FBTokenInformationTokenKey = @"";
NSString *FBTokenInformationUserFBIDKey = @"";
NSString *SLServiceTypeTwitter = @"";
NSString *ACAccountTypeIdentifierTwitter = @"";
@interface FBAppCall:NSObject
@end
@implementation FBAppCall
@end
@interface FBRequest:NSObject
@end
@implementation FBRequest
@end
@interface FBSession:NSObject
@end
@implementation FBSession
@end
@interface FBSessionTokenCaching:NSObject
@end
@implementation FBSessionTokenCaching
@end
@interface FBSessionTokenCachingStrategy:NSObject
@end
@implementation FBSessionTokenCachingStrategy
@end
@interface ACAccountStore:NSObject
@end
@implementation ACAccountStore
@end
@interface SLRequest:NSObject
@end
@implementation SLRequest
@end
@interface SLComposeViewController:NSObject
@end
@implementation SLComposeViewController
@end
23
Nate Lee

Vérifiez et assurez-vous que vous n'avez pas ajouté deux versions du framework "ParseFacebookUtils":

ParseFacebookUtilsV4 et ParseFacebookUtils

Une fois que j'ai supprimé ParseFacebookUtils et conservé ParseFacebookUtilsV4, cela a bien fonctionné.

10
ewakened

Ma solution fonctionnera certainement et vous pouvez utiliser -ObjC dans d'autres indicateurs de l'éditeur de liens.

  1. Ajouter "Social.framework", "Account.framework"
  2. Ajouter "FacebookSDK.framework"

Bravo .... maintenant ça marche ..... et pas besoin d'enlever -ObjC.

7
Biranchi

On dirait que vous devrez peut-être ajouter le "Account.Framework" et/ou le "Social.Framework".

3
Pete

Un complément à la réponse de @blueHula. Parse a supprimé le SDK Facebook de son cadre, ce qui signifie qu'à partir d'une certaine version (1.1.33 peut-être), l'intégration de parse.framework devrait être accompagnée de l'intégration indépendante du SDK FB.

Veuillez vous référer à ce lien en utilisant le sdk d'analyse ios sans inclure le sdk facebook

Le point clé est d'utiliser -force_load $(SRCROOT)/path/libname.a pour établir un lien avec les bibliothèques tierces nécessaires, plutôt que d'utiliser -all_load et -ObjC

2
BabyPanda

c'est 2015 et je viens d'avoir la même erreur. Malheureusement, aucune des réponses ci-dessus n'a fonctionné pour moi. Mais cela a fait:

Cible> Phases de construction> Lier le binaire aux bibliothèquespuis ajouter libstdc ++. 6.dylib

Cela a résolu le problème pour moi.

1
Alan Scarpa

J'ai eu la même utilisation et le seul tiers que j'avais était le SDK Paypal. Après avoir supprimé -ObjC, tout s'est bien passé. (faites toujours une sauvegarde de votre projet avant de modifier les paramètres)

1
Marcio Arantes

C'est une erreur de l'éditeur de liens ... Vous n'incluez pas dans votre projet un framework nécessaire auquel vous faites référence dans l'un de vos fichiers d'en-tête inclus.

Ainsi, par exemple, si vous avez une inclusion dans votre code:

#import <Parse/Parse.h>

Cela nécessite probablement un cadre de prise en charge, et vous devez l'inclure dans votre application. Avez-vous inclus le parse.framework depuis Xcode?

Xcode Frameworks

1
ryebread

Il existe de nombreux frameworks qui doivent définir l'indicateur -ObjC comme autre indicateur lié, tandis que Parse ne vous permet pas de continuer si vous le faites. Pour résoudre ce problème, vous pouvez effectuer l'une des opérations suivantes. J'ai montré un exemple de SDK Google Maps qui nécessite le drapeau -ObjC, mais en raison de Parse dans le même projet, je ne peux pas l'utiliser directement:

Solution 1 - Utilisation de l'indicateur force_load

Au lieu de définir l'indicateur -ObjC comme autre indicateur lié, utilisez l'indicateur force_load pour charger une infrastructure ou une bibliothèque particulière.

-force_load $(SRCROOT)/GoogleMaps.framework/Versions/A/GoogleMaps

Solution 2 - Utilisation du SDK Facebook

Ajoutez simplement Facebook SDK en tant que framework séparé, cela vous permettra d'utiliser le drapeau -ObjC. Assurez-vous également que vous avez ajouté Accounts.framework et Social.framework. Si vous avez ajouté Bolt.framework et que vous utilisez le projet vide Parse, alors pour gérer le symbole en double, supprimez Bolt.framwork. S'il y a encore quelques erreurs, supprimez le compte et le cadre social et ajoutez-le à nouveau (ce sera le cas si vous avez utilisé le projet vide par défaut Parse).

0
Mrug