【问题标题】:Google Analytics in iOS 8 using Swift don't work使用 Swift 的 iOS 8 中的 Google Analytics 不起作用
【发布时间】:2014-11-10 11:10:20
【问题描述】:

我已将Google Analytics library 集成到我的项目中。

然后我配置了bridging header file,并添加了以下标题Google Analytics

#import "Libraries/GoogleAnalytics/GAI.h"
#import "Libraries/GoogleAnalytics/GAIFields.h"
#import "Libraries/GoogleAnalytics/GAILogger.h"
#import "Libraries/GoogleAnalytics/GAITracker.h"
#import "Libraries/GoogleAnalytics/GAIDictionaryBuilder.h"

AppDelegate.swift 中的库初始化编译运行正常。 我添加以下代码来跟踪事件

var tracker = GAI.sharedInstance().defaultTracker
tracker.send(GAIDictionaryBuilder.createEventWithCategory(category, action: action, label: label, value: value).build())

尝试生成构建时,出现以下错误

Undefined symbols for architecture x86_64:
  "_NSOverwriteMergePolicy", referenced from:
    -[GAIDataStore contextWithModel:URL:] in libGoogleAnalyticsServices.a(GAIDataStore.o)
  "_NSSQLiteErrorDomain", referenced from:
    -[GAIDataStore performBlockAndWait:withError:] in libGoogleAnalyticsServices.a(GAIDataStore.o)
  "_NSSQLiteStoreType", referenced from:
    -[GAIDataStore coordinatorWithModel:URL:] in libGoogleAnalyticsServices.a(GAIDataStore.o)
  "_OBJC_CLASS_$_NSAttributeDescription", referenced from:
    objc-class-ref in libGoogleAnalyticsServices.a(GAICoreDataUtil.o)
  "_OBJC_CLASS_$_NSEntityDescription", referenced from:
    objc-class-ref in libGoogleAnalyticsServices.a(GAIDataStore.o)
    objc-class-ref in libGoogleAnalyticsServices.a(GAICoreDataUtil.o)
  "_OBJC_CLASS_$_NSFetchRequest", referenced from:
    objc-class-ref in libGoogleAnalyticsServices.a(GAIDataStore.o)
  "_OBJC_CLASS_$_NSManagedObjectContext", referenced from:
    objc-class-ref in libGoogleAnalyticsServices.a(GAIDataStore.o)
  "_OBJC_CLASS_$_NSManagedObjectModel", referenced from:
    objc-class-ref in libGoogleAnalyticsServices.a(GAICoreDataUtil.o)
  "_OBJC_CLASS_$_NSPersistentStoreCoordinator", referenced from:
    objc-class-ref in libGoogleAnalyticsServices.a(GAIDataStore.o)
  "_SCNetworkReachabilityCreateWithName", referenced from:
    _kDefaultReachabilityApi in libGoogleAnalyticsServices.a(GAIReachabilityChecker.o)
  "_SCNetworkReachabilityScheduleWithRunLoop", referenced from:
    _kDefaultReachabilityApi in libGoogleAnalyticsServices.a(GAIReachabilityChecker.o)
  "_SCNetworkReachabilitySetCallback", referenced from:
    _kDefaultReachabilityApi in libGoogleAnalyticsServices.a(GAIReachabilityChecker.o)
  "_SCNetworkReachabilityUnscheduleFromRunLoop", referenced from:
    _kDefaultReachabilityApi in libGoogleAnalyticsServices.a(GAIReachabilityChecker.o)
  "_deflate", referenced from:
    +[GAICompressionUtil gai_dataByCompressingBytes:length:compressionLevel:mode:] in libGoogleAnalyticsServices.a(GAICompressionUtil.o)
  "_deflateEnd", referenced from:
    +[GAICompressionUtil gai_dataByCompressingBytes:length:compressionLevel:mode:] in libGoogleAnalyticsServices.a(GAICompressionUtil.o)
  "_deflateInit2_", referenced from:
    +[GAICompressionUtil gai_dataByCompressingBytes:length:compressionLevel:mode:] in libGoogleAnalyticsServices.a(GAICompressionUtil.o)
  "_inflate", referenced from:
    +[GAICompressionUtil gai_dataByInflatingBytes:length:isRawData:] in libGoogleAnalyticsServices.a(GAICompressionUtil.o)
  "_inflateEnd", referenced from:
    +[GAICompressionUtil gai_dataByInflatingBytes:length:isRawData:] in libGoogleAnalyticsServices.a(GAICompressionUtil.o)
  "_inflateInit2_", referenced from:
    +[GAICompressionUtil gai_dataByInflatingBytes:length:isRawData:] in libGoogleAnalyticsServices.a(GAICompressionUtil.o)
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

