带有 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 应用程序)