Domanda

Stiamo utilizzando SDK e FLURRY.com SDK per tracciare le eccezioni non gestite. Il problema è che nessuna eccezione viene raccolta da Flurry dopo aver aggiunto SDK TestFlight.com.

Il metodo attivato quando si verifica un'eccezione non gestita sembra questo:

void uncaughtExceptionHandler(NSException *exception) 
{
    [FlurryAnalytics logError:@"ERROR_NAME" message:@"ERROR_MESSAGE" exception:exception];
}

- (BOOL) application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{    
    #if !TARGET_IPHONE_SIMULATOR
    NSSetUncaughtExceptionHandler(&uncaughtExceptionHandler);

    struct sigaction newSignalAction;
    memset(&newSignalAction, 0, sizeof(newSignalAction));
    newSignalAction.sa_handler = &signalHandler;
    sigaction(SIGABRT, &newSignalAction, NULL);
    sigaction(SIGILL, &newSignalAction, NULL);
    sigaction(SIGBUS, &newSignalAction, NULL);

    [FlurryAnalytics startSession:kFlurryKey];
    [TestFlight takeOff:kTestflightKey];    

    [[UIApplication sharedApplication]
     registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge |
                                     UIRemoteNotificationTypeSound |
                                     UIRemoteNotificationTypeAlert)];    
    [UIApplication sharedApplication].applicationIconBadgeNumber = 0;    
    #endif
    .
    .
    .

Non sono sicuro di come fa Testflight.com, ma sembra che intercettano l'eccezione e registrino i dati per se stessi senza lasciare che il metodo registrato venga eseguito?

C'è un modo per coesistere entrambi?

È stato utile?

Soluzione

Ho ottenuto la conferma dal team TestFlightApp.com che questo è un problema noto. Sperano di risolvere nella prossima versione che hanno detto.

Altri suggerimenti

Non sono in grado di testarlo direttamente, ma il Documentazione Testflight sembra dire questo:

Se si utilizzano gestori di segnalazioni non insegnati, installa i gestori prima di chiamare il decollo. Il nostro SDK chiamerà quindi il tuo gestore mentre il nostro è in esecuzione.

Ne danno persino un po ' Codice di esempio Il che potrebbe aiutarti a farti funzionare.

Ho trovato una soluzione su un blog, non sono sicuro che funzioni anche per Flurry, ciò che dice è chiamare il metodo di IninstallCrashHandlers (dichiarato in Testflight.h) due volte dopo [Testflight Takeoff:@"Key"] e quindi registrarsi Altro servizio per il quale si desidera utilizzare per i report di crash. Vedi il codice di esempio per Testflight vs Crashlytics

La disabilitazione dei rapporti sugli incidenti di Testflight è abbastanza semplice. Aggiungi il seguente codice che include in appdelegate.m:

...
#import TestFlight.h

// Function prototype for UninstallCrashHandler
extern void UninstallCrashHandlers(BOOL restore);

In didfinishlaunchingwithoptions chiama questo metodo prima con no e poi con sì, come:

- (BOOL)application:(UIApplication *)application
        didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
  [TestFlight takeOff:@"<TestFlightKey>"];

  UninstallCrashHandlers(NO);
  UninstallCrashHandlers(YES);

  [Crashlytics startWithAPIKey:@"<CrashlyticsKey>"];

  return YES;
}

Rif: http://www.grahamdennis.me/blog/2012/10/21/how-to-disable-testflights-crash handlers/

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top