我正在使用 Xcode 6 GM 并尝试编译在 iPhone 5s 模拟器中运行的应用程序。

EDIT1:

所需的库已添加

  • CoreData.framework
  • SystemConfiguration.framework
  • libz.dylib

我已经部分解决了在桥接头文件中添加以下导入的错误

#import <CoreData/CoreData.h>
#import <SystemConfiguration/SystemConfiguration.h>

错误信息简化为

Undefined symbols for architecture x86_64:
  "_deflate", referenced from:
    +[GAICompressionUtil gai_dataByCompressingBytes:length:compressionLevel:mode:] in libGoogleAnalyticsServices.a(GAICompressionUtil.o)
  "_deflateEnd", referenced from:
    +[GAICompressionUtil gai_dataByCompressingBytes:length:compressionLevel:mode:] in libGoogleAnalyticsServices.a(GAICompressionUtil.o)
  "_deflateInit2_", referenced from:
    +[GAICompressionUtil gai_dataByCompressingBytes:length:compressionLevel:mode:] in libGoogleAnalyticsServices.a(GAICompressionUtil.o)
  "_inflate", referenced from:
    +[GAICompressionUtil gai_dataByInflatingBytes:length:isRawData:] in libGoogleAnalyticsServices.a(GAICompressionUtil.o)
  "_inflateEnd", referenced from:
    +[GAICompressionUtil gai_dataByInflatingBytes:length:isRawData:] in libGoogleAnalyticsServices.a(GAICompressionUtil.o)
  "_inflateInit2_", referenced from:
    +[GAICompressionUtil gai_dataByInflatingBytes:length:isRawData:] in libGoogleAnalyticsServices.a(GAICompressionUtil.o)
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

EDIT2:

我终于解决了这个问题。

Target Settings -> Build Settings -> Linking -> Other Linker Flags 添加以下标志:-lz

【问题讨论】:

  • 我刚刚将 Google Analytics for mobile 添加到我的 Swift 应用程序中,而不必经历你的那么多麻烦。我只需要将 GAI.h 和 添加到桥接头中,它就可以正常工作。不必摆弄构建设置。自从您发布后,他们可能会增加更好的支持。

标签: swift google-analytics ios8 xcode6


【解决方案1】:

@Ezequiel Perez:您必须包含目标链接库。

CoreData.framework
SystemConfiguration.framework
libz.dylib

尝试包括这个....

【讨论】:

    【解决方案2】:

    您必须明确添加 GA 需要的所有 Objective-C 库。

    在错误输出中,您可以看到它正在寻找核心数据,但找到了“未定义的符号”。这表明它缺少库。请注意,Objective-C 库与您在 Swift 中导入的模块不同。

    要解决此问题,请转到目标的构建阶段并链接到必要的库,从 CoreData.framework 开始。请参阅 GA 文档,了解您需要哪些其他库。

    编辑:

    我制作了一个快速应用程序,添加了 GA 并通过添加库使其工作。也许您可以尝试删除 libs.dylib 库并重新添加它。我还建议仅按名称包含标题

    #include "GAI.h"
    

    【讨论】:

    • 已添加所需的库。阅读您的回答后,我做了一些更改并更新了问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-25
    • 2016-05-04
    相关资源
    最近更新 更多