2010-06-27 17 views
6

Recientemente me actualicé al iOS SDK y mi aplicación ya no se compila para el simulador, pero hace para compilar para el dispositivo.libGoogleAnalytics.a problemas de vinculación con el simulador de iPhone iOS4

Esto se debe a la biblioteca de terceros libGoogleAnalytics.a. La solución parece ser que Google libere una nueva biblioteca estática que cumpla con el nuevo SDK. Desafortunadamente, no hay noticias de ninguna fecha de lanzamiento, y debido a la nueva licencia del SDK, es posible que nunca publiquen una nueva biblioteca.

http://www.google.com/support/forum/p/Google+Analytics/thread?tid=0e35876711dc99b1&hl=en

estoy recibiendo los siguientes errores de compilación:

Undefined symbols: 
    ".objc_class_name_NSObject", referenced from: 
     .objc_class_name_GANTCPSocket in libGoogleAnalytics.a(GANTCPSocket.o) 
     .objc_class_name_GTMLogger in libGoogleAnalytics.a(GTMLogger.o) 
     .objc_class_name_GTMLogBasicFormatter in libGoogleAnalytics.a(GTMLogger.o) 
     .objc_class_name_GTMLogLevelFilter in libGoogleAnalytics.a(GTMLogger.o) 
     .objc_class_name_GTMLogNoFilter in libGoogleAnalytics.a(GTMLogger.o) 
     .objc_class_name_GTMLogASLWriter in libGoogleAnalytics.a(GTMLogger+ASL.o) 
     .objc_class_name_GTMLoggerASLClient in libGoogleAnalytics.a(GTMLogger+ASL.o) 
     .objc_class_name_GANDataDispatcher in libGoogleAnalytics.a(GANDataDispatcher.o) 
     .objc_class_name_GANHTTPResponseParser in libGoogleAnalytics.a(GANHTTPResponseParser.o) 
     .objc_class_name_GANEvent in libGoogleAnalytics.a(GANEvent.o) 
     .objc_class_name_GTMLoggerRingBufferWriter in libGoogleAnalytics.a(GTMLoggerRingBufferWriter.o) 
     .objc_class_name_GANTracker in libGoogleAnalytics.a(GANTracker.o) 
     .objc_class_name_GANPersistentEventStore in libGoogleAnalytics.a(GANPersistentEventStore.o) 
    ".objc_class_name_NSFileManager", referenced from: 
     [email protected][email protected][email protected] in libGoogleAnalytics.a(GANPersistentEventStore.o) 
    ".objc_class_name_NSString", referenced from: 
     [email protected][email protected][email protected] in libGoogleAnalytics.a(GTMLogger.o) 
     [email protected][email protected][email protected] in libGoogleAnalytics.a(GANTracker.o) 
     [email protected][email protected][email protected] in libGoogleAnalytics.a(GANPersistentEventStore.o) 
    ".objc_class_name_NSError", referenced from: 
     [email protected][email protected][email protected] in libGoogleAnalytics.a(GANTracker.o) 
     [email protected][email protected][email protected] in libGoogleAnalytics.a(GANPersistentEventStore.o) 
    ".objc_class_name_NSFileHandle", referenced from: 
     [email protected][email protected][email protected] in libGoogleAnalytics.a(GTMLogger.o) 
    ".objc_class_name_NSMutableString", referenced from: 
     [email protected][email protected][email protected] in libGoogleAnalytics.a(GANDataDispatcher.o) 
    ".objc_class_name_NSTimer", referenced from: 
     [email protected][email protected][email protected] in libGoogleAnalytics.a(GANTracker.o) 
    ".objc_class_name_NSMutableArray", referenced from: 
     [email protected][email protected][email protected] in libGoogleAnalytics.a(GANDataDispatcher.o) 
     [email protected][email protected][email protected] in libGoogleAnalytics.a(GANPersistentEventStore.o) 
    ".objc_class_name_UIScreen", referenced from: 
     [email protected][email protected][email protected] in libGoogleAnalytics.a(GANDataDispatcher.o) 
    ".objc_class_name_NSProcessInfo", referenced from: 
     [email protected][email protected][email protected] in libGoogleAnalytics.a(GTMLogger.o) 
    "_objc_exception_extract", referenced from: 
     +[GTMLogger sharedLogger] in libGoogleAnalytics.a(GTMLogger.o) 
     +[GTMLogger setSharedLogger:] in libGoogleAnalytics.a(GTMLogger.o) 
     -[GTMLogger setWriter:] in libGoogleAnalytics.a(GTMLogger.o) 
     -[GTMLogger setFormatter:] in libGoogleAnalytics.a(GTMLogger.o) 
     -[GTMLogger setFilter:] in libGoogleAnalytics.a(GTMLogger.o) 
     -[NSFileHandle(GTMFileHandleLogWriter) logMessage:level:] in libGoogleAnalytics.a(GTMLogger.o) 
     -[NSArray(GTMArrayCompositeLogWriter) logMessage:level:] in libGoogleAnalytics.a(GTMLogger.o) 
     -[GTMLogStandardFormatter stringForFunc:withFormat:valist:level:] in libGoogleAnalytics.a(GTMLogger.o) 
     -[GTMLoggerRingBufferWriter count] in libGoogleAnalytics.a(GTMLoggerRingBufferWriter.o) 
     -[GTMLoggerRingBufferWriter droppedLogCount] in libGoogleAnalytics.a(GTMLoggerRingBufferWriter.o) 
     -[GTMLoggerRingBufferWriter reset] in libGoogleAnalytics.a(GTMLoggerRingBufferWriter.o) 
     -[GTMLoggerRingBufferWriter dumpContents] in libGoogleAnalytics.a(GTMLoggerRingBufferWriter.o) 
     -[GTMLoggerRingBufferWriter logMessage:level:] in libGoogleAnalytics.a(GTMLoggerRingBufferWriter.o) 
     +[GANTracker sharedTracker] in libGoogleAnalytics.a(GANTracker.o) 
     +[GANTracker allocWithZone:] in libGoogleAnalytics.a(GANTracker.o) 
     -[GANTracker startTrackerWithAccountID:dispatchPeriod:delegate:] in libGoogleAnalytics.a(GANTracker.o) 
     -[GANTracker trackPageview:withError:] in libGoogleAnalytics.a(GANTracker.o) 
     -[GANTracker trackEvent:action:label:value:withError:] in libGoogleAnalytics.a(GANTracker.o) 
     -[GANTracker stopTracker] in libGoogleAnalytics.a(GANTracker.o) 
     -[GANTracker dispatch] in libGoogleAnalytics.a(GANTracker.o) 
    ".objc_class_name_NSDate", referenced from: 
     [email protected][email protected][email protected] in libGoogleAnalytics.a(GTMLogger.o) 
     [email protected][email protected][email protected] in libGoogleAnalytics.a(GANPersistentEventStore.o) 
    ".objc_class_name_UIDevice", referenced from: 
     [email protected][email protected][email protected] in libGoogleAnalytics.a(GANDataDispatcher.o) 
    "_objc_exception_try_exit", referenced from: 
     +[GTMLogger sharedLogger] in libGoogleAnalytics.a(GTMLogger.o) 
     +[GTMLogger setSharedLogger:] in libGoogleAnalytics.a(GTMLogger.o) 
     -[GTMLogger setWriter:] in libGoogleAnalytics.a(GTMLogger.o) 
     -[GTMLogger setFormatter:] in libGoogleAnalytics.a(GTMLogger.o) 
     -[GTMLogger setFilter:] in libGoogleAnalytics.a(GTMLogger.o) 
     -[NSFileHandle(GTMFileHandleLogWriter) logMessage:level:] in libGoogleAnalytics.a(GTMLogger.o) 
     -[NSArray(GTMArrayCompositeLogWriter) logMessage:level:] in libGoogleAnalytics.a(GTMLogger.o) 
     -[GTMLogStandardFormatter stringForFunc:withFormat:valist:level:] in libGoogleAnalytics.a(GTMLogger.o) 
     -[GTMLoggerRingBufferWriter count] in libGoogleAnalytics.a(GTMLoggerRingBufferWriter.o) 
     -[GTMLoggerRingBufferWriter droppedLogCount] in libGoogleAnalytics.a(GTMLoggerRingBufferWriter.o) 
     -[GTMLoggerRingBufferWriter reset] in libGoogleAnalytics.a(GTMLoggerRingBufferWriter.o) 
     -[GTMLoggerRingBufferWriter dumpContents] in libGoogleAnalytics.a(GTMLoggerRingBufferWriter.o) 
     -[GTMLoggerRingBufferWriter logMessage:level:] in libGoogleAnalytics.a(GTMLoggerRingBufferWriter.o) 
     +[GANTracker sharedTracker] in libGoogleAnalytics.a(GANTracker.o) 
     +[GANTracker allocWithZone:] in libGoogleAnalytics.a(GANTracker.o) 
     -[GANTracker startTrackerWithAccountID:dispatchPeriod:delegate:] in libGoogleAnalytics.a(GANTracker.o) 
     -[GANTracker trackPageview:withError:] in libGoogleAnalytics.a(GANTracker.o) 
     -[GANTracker trackEvent:action:label:value:withError:] in libGoogleAnalytics.a(GANTracker.o) 
     -[GANTracker stopTracker] in libGoogleAnalytics.a(GANTracker.o) 
     -[GANTracker dispatch] in libGoogleAnalytics.a(GANTracker.o) 
    ".objc_class_name_NSDateFormatter", referenced from: 
     [email protected][email protected][email protected] in libGoogleAnalytics.a(GTMLogger.o) 
    "_objc_exception_try_enter", referenced from: 
     +[GTMLogger sharedLogger] in libGoogleAnalytics.a(GTMLogger.o) 
     +[GTMLogger setSharedLogger:] in libGoogleAnalytics.a(GTMLogger.o) 
     -[GTMLogger setWriter:] in libGoogleAnalytics.a(GTMLogger.o) 
     -[GTMLogger setFormatter:] in libGoogleAnalytics.a(GTMLogger.o) 
     -[GTMLogger setFilter:] in libGoogleAnalytics.a(GTMLogger.o) 
     -[NSFileHandle(GTMFileHandleLogWriter) logMessage:level:] in libGoogleAnalytics.a(GTMLogger.o) 
     -[NSArray(GTMArrayCompositeLogWriter) logMessage:level:] in libGoogleAnalytics.a(GTMLogger.o) 
     -[GTMLogStandardFormatter stringForFunc:withFormat:valist:level:] in libGoogleAnalytics.a(GTMLogger.o) 
     -[GTMLoggerRingBufferWriter count] in libGoogleAnalytics.a(GTMLoggerRingBufferWriter.o) 
     -[GTMLoggerRingBufferWriter droppedLogCount] in libGoogleAnalytics.a(GTMLoggerRingBufferWriter.o) 
     -[GTMLoggerRingBufferWriter reset] in libGoogleAnalytics.a(GTMLoggerRingBufferWriter.o) 
     -[GTMLoggerRingBufferWriter dumpContents] in libGoogleAnalytics.a(GTMLoggerRingBufferWriter.o) 
     -[GTMLoggerRingBufferWriter logMessage:level:] in libGoogleAnalytics.a(GTMLoggerRingBufferWriter.o) 
     +[GANTracker sharedTracker] in libGoogleAnalytics.a(GANTracker.o) 
     +[GANTracker allocWithZone:] in libGoogleAnalytics.a(GANTracker.o) 
     -[GANTracker startTrackerWithAccountID:dispatchPeriod:delegate:] in libGoogleAnalytics.a(GANTracker.o) 
     -[GANTracker trackPageview:withError:] in libGoogleAnalytics.a(GANTracker.o) 
     -[GANTracker trackEvent:action:label:value:withError:] in libGoogleAnalytics.a(GANTracker.o) 
     -[GANTracker stopTracker] in libGoogleAnalytics.a(GANTracker.o) 
     -[GANTracker dispatch] in libGoogleAnalytics.a(GANTracker.o) 
    ".objc_class_name_NSUserDefaults", referenced from: 
     [email protected][email protected][email protected] in libGoogleAnalytics.a(GTMLogger.o) 
    ".objc_class_name_NSThread", referenced from: 
     [email protected][email protected][email protected] in libGoogleAnalytics.a(GTMLogger+ASL.o) 
    ".objc_class_name_NSBundle", referenced from: 
     [email protected][email protected][email protected] in libGoogleAnalytics.a(GANDataDispatcher.o) 
    ".objc_class_name_NSAssertionHandler", referenced from: 
     [email protected][email protected][email protected] in libGoogleAnalytics.a(GANTracker.o) 
     [email protected][email protected][email protected] in libGoogleAnalytics.a(GANPersistentEventStore.o) 
    ".objc_class_name_NSLocale", referenced from: 
     [email protected][email protected][email protected] in libGoogleAnalytics.a(GANDataDispatcher.o) 
