libGoogleAnalytics.a связывание проблем с симулятором iPhone iOS4 - PullRequest
6 голосов
/ 28 июня 2010

Я недавно обновился до iOS4 SDK, и мое приложение больше не компилируется для симулятора, но делает компиляцию для устройства.

Это связано со сторонней библиотекой libGoogleAnalytics.a .Похоже, что решение для Google состоит в том, чтобы выпустить новую статическую библиотеку, соответствующую новому SDK, к сожалению, нет ни слова о какой-либо дате выпуска, и из-за нового лицензирования SDK они могут никогда не выпустить новую библиотеку.*http://www.google.com/support/forum/p/Google+Analytics/thread?tid=0e35876711dc99b1&hl=en

Я получаю следующие ошибки компиляции:

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:
      literal-pointer@__OBJC@__cls_refs@NSFileManager in libGoogleAnalytics.a(GANPersistentEventStore.o)
  ".objc_class_name_NSString", referenced from:
      literal-pointer@__OBJC@__cls_refs@NSString in libGoogleAnalytics.a(GTMLogger.o)
      literal-pointer@__OBJC@__cls_refs@NSString in libGoogleAnalytics.a(GANTracker.o)
      literal-pointer@__OBJC@__cls_refs@NSString in libGoogleAnalytics.a(GANPersistentEventStore.o)
  ".objc_class_name_NSError", referenced from:
      literal-pointer@__OBJC@__cls_refs@NSError in libGoogleAnalytics.a(GANTracker.o)
      literal-pointer@__OBJC@__cls_refs@NSError in libGoogleAnalytics.a(GANPersistentEventStore.o)
  ".objc_class_name_NSFileHandle", referenced from:
      literal-pointer@__OBJC@__cls_refs@NSFileHandle in libGoogleAnalytics.a(GTMLogger.o)
  ".objc_class_name_NSMutableString", referenced from:
      literal-pointer@__OBJC@__cls_refs@NSMutableString in libGoogleAnalytics.a(GANDataDispatcher.o)
  ".objc_class_name_NSTimer", referenced from:
      literal-pointer@__OBJC@__cls_refs@NSTimer in libGoogleAnalytics.a(GANTracker.o)
  ".objc_class_name_NSMutableArray", referenced from:
      literal-pointer@__OBJC@__cls_refs@NSMutableArray in libGoogleAnalytics.a(GANDataDispatcher.o)
      literal-pointer@__OBJC@__cls_refs@NSMutableArray in libGoogleAnalytics.a(GANPersistentEventStore.o)
  ".objc_class_name_UIScreen", referenced from:
      literal-pointer@__OBJC@__cls_refs@UIScreen in libGoogleAnalytics.a(GANDataDispatcher.o)
  ".objc_class_name_NSProcessInfo", referenced from:
      literal-pointer@__OBJC@__cls_refs@NSProcessInfo 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:
      literal-pointer@__OBJC@__cls_refs@NSDate in libGoogleAnalytics.a(GTMLogger.o)
      literal-pointer@__OBJC@__cls_refs@NSDate in libGoogleAnalytics.a(GANPersistentEventStore.o)
  ".objc_class_name_UIDevice", referenced from:
      literal-pointer@__OBJC@__cls_refs@UIDevice 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:
      literal-pointer@__OBJC@__cls_refs@NSDateFormatter 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:
      literal-pointer@__OBJC@__cls_refs@NSUserDefaults in libGoogleAnalytics.a(GTMLogger.o)
  ".objc_class_name_NSThread", referenced from:
      literal-pointer@__OBJC@__cls_refs@NSThread in libGoogleAnalytics.a(GTMLogger+ASL.o)
  ".objc_class_name_NSBundle", referenced from:
      literal-pointer@__OBJC@__cls_refs@NSBundle in libGoogleAnalytics.a(GANDataDispatcher.o)
  ".objc_class_name_NSAssertionHandler", referenced from:
      literal-pointer@__OBJC@__cls_refs@NSAssertionHandler in libGoogleAnalytics.a(GANTracker.o)
      literal-pointer@__OBJC@__cls_refs@NSAssertionHandler in libGoogleAnalytics.a(GANPersistentEventStore.o)
  ".objc_class_name_NSLocale", referenced from:
      literal-pointer@__OBJC@__cls_refs@NSLocale in libGoogleAnalytics.a(GANDataDispatcher.o)
ld: symbol(s) not found
collect2: ld returned 1 exit status

Одним из предложений на форуме Google является создание фиктивной реализации класса GANTracker для использования в симуляторе.т.е. создать файл 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

Это, однако, не работает для меня, есть что-то, что я пропускаю?

Ответы [ 2 ]

3 голосов
/ 28 июня 2010

Решение найдено на форуме Google Analytics:

Использование:

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

Затем удалите libGoogleAnalytics.a из своего проекта и добавьте libGoogleAnalytics2.a

Это работает только в сочетании с фиктивной реализацией GANTracker, как показано выше.

1 голос
/ 14 декабря 2010

Использование Google Analytics для iOS 0.8 SDK решит эту проблему. Я только что попробовал сегодня.

Скачать с: http://code.google.com/mobile/analytics/download.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...