Parse für iOS: Fehler beim Versuch, die App auszuführen


80

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)

Es sieht so aus, als müssten Sie die .m-Dateien zum Ziel hinzufügen: stackoverflow.com/a/5300901/620197
Mike D

2
klingt so, als ob, wenn eines dieser beiden Flags -ObjC und -all_load vorhanden ist, das Facebook SDK vorhanden / installiert sein muss ... oder Sie können diese Flags entfernen, wenn Sie sie nicht wirklich brauchen, aber ich denke, restKit braucht sie, daher brauche ich sie. parse.com/questions/…
topwik

füge einfach bolzen.framework und facebook.framework mit -objc flag hinzu. es funktioniert für mich.
Shauket Sheikh

ld: Framework nicht gefunden Metall für Architektur armv7 clang: Fehler: Linker-Befehl mit Exit-Code 1 fehlgeschlagen (benutze -v, um den Aufruf zu sehen)
Sanjeev Sharma

Antworten:


137

Dies ist eine Art Fehler, der mit der Parse iOS 1.1.33-Version verbunden ist, da mehrere Personen dieselben Fehler sehen - ich selbst eingeschlossen.

Es gibt ein paar 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.

Folgen Sie der Diskussion hier:

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


Das Entfernen von -ObjC hat es für mich nicht behoben. Die Antwort von dbquarrel unten war jedoch zutreffend.
Shim

2
Ich habe das Linker-Flag -all_load entfernt und das für mich behoben, sodass Sie die Antwort aktualisieren können, um auch das Flag C
einzuschließen

1
In anderen Linker-Flags hatte ich zuvor '-all_load'. Von 'pod install' wurde vorgeschlagen, 'other linker flag' auf '$ (geerbt)' zu setzen. Es funktionierte ohne Probleme.
Turbo

Können Sie bitte angeben, wo Sie das Facebook SDK zu Xcode 6.2 (iOS 8) finden und wie Sie es hinzufügen können? Ich habe developer.facebook.com/docs/ios, wo ich nach der Installation von Facebook.pkg keine FacebookSDK.frameworkDatei finden kann und andere unnötige Dateien hat.
Incpetor

Es liegt ein Problem vor, wenn Sie den Linker -ObjC entfernen. Die Bibliothek libCordova.a gibt einige Kategorien in NSString an, die nicht geladen werden, wenn -ObjC entfernt wird. Eine Problemumgehung besteht darin, libCordova.a aus den verknüpften Frameworks zu entfernen und dies zur Build-Einstellung "Andere Linker-Flags" hinzuzufügen: -force_load $ (BUILT_PRODUCTS_DIR) /libCordova.a
Nijil Nair

102

Hier ist eine möglicherweise einfachere Problemumgehung als das Herunterladen, Kompilieren und Installieren des FB-Kits, das ziemlich groß und umständlich ist. Beachten Sie, dass Sie natürlich keine der FB-Funktionen in Parse verwenden können und auf schwerwiegende Probleme stoßen, wenn Sie einen der Parse-Codes auslösen, der diese Dummy-Symbole erwartet. Aber wenn du dich von ihnen fernhältst, wirst du in Ordnung sein, denke ich. So...

  1. Erstellen Sie in Ihrer Anwendung ein Objekt namens FBMissingSymbols

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

  3. Geben Sie 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

6
Mein Problem gelöst. Danke und +1
Ali Sufyan

2
Schnell und einfach! Vielen Dank. +1
David Da Silva Contín

1
Danke @dbquarrel, +1
iBhavik

2
Dies ist eine magische Lösung. Wenn Sie keine FB-Integration in Ihre App wünschen, entscheiden Sie sich dafür.
Bharat

1
Einfachste Lösung :-)
Muzammil

27

Sie müssen das alte löschen ParseFacebookUtils.frameworkund das neue behalten ParseFacebookUtilsV4.framework, damit es funktioniert.


3
Hey, du rollst dieses Gewinde, das ist die richtige Antwort! / \
Raphael Oliveira

Das hat es für mich behoben! Keiner der Entwicklerkommentare auf den Websites von Parse oder andere Antworten hier funktionierten ... +9000, wenn ich könnte!
WendiKidd

Einfach und perfekt. Vielen Dank!
Lapidus

Ja ... das ist es. Warum wird diese alte kaputte Bibliothek immer noch mit dem Parse SDK ausgeliefert? Das sollte nicht so komplex sein.
Thefaj

23

Ich habe die Antwort von dbquarrel geliebt, aber sie funktioniert nicht mehr, weil es einige neue soziale Klassen gibt.

Machen 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

3
Vielen Dank für die Aktualisierung!
sridvijay

Erstellen Sie ein Objekt in Ihrer Anwendung mit dem Namen " FBMissingSymbolsLöschen Sie die .h" (weil Sie sie nicht benötigen) und geben Sie die oben genannten Informationen inFBMissingSymbols.m
Nate Lee

