谷歌分析 SDK iOS10
Posted
技术标签:
【中文标题】谷歌分析 SDK iOS10【英文标题】:Google Analytics SDK iOS10 【发布时间】:2016-08-09 12:03:40 【问题描述】:我已经从 cocoa pod 3.14 版安装了 Google Analytics
id<GAITracker> tracker = [[GAI sharedInstance] trackerWithTrackingId:oneTrackId];
ios 10 在代码行中崩溃
NSString *user_id = [tracker get:kGAIUserId];
错误 * 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“* -[GAITrackerModel valueForKey:]: 尝试检索 nil 键的值'
【问题讨论】:
【参考方案1】:Apple 在 iOS 10 中更改了 valueForKey:
方法的行为。
以前使用参数nil
调用valueForKey:
会导致使用nil
调用valueForUndefinedKey:
,如果此方法未被覆盖,则会失败。但是现在如果没有这个调用,它会立即失败。
GAITrackerModel
已覆盖 valueForUndefinedKey:
,无论输入参数如何都返回 nil。
我可以提供方法调配来恢复以前的行为作为临时解决方案(Google 应该解决这个问题,并且这段代码还没有准备好生产,但在那之前):
#import <objc/runtime.h>
void SwizzleInstanceMethod(Class classToSwizzle, SEL origSEL, Class myClass, SEL newSEL)
Method methodToSwizzle = class_getInstanceMethod(classToSwizzle, origSEL);
Method myMethod = class_getInstanceMethod(myClass, newSEL);
class_replaceMethod(classToSwizzle, newSEL, method_getImplementation(methodToSwizzle), method_getTypeEncoding(methodToSwizzle));
class_replaceMethod(classToSwizzle, origSEL, method_getImplementation(myMethod), method_getTypeEncoding(myMethod));
@interface FixGoogleSDKiOS10 : NSObject
@end
@implementation FixGoogleSDKiOS10
+ (void)load
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^
SwizzleInstanceMethod([NSObject class], @selector(valueForKey:), [self class], @selector(yb_valueForKey:));
);
- (nullable id)yb_valueForKey:(NSString *)key
if (!key)
return [self valueForUndefinedKey:key];
return [self yb_valueForKey:key];
@end
【讨论】:
【参考方案2】:我们发布了 3.17 版的 Google Analytics(分析)iOS SDK。它包含许多改进和错误修复,包括针对此问题的修复。
CocoaPod:https://cocoapods.org/pods/GoogleAnalytics
SDK下载:https://developers.google.com/analytics/devguides/collection/ios/v3/sdk-download
【讨论】:
以上是关于谷歌分析 SDK iOS10的主要内容,如果未能解决你的问题,请参考以下文章