Parse para iOS: errores al intentar ejecutar la aplicación


80

He estado trabajando con Parse SDK y seguí la guía de pasos rápidos. Cuando intento ejecutar, obtengo estos 8 errores. ¿Alguna idea de por qué? Parece algo relacionado con la parte de Facebook de Parse que no estoy usando.

 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)

Parece que necesita agregar los archivos .m al destino: stackoverflow.com/a/5300901/620197
Mike D

2
suena como si cualquiera de esos 2 indicadores -ObjC y -all_load están presentes, el SDK de Facebook debe estar presente / instalado ... o puede eliminar esos indicadores si realmente no los necesita, pero creo que restKit los necesita, por eso los necesito. parse.com/questions/…
topwik

solo agregue bolt.framework y facebook.framework con -objc flag.its funciona para mí.
Shauket Sheikh

ld: marco no encontrado Metal para arquitectura armv7 clang: error: el comando del enlazador falló con el código de salida 1 (use -v para ver la invocación)
sanjeev sharma

Respuestas:


137

Este es un tipo de error asociado con la versión Parse iOS 1.1.33 ya que varias personas están viendo los mismos errores, incluido yo mismo.

Hay un par de soluciones:

Si no está utilizando una biblioteca que requiera el indicador de vinculador -ObjC, puede eliminar -ObjC de su proyecto:

Configuración de compilación> Otras banderas del vinculador> eliminar -ObjC

o si está utilizando una biblioteca que requiere esa marca, puede agregar el SDK de Facebook.

Ambas opciones eliminarán los errores. Con suerte, solucionan este problema, ya que no necesito el SDK de Facebook en mi aplicación.

Siga la discusión aquí:

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


Eliminar -ObjC no lo solucionó para mí. Sin embargo, la respuesta de dbquarrel a continuación sí.
calzar

2
eliminé el indicador del vinculador -all_load y eso lo solucionó para mí, por lo que puede actualizar la respuesta para incluir también ese indicador C:
A'sa Dickens

1
En Otros indicadores del vinculador que tenía '-all_load' antes, desde 'instalación de pod' sugirió establecer 'otro indicador del vinculador' en '$ (heredado)', funcionó sin ningún problema.
turbo

¿Puede indicar dónde encontrar y cómo agregar Facebook SDK a Xcode 6.2 (iOS 8)? Tengo developers.facebook.com/docs/ios donde después de instalar Facebook.pkg no puedo encontrar el FacebookSDK.frameworkarchivo y tengo otros archivos innecesarios.
Incpetor

Hay un problema si quita el modificador del vinculador -ObjC. La biblioteca libCordova.a especifica algunas categorías en NSString que no se cargarán si se elimina -ObjC. Una solución es eliminar libCordova.a de los marcos vinculados y agregar esto a la configuración de compilación Otras banderas del vinculador: -force_load $ (BUILT_PRODUCTS_DIR) /libCordova.a
Nijil Nair

102

Aquí hay una solución potencialmente más simple que descargar, compilar e instalar el kit FB, que es un poco grande y engorroso. Tenga en cuenta que, por supuesto, no podrá usar ninguna de las funciones de tipo FB en Parse y se encontrará con problemas graves si activa alguno de los códigos de Parse que esperan usar estos símbolos ficticios. Pero, si te mantienes alejado de ellos, estarás bien, creo. Entonces...

  1. Cree un objeto en su aplicación llamado FBMissingSymbols

  2. Elimina el .h no lo necesitarás

  3. Pon esto en el .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
Resolvió mi problema. Gracias y +1
Ali Sufyan

2
¡Rápido y sencillo! Gracias. +1
David Da Silva Contín

1
Gracias @dbquarrel, +1
iBhavik

2
Esta es una solución mágica ... si no desea la integración de FB en su aplicación, hágalo.
Bharat

1
La solución más sencilla :-)
Muzammil

27

Tienes que eliminar el antiguo ParseFacebookUtils.frameworky mantener el nuevo ParseFacebookUtilsV4.frameworkpara que funcione.


3
¡OYE, DESPLAZANDO ESTE HILO, ESTA ES LA RESPUESTA CORRECTA! / \
Raphael Oliveira

¡Esto es lo que me lo arregló! Ninguno de los comentarios de los desarrolladores en los sitios web de Parse u otras respuestas aquí funcionó ... ¡+9000 si pudiera!
WendiKidd

Fácil y perfecto. ¡Gracias!
Lapidus

Sí ... esto es todo. ¿Por qué esta vieja biblioteca rota todavía se envía con Parse SDK? Esto no debería ser tan complejo.
thefaj

23

Me encantó la respuesta de dbquarrel, pero ya no funciona porque le faltan algunas clases sociales nuevas.

Entonces haz lo mismo, pero en su lugar, agrega esto:

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
¡Gracias por actualizar esto!
sridvijay

