webentwicklung-frage-antwort-db.com.de

Parse für iOS: Fehler beim Ausführen der App

Ich habe mit dem Parse SDK gearbeitet und bin der Kurzanleitung gefolgt. Wenn ich versuche zu laufen, erhalte ich diese 8 Fehler. Irgendwelche Ideen, warum? Es scheint etwas mit dem Facebook-Teil von Parse zu tun zu haben, den ich nicht benutze.

 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

Dies ist eine Art Fehler im Zusammenhang mit Parse iOS 1.1.33, da mehrere Benutzer dieselben Fehler sehen - ich selbst eingeschlossen.

Es gibt einige Problemumgehungen:

Wenn Sie keine Bibliothek verwenden, für die das Linker-Flag -ObjC erforderlich ist, können Sie -ObjC aus Ihrem Projekt entfernen:

Build-Einstellungen> Andere Linker-Flags> -ObjC entfernen

wenn Sie eine Bibliothek verwenden, für die dieses Flag erforderlich ist, können Sie das Facebook SDK hinzufügen.

Beide Optionen beseitigen die Fehler. Hoffentlich beheben sie das, da ich das Facebook SDK in meiner App nicht benötige.

Verfolgen Sie die Diskussion hier:

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

137
blueHula

Hier finden Sie eine möglicherweise einfachere Lösung als das Herunterladen, Kompilieren und Installieren des FB-Kits, das recht umfangreich und umständlich ist. Beachten Sie, dass Sie in Parse natürlich keine der Funktionen des Typs FB verwenden können und dass schwerwiegende Probleme auftreten, wenn Sie einen Parse-Code auslösen, der diese Dummy-Symbole verwenden soll. Aber wenn du dich von ihnen fernhältst, ist alles in Ordnung, denke ich. So...

  1. Erstellen Sie in Ihrer Anwendung ein Objekt mit dem Namen FBMissingSymbols

  2. Löschen Sie die .h, die Sie nicht benötigen

  3. Schreibe dies in die .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

Sie müssen den alten ParseFacebookUtils.framework Löschen und den neuen ParseFacebookUtilsV4.framework Beibehalten, damit er funktioniert.

27

Ich mochte die Antwort von dbquarrel, aber sie funktioniert nicht mehr, weil es an neuen sozialen Schichten mangelt.

Tun Sie dasselbe, aber fügen Sie stattdessen Folgendes hinzu:

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

Stellen Sie sicher, dass nicht zwei Versionen des Frameworks "ParseFacebookUtils" hinzugefügt wurden:

ParseFacebookUtilsV4 und ParseFacebookUtils

Nachdem ich ParseFacebookUtils entfernt und ParseFacebookUtilsV4 beibehalten hatte, funktionierte es einwandfrei.

10
ewakened

Meine Lösung wird auf jeden Fall funktionieren und Sie können -ObjC in anderen Linker-Flags verwenden.

  1. Füge "Social.framework", "Account.framework" hinzu
  2. Füge "FacebookSDK.framework" hinzu

Prost .... jetzt funktioniert es ..... und keine Notwendigkeit, -ObjC zu entfernen.

7
Biranchi

Klingt so, als müssten Sie möglicherweise das "Accounts.Framework" und/oder das "Social.Framework" hinzufügen.

3
Pete

Eine Ergänzung zur Antwort von @blueHula. Parse hat das Facebook SDK aus seinem Framework entfernt, was bedeutet, dass ab einer bestimmten Version (1.1.33) die Integration von parse.framework von der unabhängigen Integration des FB SDK begleitet werden sollte.

Bitte verweisen Sie auf diesen Link nter Verwendung des parse ios sdk ohne Einbeziehung des facebook sdk

Der wichtigste Punkt ist, -force_load $(SRCROOT)/path/libname.a zu verwenden, um eine Verknüpfung mit den erforderlichen Bibliotheken von Drittanbietern herzustellen, anstatt -all_load Und -ObjC Zu verwenden.

2
BabyPanda

es ist 2015 und ich hatte nur den gleichen Fehler. Leider hat keine der obigen Antworten für mich funktioniert. Aber das tat:

Ziel> Phasen erstellen> Binär mit Bibliotheken verknüpfendann libstdc ++. 6.dylib hinzufügen

Dies löste das Problem für mich.

1
Alan Scarpa

Ich hatte die gleiche Verwendung und und der einzige Dritte, den ich hatte, war das Paypal SDK. Nach dem Entfernen von -ObjC ist alles in Ordnung. (Erstellen Sie immer eine Sicherungskopie Ihres Projekts, bevor Sie Einstellungen ändern.)

1
Marcio Arantes

Es handelt sich um einen Linker-Fehler. Sie haben kein erforderliches Framework in Ihr Projekt aufgenommen, auf das Sie in einer der enthaltenen Header-Dateien verweisen.

Wenn Sie beispielsweise ein Include in Ihrem Code haben:

#import <Parse/Parse.h>

Es erfordert wahrscheinlich ein unterstützendes Framework und Sie müssen es in Ihre App einbinden. Haben Sie das parse.framework aus Xcode heraus?

Xcode Frameworks

1
ryebread

In vielen Frameworks muss das Flag -ObjC als Anderes verknüpftes Flag festgelegt werden, wohingegen Parse es Ihnen nicht erlaubt, fortzufahren, wenn Sie dies tun. Um damit umzugehen, können Sie eines der folgenden Dinge tun. Ich habe ein Beispiel für ein Google Maps SDK gezeigt, das das Flag -ObjC benötigt, aber aufgrund von Parse im selben Projekt kann ich es nicht direkt verwenden:

Lösung 1 - Verwenden des Flags force_load

Verwenden Sie force_load, um ein bestimmtes Framework oder eine bestimmte Bibliothek zu laden, anstatt -ObjC als anderes verknüpftes Flag festzulegen.

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

Lösung 2 - Verwenden von Facebook SDK

Fügen Sie einfach das Facebook SDK als separates Framework hinzu, damit Sie das -ObjC-Flag verwenden können. Stellen Sie außerdem sicher, dass Sie Accounts.framework Und Social.framework Hinzugefügt haben. Wenn Sie Bolt.framework hinzugefügt und Parse blank project verwendet haben, entfernen Sie Bolt.framwork, Um das doppelte Symbol zu behandeln. Wenn es immer noch wenige Fehler gibt, entfernen Sie das Accounts and Social Framework und fügen Sie es erneut hinzu (dies ist der Fall, wenn Sie das leere Standardprojekt Parse verwendet haben).

0
Mrug