【问题标题】:GoogleAnalytics-iOS-SDK on CocoaPods 0.36 with Swift带有 Swift 的 CocoaPods 0.36 上的 GoogleAnalytics-iOS-SDK
【发布时间】:2015-03-01 10:02:05
【问题描述】:

任何人都知道如何使用 CocoaPods 0.36 为 Swift 编写桥接头?

我尝试了这些方法。

(1)

#import <GoogleAnalytics-iOS-SDK/GAI.h>

=> 这是 cocoapods 0.35 风格。编译失败。

(2)

#import <GoogleAnalytics-iOS-SDK/GoogleAnalytics-iOS-SDK/GAI.h>

=> 编译失败。

(3)

#import "../Pods/GoogleAnalytics-iOS-SDK/GoogleAnalytics/Library/GAI.h"

=> 可以遵守。但链接失败。

【问题讨论】:

  • 还有问题吗?第一种方法应该可行。

标签: ios swift cocoapods


【解决方案1】:

我成功地通过 Cocoapods 使用框架将 Google Analytics iOS SDK 3.10 包含到我的 Swift 项目中,遵循这些步骤。

在 Podfile 添加(注意use_frameworks!):

source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '8.0'
use_frameworks!

target "XXXX" do
    pod 'GoogleAnalytics-iOS-SDK', '~> 3.10'
end

target "XXXXTests" do
    pod 'GoogleAnalytics-iOS-SDK', '~> 3.10'
end

AppDelegate 导入部分添加:

import GoogleAnalytics_iOS_SDK

application didFinishLaunchingWithOptions方法上添加:

    GAI.sharedInstance().trackUncaughtExceptions = true
    GAI.sharedInstance().dispatchInterval = 20
    GAI.sharedInstance().logger.logLevel = GAILogLevel.Verbose
    GAI.sharedInstance().trackerWithTrackingId("XXXX")
    GAI.sharedInstance().defaultTracker.allowIDFACollection = true

此时,您的代码将无法编译。您需要手动将其他依赖项添加到您的目标中,包括应用程序和单元测试(如 https://developers.google.com/analytics/devguides/collection/ios/v3/#headers 所示)。

  • CoreData.framework
  • SystemConfiguration.framework
  • libz.dylib
  • libsqlite3.dylib
  • libGoogleAnalyticsServices.a

注意libGoogleAnalyticsServices.a。出于某种原因,在使用框架时,Cocoapods 不包含此功能。如果不添加此文件,链接器将失败并出现以下错误:

Undefined symbols for architecture x86_64: "_OBJC_CLASS_$_GAI", referenced from: __TMaCSo3GAI in AppDelegate.o

为了添加它,我手动下载了 SDK(从此页面:https://developers.google.com/analytics/devguides/collection/ios/resources)并将libGoogleAnalyticsServices.a 拖到我的项目中,确保它已添加到两个目标中,并且选中了“复制”复选框。

添加文件和其他提到的依赖项后,项目会正确构建。

似乎 Cocoapods 只包含来自 Google Analytics SDK 的头文件。此解决方案并不完美,但避免了要求仅为 Google Analytics 添加桥接头。

【讨论】:

  • 它可以工作,但我仍然收到一堆警告,说一个类被实现了两次(objc[27350]: Class TAGDataProvider is implemented in both ...)
  • 以这种方式尝试将 GoogleAnalytics 作为静态库作为动态库导入。因此,您最终会收到很多类似于“Class TAG* is implemented in both GoogleAnalyticsSDK.framework and AppName.app/AppName”的警告
  • 这个方法对我有用,但是在看到所有的消息噪音之后,由于我已经导入了其他库,我最终只是把整个东西放在我的项目中,与 CocoaPods 分开。我不确定这是 podspec 还是 CocoaPods 中的错误。
  • 是的,我也看到了警告。我有兴趣找到更好的解决方案。
【解决方案2】:

我在 CocoaPods 0.39.0 上遇到了类似的问题。

$(inherited) in build setting 'OTHER_LDFLAGS' 解决了这个问题。

https://stackoverflow.com/a/32004207/3129306

【讨论】:

  • 使用 2.3.2016 的最新 GA -- 这为我解决了问题!
【解决方案3】:

目前遇到同样的问题...

我通过以下方式使桥接头工作:

#import <GoogleAnalytics_iOS_SDK/GAI.h>
#import <GoogleAnalytics_iOS_SDK/GAITrackedViewController.h>
#import <GoogleAnalytics_iOS_SDK/GAIDictionaryBuilder.h>
#import <GoogleAnalytics_iOS_SDK/GAIFields.h>

不幸的是,虽然它通过了构建,但我无法在我的项目中使用它。如果我发现更多,我会更新......

【讨论】:

  • 找到什么了吗?我也卡住了。
  • 我做了一些研究和试验,发现第一种方法应该可行。
【解决方案4】:

使用桥接头时,您应该能够使用以下导入语句导入 Google Analytics iOS SDK:

#import <GoogleAnalytics-iOS-SDK/GAI.h>

如果您将 pod 用作框架(通过在 podfile 中设置“use_frameworks!”),则不需要桥接文件。在 swift 类中,您只需使用以下语句将其导入:

import GoogleAnalytics_iOS_SDK

如果这不起作用,我认为您的项目设置有问题。要解决这个问题,我需要更多信息。

【讨论】:

  • 你能用“use_frameworks!”运行它吗?当我尝试访问 GAI.sharedInstance 时,我仍然收到链接器错误....
  • 我的反应还为时过早,我仍然收到错误消息。当我有答案时,我会通知你。
  • Google Analytics SDK 似乎仍然不支持 use_frameworks!我手动将它添加到我的项目中,而不是使用可可豆荚。
猜你喜欢
  • 2015-07-13
  • 2015-07-18
  • 1970-01-01
  • 2015-08-08
  • 1970-01-01
  • 2015-05-15
  • 2017-06-13
  • 1970-01-01
  • 2015-04-22
相关资源
最近更新 更多