ld: symbol(s) not found 
collect2: ld returned 1 exit status 

Una sugerencia en el foro de Google es crear una aplicación de relleno de la clase GANTracker para su uso en el simulador. es decir, para crear un archivo de GANTracker_stub.m:

#import "GANTracker.h" 

#if TARGET_IPHONE_SIMULATOR 

@implementation GANTracker 

+ (GANTracker *)sharedTracker 
{ 
    return [[[GANTracker alloc] init] autorelease]; 
} 

- (void)startTrackerWithAccountID:(NSString *)accountID 
       dispatchPeriod:(NSInteger)dispatchPeriod 
        delegate:(id<GANTrackerDelegate>)delegate 
{ 
} 

- (void)stopTracker 
{ 
} 

- (BOOL)trackPageview:(NSString *)pageURL 
     withError:(NSError **)error 
{ 
    return YES; 
} 

- (BOOL)trackEvent:(NSString *)category 
     action:(NSString *)action 
     label:(NSString *)label 
     value:(NSInteger)value 
    withError:(NSError **)error 
{ 
    return YES; 
} 

- (BOOL)dispatch 
{ 
    return YES; 
} 

@end 
#endif 

Sin embargo, esto no funciona para mí, ¿hay algo que me falta?

Respuesta

3

Solución encontrado a través del foro de Google Analytics:

Uso:

lipo libGoogleAnalytics.a -remove i386 -output libGoogleAnalytics2.a

a continuación, eliminar libGoogleAnalytics.a de su proyecto y agregar libGoogleAnalytics2.a

Esto sólo funciona en conjunción con la implementación ficticia de GANTracker como se muestra arriba.

+0

¡Bonito encontrar! Este me ha estado causando problemas también. –

+0

Comenzaría otra pregunta, pero ¿podría decir exactamente qué * hizo * con GANTracker_stub.m? las personas en los foros dicen copiar el código en GANTracker_stub.m, pero ¿qué hacer después? La solución con -remove i386 no me parece que permita correr bajo el simulador? – Jann

+0

Acabo de crear agregué un nuevo archivo usando XCode, lo llamé GANTracker_Stub.m. Se eliminó el archivo GANTracker_Stub.h y se copió el código anterior en él. Luego, cuando compila su proyecto, GANTracker_Stub.m anula automáticamente la implementación de GANTracker en la biblioteca estática. ¿Tiene sentido? –

Cuestiones relacionadas