Cree un objeto en su aplicación llamado FBMissingSymbolsEliminar el .h (porque no lo necesita), luego ponga lo anterior enFBMissingSymbols.m
Nate Lee

¿No es .mnecesario #import <Foundation/Foundation.h>incluir este nuevo archivo en la parte superior?
AdamT

10

Verifique y asegúrese de que no tenga dos versiones del marco "ParseFacebookUtils" agregadas allí:

ParseFacebookUtilsV4 y ParseFacebookUtils

Una vez que eliminé ParseFacebookUtils y guardé ParseFacebookUtilsV4, funcionó bien.


Este era exactamente el problema. Una vez eliminado, ¡los 9 errores desaparecieron! Gracias
Nick89

7

Mi solución definitivamente funcionará y puede usar -ObjC en otras banderas del enlazador.

  1. Agrega "Social.framework", "Account.framework"
  2. Agregar "FacebookSDK.framework"

Saludos .... ahora funciona ..... y no es necesario eliminar -ObjC.


Esta es una respuesta realmente simple y excelente. Pero lo único es que en mi caso no agregué Facebook.framework y aún así construyó la aplicación sin errores. Pero de todos modos, +1 para una solución simple.
Codificador hp iOS

Para mí, fue simplemente agregar el "Marco.social", "Marco.cuenta". Gracias, funciona como un encanto :)
evya

3

Parece que es posible que deba agregar el 'marco de cuentas' y / o el marco social.


2

Un complemento a la respuesta de @blueHula. Parse ha eliminado Facebook SDK de su marco, lo que significa que a partir de alguna versión determinada (tal vez 1.1.33) la integración de parse.framework debería ir acompañada de la integración de FB SDK de forma independiente.

Consulte este enlace. utilizando el sdk de parse ios sin incluir el sdk de facebook

El punto clave es usar -force_load $(SRCROOT)/path/libname.apara vincular con las bibliotecas de terceros necesarias, en lugar de usar -all_loady-ObjC


1

Es un error del vinculador ... No está incluyendo un marco necesario en su proyecto al que hace referencia en uno de los archivos de encabezado incluidos.

Entonces, por ejemplo, si tiene una inclusión en su código:

#import <Parse/Parse.h>

Probablemente requiera un marco de soporte y debe incluirlo en su aplicación. ¿Incluiste el parse.frameworkdesde dentro de Xcode?

Marcos de Xcode


1

Yo tenía el mismo uso y el único tercero que tenía era el SDK de PayPal. Después de eliminar -ObjC, todo se construyó bien. (siempre haga una copia de seguridad de su proyecto antes de cambiar la configuración)


1

es 2015 y tuve el mismo error. Desafortunadamente, ninguna de las respuestas anteriores funcionó para mí. Pero esto hizo:

Target> Build Phases> Link Binary With Libraries y luego agregue libstdc ++. 6.dylib

Esto resolvió mi problema.


parece solucionar parte de los problemas
SKYnine

0

Hay muchos marcos que necesitan establecer el indicador -ObjC como Otro indicador vinculado, mientras que Parse no le permite continuar si lo hace. Para lidiar con esto, puede hacer una de las siguientes cosas. He mostrado un ejemplo de Google Maps SDK que necesita la bandera -ObjC, pero debido a Parse en el mismo proyecto, no puedo usarlo directamente:

Solución 1: uso de force_load Flag

En lugar de establecer el indicador -ObjC como Otro indicador vinculado, use el indicador force_load para cargar un marco o biblioteca en particular.

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

Solución 2: uso del SDK de Facebook

Simplemente agregue el SDK de Facebook como un marco separado, esto le permitirá usar la bandera -ObjC. También asegúrese de haber agregado Accounts.frameworky Social.framework. Si ha agregado Bolt.framework y usa Parse en blanco, entonces para tratar con el símbolo duplicado, elimine Bolt.framwork. Si aún tiene algunos errores, elimine las cuentas y el marco social y agréguelo nuevamente (este será el caso si ha utilizado el proyecto en blanco predeterminado de Parse).


-1

Me molestó este problema durante muchos días. Usé cocoapods para administrar todo el tercer SDK.

Así es como resolví este problema. Vaya al proyecto de pod y establezca el elemento "solo arquitectura de compilación" en NO.

¡Reconstruya el proyecto de pod y luego desaparezcan los errores de enlace! ayuda esto puede ayudar a alguien que esté usando cocoapods.ingrese la descripción de la imagen aquí



-1

Esto se puede eliminar del archivo de proyecto ubicado en <projectname>/cordova/<projectname>/platforms/ios/<projectname>.xcodeproj/project.pbxprojy

Busque el archivo -ObjC, hay varias ubicaciones. Se parece a esto:

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

Instale cocoaPods y agregue esto a su Podfile:

pod 'Facebook-iOS-SDK'
pod 'Parse'
pod 'ParseFacebookUtils'
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.