objective-c - event - google analytics ios sdk v3



GAIUncaughtExceptionHandler stürzt nur iOS 7 ab (1)

Versucht, einen unserer hartnäckigeren Absturzberichte zu zerquetschen. Verdächtig, da es sich ausschließlich um iOS 7 handelt. * Es ist nicht klar, was der Auslöser ist, und dies ist ein relativ kleiner Prozentsatz unserer Benutzer, die auf das Problem stoßen. Es fühlt sich an wie eine Race Condition oder iOS 7. * spezifischer Fehler mit Google Analytics SDK. Meine Interaktionen mit dem SDK sind einfach:

+ (void)trackEvent:(NSString *)category action:(NSString *)action label:(NSString *)label value:(NSNumber *)value
{
    // May return nil if a tracker has not already been initialized with a
    // property ID.
    id tracker = [[GAI sharedInstance] defaultTracker];

    [tracker send:[[GAIDictionaryBuilder createEventWithCategory:category
                                                          action:action
                                                           label:label
                                                           value:value] build]];
}


+ (void)trackScreenView:(NSString *)screenName
{
    // https://developers.google.com/analytics/devguides/collection/ios/v3/screens

    // May return nil if a tracker has not already been initialized with a
    // property ID.
    id tracker = [[GAI sharedInstance] defaultTracker];

    // This screen name value will remain set on the tracker and sent with
    // hits until it is set to a new value or to nil.
    [tracker set:kGAIScreenName
           value:screenName];

    // Previous V3 SDK versions
    // [tracker send:[[GAIDictionaryBuilder createAppView] build]];

    // New SDK versions
    [self visuallyLogTrackingDetails:tracker dictionaryBuilder:[GAIDictionaryBuilder createScreenView]];
}

Es gibt auch Fälle, in denen ich (zusätzlich zum Anzeigenamen) weitere Daten an den Anruf weitergebe, zB:

+ (void)trackGenderedScreenView:(MyAppGender)gender
{
    id tracker = [[GAI sharedInstance] defaultTracker];

    [tracker set:kGAIScreenName
           value:MyAppAnalyticsGenderedScreenName];

    GAIDictionaryBuilder *dictionaryBuilder = [GAIDictionaryBuilder createScreenView];
    [dictionaryBuilder set:[MyAppUtil getGenderedString:gender]
                    forKey:[GAIFields customDimensionForIndex:ASPAnalyticsDimensionGender]];

    [self visuallyLogTrackingDetails:tracker dictionaryBuilder:dictionaryBuilder];
}

SDK-Version : Google Analytics Services iOS 3.10

Auswirkung : Begrenzt auf iOS 7. *.

Beispiel Stack Trace

Thread : Crashed: com.apple.main-thread
0  libsystem_kernel.dylib         0x000000019333258c __pthread_kill + 8
1  libsystem_pthread.dylib        0x00000001933b516c pthread_kill + 104
2  libsystem_c.dylib              0x00000001932c6808 abort + 112
3  libc++abi.dylib                0x00000001924ec994 __cxa_bad_cast
4  libc++abi.dylib                0x0000000192509c2c default_unexpected_handler()
5  libobjc.A.dylib                0x0000000192c444d4 _objc_terminate() + 128
6  libc++abi.dylib                0x0000000192507168 std::__terminate(void (*)()) + 16
7  libc++abi.dylib                0x0000000192506a80 __cxxabiv1::exception_cleanup_func(_Unwind_Reason_Code, _Unwind_Exception*)
8  libobjc.A.dylib                0x0000000192c44318 _objc_exception_destructor(void*)
9  CoreFoundation                 0x000000018673e890 -[NSException initWithCoder:]
10 Foundation                     0x00000001872286a8 -[NSISEngine minimizeConstantInObjectiveRowWithHead:] + 236
11 Foundation                     0x00000001872281ac -[NSISEngine optimize] + 188
12 Foundation                     0x000000018722384c -[NSISEngine withBehaviors:performModifications:] + 232
13 UIKit                          0x0000000189827488 -[UIWindow(UIConstraintBasedLayout) updateConstraintsIfNeeded] + 228
14 UIKit                          0x000000018978ac78 -[UIWindow(UIConstraintBasedLayout) layoutSublayersOfLayer:] + 92
15 QuartzCore                     0x00000001892f4258 -[CALayer layoutSublayers] + 184
16 QuartzCore                     0x00000001892eee20 CA::Layer::layout_if_needed(CA::Transaction*) + 300
17 QuartzCore                     0x00000001892eecd8 CA::Layer::layout_and_display_if_needed(CA::Transaction*) + 32
18 QuartzCore                     0x00000001892ee560 CA::Context::commit_transaction(CA::Transaction*) + 280
19 QuartzCore                     0x00000001892ee304 CA::Transaction::commit() + 424
20 QuartzCore                     0x00000001892e7c38 CA::Transaction::observer_callback(__CFRunLoopObserver*, unsigned long, void*) + 80
21 CoreFoundation                 0x00000001866ff0a8 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 32
22 CoreFoundation                 0x00000001866fc330 __CFRunLoopDoObservers + 372
23 CoreFoundation                 0x00000001866fc6bc __CFRunLoopRun + 764
24 CoreFoundation                 0x000000018663d6d0 CFRunLoopRunSpecific + 452
25 MyApp                          0x000000010051ff84 GAIUncaughtExceptionHandler
26 CoreFoundation                 0x000000018673ece8 __handleUncaughtException + 644
27 libobjc.A.dylib                0x0000000192c444c8 _objc_terminate() + 116
28 libc++abi.dylib                0x0000000192507168 std::__terminate(void (*)()) + 16
29 libc++abi.dylib                0x00000001925071d8 std::terminate() + 64
30 libobjc.A.dylib                0x0000000192c4442c _destroyAltHandlerList
31 libdispatch.dylib              0x000000019321bfe8 _dispatch_client_callout + 36
32 libdispatch.dylib              0x000000019321f1dc _dispatch_main_queue_callback_4CF + 336
33 CoreFoundation                 0x00000001866fe62c __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 12
34 CoreFoundation                 0x00000001866fc96c __CFRunLoopRun + 1452
35 CoreFoundation                 0x000000018663d6d0 CFRunLoopRunSpecific + 452
36 GraphicsServices               0x000000018c321c0c GSEventRunModal + 168
37 UIKit                          0x000000018976efdc UIApplicationMain + 1156
38 MyApp                          0x0000000100156a48 main (main.m:14)
39 libdyld.dylib                  0x0000000193237aa0 start + 4

Durch das Lesen des Absturzberichts habe ich festgestellt, dass ein Problem mit Layoutbeschränkungen besteht. Ich habe auch ähnliche Probleme in iOS 7 aufgrund von Layout-Einschränkungen konfrontiert. Problem könnte Autolayout-Einschränkungen für proportionale Breite / Höhe sein, da diese in iOS 7 nicht ordnungsgemäß funktionieren.