2012-09-26 12 views
19

Acabo de actualizar el SDK de iOS de Facebook en mi proyecto de 3.0 a 3.1. El proyecto ya no compila. En vez consigo los siguientes errores de enlace:Facebook iOS SDK 3.1 con errores del enlazador de XCode 4.2

Undefined symbols for architecture i386: 
    "_ACFacebookAppIdKey", referenced from: 
     -[FBSession authorizeUsingSystemAccountStore:accountType:permissions:defaultAudience:isReauthorize:] in FacebookSDK(FBSession.o) 
    "_ACFacebookAudienceEveryone", referenced from: 
     -[FBSession authorizeUsingSystemAccountStore:accountType:permissions:defaultAudience:isReauthorize:] in FacebookSDK(FBSession.o) 
    "_ACFacebookAudienceFriends", referenced from: 
     -[FBSession authorizeUsingSystemAccountStore:accountType:permissions:defaultAudience:isReauthorize:] in FacebookSDK(FBSession.o) 
    "_ACFacebookAudienceKey", referenced from: 
     -[FBSession authorizeUsingSystemAccountStore:accountType:permissions:defaultAudience:isReauthorize:] in FacebookSDK(FBSession.o) 
    "_ACFacebookAudienceOnlyMe", referenced from: 
     -[FBSession authorizeUsingSystemAccountStore:accountType:permissions:defaultAudience:isReauthorize:] in FacebookSDK(FBSession.o) 
    "_ACFacebookPermissionsKey", referenced from: 
     -[FBSession authorizeUsingSystemAccountStore:accountType:permissions:defaultAudience:isReauthorize:] in FacebookSDK(FBSession.o) 
    "_OBJC_CLASS_$_ASIdentifierManager", referenced from: 
     objc-class-ref in FacebookSDK(FBSettings.o) 
ld: symbol(s) not found for architecture i386 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 

El Facebook docs dicen claramente:

El SDK se basa en otros tres marcos (AdSupport, cuentas y Sociales) para usar el Facebook funciones incorporadas en iOS6.

Esos marcos no existen en Xcode 4.2. ¿Existe alguna solución, es decir, puedo descargar (¿dónde?) Y agregar los marcos manualmente a mi proyecto, ¿será suficiente para deshacerse de los errores de compilación o tengo que actualizar a Xcode 4.5?

Respuesta

21

Esos marcos son parte de iOS 6 (bueno, excepto Accounts, que es de iOS 5). No podrás usarlos sin actualizar a Xcode 4.5 y, en consecuencia, iOS 6 SDK.

Aún puede establecer su destino de implementación en iOS 4.3, si esa es su preocupación.

creo que sus opciones son:

  1. Promueve a Xcode 4.5, o
  2. Uso Facebook SDK 3.0.
+0

¡Esta respuesta es correcta! –

+4

Tengo el mismo problema en xcode 4.5. – marcog

+13

@marcog ¿Agregaste los Frameworks? project -> target -> build phases -> link binary con libraries -> + -> select AdSupport, Accounts and Social – borisdiakur

0

Sobri tiene razón. Actualice a Xcode 4.5 o use SDK 3.0 o Si desea usar 3.1, descargue la fuente desde github, modifique el archivo de compilación (básicamente elimine las referencias a los marcos proporcionados por iOS 6.0) y reconstruya el SDK. De esa forma puede usar el SDK 3.1 y ejecutarlo en versiones anteriores de XCode.

6

El SDK se basa en otros tres marcos (AdSupport, Cuentas y Social).

Para agregar estos, vaya a la sección 'Frameworks vinculados y bibliotecas' del panel Resumen del objetivo y agréguelos.

+0

lea toda la pregunta, por favor. No existen tales marcos (a excepción de las cuentas) en xcode 4.2 – borisdiakur

+0

Sí, debe usar xcode 4.5 – Burak

9

Para dejar las cosas claras:

Para XCode 4.5:

Si utiliza FB SDK3.0, sólo tiene que añadir cuentas y marcos FacebookSDK.

Si utiliza FB SDK3.1, debe agregar marcos de Cuentas, FacebookSDK, Social y AdSupport.

Si utiliza FB SDK3.2 ++, compruebe usted mismo qué otros marcos puede o no necesitar. ;)

Espero que lo resume muy bien para todos.

0

Los pasos siguientes pueden ser útiles para resolver este problema

  1. Descargar Facebook SDK de iOS 3.0 de enlaces presentes en la URL http://developers.facebook.com/ios/features/whats-new-ios-sdk-3/
  2. Añadir el marco FacebookSDK del directorio de documentos Mac
  3. Añadir sqlite3 para proyectar

Entonces, he probado el código en http://developers.facebook.com/docs/howtos/login-with-facebook-using-ios-sdk/ con los siguientes cambios (ya que es Facebook para iOS SDK 3,1)

  1. Reemplazar openActiveSessionWithReadPermissions con openActiveSessionWithPermissions
  2. Reemplazar con [FBSession.activeSession handleDidBecomeActive];[FBSession activeSession];

Esto funcionó para mí. Pruébalo una vez.

Gracias, prodeveloper.

+0

No funciona para mí ... – pocjoc

Cuestiones relacionadas