带有 Swift 的 CocoaPods 0.36 上的 GoogleAnalytics-iOS-SDK

Posted

技术标签:

【中文标题】带有 Swift 的 CocoaPods 0.36 上的 GoogleAnalytics-iOS-SDK【英文标题】:GoogleAnalytics-iOS-SDK on CocoaPods 0.36 with Swift 【发布时间】: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"

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

【问题讨论】:

还有问题吗?第一种方法应该可行。 【参考方案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 中的错误。 是的,我也看到了警告。我有兴趣找到更好的解决方案。 作为后续,这不再适用于 CocoaPods 0.37.0 和 0.37.1(请参阅 Can't find headers for GoogleAnalytics-iOS-SDK with Cocoapods 0.37, Swift, frameworks 和 Missing header files for 'static object and headers' pod in 0.37.0. Swift, use_frameworks!)。【参考方案2】:

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

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

https://***.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!我手动将它添加到我的项目中,而不是使用可可豆荚。

以上是关于带有 Swift 的 CocoaPods 0.36 上的 GoogleAnalytics-iOS-SDK的主要内容,如果未能解决你的问题,请参考以下文章

没有带有 cocoapods 和 swift 的模块“RestKit”

添加 watchkit 时带有 cocoapods 的 Swift 项目出现新错误

带有 Objective-C 文件的 Swift Cocoapods 给出了未定义的符号

Xcode 11.4 Objective-C 语言的快速帮助,而不是 swift 语言,用于带有 Cocoapods 的 firebase API(iOS 13.4 应用程序)

CocoaPods 在 Xcode 7 Swift 2.2 中没有这样的模块

在 swift 项目中集成 swift 框架,都使用 cocoapods