2016-08-09 24 views
2
私はコードの行にiOSの10に、カカオポッドバージョン3.14

GoogleアナリティクスSDK iOS10

id<GAITracker> tracker = [[GAI sharedInstance] trackerWithTrackingId:oneTrackId]; 

クラッシュからGoogle Analyticsをインストールしている

NSString *user_id = [tracker get:kGAIUserId]; 

エラーアプリを終了 *キャッチされない例外によりへ'NSInvalidArgumentException'、理由: '* - [GAITrackerModel valueForKey:]:無制限キーの値を取得しようとしています'

答えて

3

Appleは以前nilvalueForUndefinedKey:を呼び出すには、引数nilリードとvalueForKey:を呼び出すiOSの10で をvalueForKey:メソッドの動作を変更し、このメソッドはオーバーライドされなかった場合、それは失敗します。しかし今、この呼び出しがなければ即座に失敗します。

GAITrackerModelは、valueForUndefinedKey:をオーバーライドしました。これは、入力引数に関係なくnilを返します。

私は一時的な解決策(Googleはこれを修正すべきであり、このコードは、生産準備ができていないですが、それまで)として以前の動作を復元してメソッドのスウィズリングを提供することができます:私たちはバージョン3.17をリリースしました

#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 
関連する問題