Muss diese neue .mDatei nicht #import <Foundation/Foundation.h>oben enthalten sein?
AdamT

10

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.


Das war genau das Problem. Einmal entfernt, gingen alle 9 Fehler weg! Danke
Nick89

7

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

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

Prost .... jetzt funktioniert es ..... und es ist nicht nötig, -ObjC zu entfernen.


Das ist wirklich einfach und eine großartige Antwort. Aber in meinem Fall habe ich das Facebook.framework nicht hinzugefügt und trotzdem hat es die App ohne Fehler erstellt. Aber wie auch immer, +1 für eine einfache Lösung.
HP iOS Coder

Für mich war es nur das Hinzufügen des "Social.framework", "Account.framework". Danke, funktioniert wie ein Zauber :)
Evya

3

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


2

Eine Ergänzung zur Antwort von @blueHula. Parse hat das Facebook SDK aus seinem Framework entfernt, was bedeutet, dass ab einer bestimmten Version (möglicherweise 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 mit dem parse ios sdk ohne das Facebook sdk

Der wichtigste Punkt ist die -force_load $(SRCROOT)/path/libname.aVerknüpfung mit den erforderlichen Bibliotheken von Drittanbietern, anstatt -all_loadund zu verwenden-ObjC


1

Es handelt sich um einen Linkerfehler ... Sie fügen Ihrem Projekt kein benötigtes Framework hinzu, auf das Sie in einer von Ihnen 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 aufnehmen. Haben Sie das parse.frameworkaus Xcode aufgenommen?

Xcode Frameworks


1

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


1

Es ist 2015 und ich hatte gerade den gleichen Fehler. Leider hat keine der oben genannten Antworten für mich funktioniert. Aber das tat:

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

Dies löste das Problem für mich.


scheint einen Teil der Probleme zu beheben
SKYnine

0

Es gibt viele Frameworks, die das Flag -ObjC als anderes verknüpftes Flag setzen müssen, während 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 force_load-Flags

Anstatt das Flag -ObjC als anderes verknüpftes Flag zu setzen, verwenden Sie das Flag force_load, um ein bestimmtes Framework oder eine bestimmte Bibliothek zu laden.

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

Lösung 2 - Verwenden des Facebook SDK

Fügen Sie einfach das Facebook SDK als separates Framework hinzu. Auf diese Weise können Sie das Flag -ObjC verwenden. Auch stellen Sie sicher , dass Sie hinzugefügt haben Accounts.frameworkund Social.framework. Wenn Sie Bolt.framework hinzugefügt und das leere Projekt Parse verwendet haben, entfernen Sie das doppelte Symbol Bolt.framwork. Wenn es immer noch wenige Fehler gibt, entfernen Sie das Konten- und Sozial-Framework und fügen Sie es erneut hinzu (Dies ist der Fall, wenn Sie das leere Standardprojekt Parse verwendet haben).


-1

Ich habe mich viele Tage lang mit diesem Thema beschäftigt. Ich habe Cocoapods verwendet, um das gesamte dritte SDK zu verwalten.

Hier ist, wie ich dieses Problem gelöst habe. Gehen Sie zum Pod-Projekt und setzen Sie den Punkt "Nur Architektur erstellen" auf NEIN.

Pod-Projekt neu erstellen und dann Link-Fehler verschwinden! Hilfe dies kann jemandem helfen, der Cocoapods verwendet.Geben Sie hier die Bildbeschreibung ein


-1

Ich hatte das gleiche Problem. Ich habe das Problem gelöst, indem ich die vorherige Version (1.1.32) von hier heruntergeladen habe:

https://parse.com/downloads/ios/parse-library/1.1.32

(In meinem Fall brauchte ich das -ObjC-Flag)

Bearbeiten: Es scheint, dass die Version nicht mit 64-Bit-Architekturen funktioniert.


-1

Dies kann aus der Projektdatei in <projectname>/cordova/<projectname>/platforms/ios/<projectname>.xcodeproj/project.pbxprojund entfernt werden

Durchsuchen Sie die Datei nach -ObjC, es gibt mehrere Speicherorte. Es sieht aus wie das:

OTHER_LDFLAGS = (
    "-weak_framework",
    CoreFoundation,
    "-weak_framework",
    UIKit,
    "-weak_framework",
    AVFoundation,
    "-weak_framework",
    CoreMedia,
    "-weak-lSystem",
    "-force_load",
    "\"$(BUILT_PRODUCTS_DIR)/libCordova.a\"",
    "-ObjC",
);

-1

Installieren Sie cocoaPods und fügen Sie diese Ihrem Podfile hinzu:

pod 'Facebook-iOS-SDK'
pod 'Parse'
pod 'ParseFacebookUtils'
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.