我最近升級到iOS4 SDK和我的應用程序不再編譯爲模擬器,但確實爲設備編譯。libGoogleAnalytics.a鏈接問題與iPhone iOS4模擬器
這是由於第三方庫libGoogleAnalytics.a。該解決方案似乎是爲了發佈一個新的符合新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:
[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
一個在谷歌論壇的建議是創建一個虛擬實現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
然而,這是不是爲我工作,是有什麼我失蹤?通過谷歌分析論壇發現
不錯的發現!這也是我的問題。 – 2010-06-28 18:25:23
會開始另一個問題,但是,你會很好地說*你對GANTracker_stub.m做了什麼?論壇上的人們說要將代碼複製到GANTracker_stub.m中,但接下來不做什麼?使用-remove i386解決方案在我看來似乎不允許在SIM下運行? – Jann 2010-06-29 17:57:13
我剛剛創建使用XCode添加了一個新文件,將其稱爲GANTracker_Stub.m。刪除了GANTracker_Stub.h文件並將上面的代碼複製到其中。然後當你編譯你的項目時,GANTracker_Stub.m會自動覆蓋靜態庫中的GANTracker實現。那有意義嗎? – 2010-06-30 10:47:20