2012-02-21 13 views
7

Estamos utilizando tanto sfk de testflight.com como flurry.com para rastrear excepciones no controladas. El problema es que no se recogen excepciones por ráfagas después de que agreguemos el sdk de testflight.com.Implementando el manejo de excepciones de Testflight.com y Flurry.com

El método activa cuando se produce una excepción no controlada se ve así:

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 
    . 
    . 
    . 

no estoy seguro de cómo testflight.com lo hace, pero parece que interceptan la excepción y se registran los datos por sí mismos sin dejando que se ejecute el método registrado?

¿Hay alguna forma de que ambos coexistan?

+0

los solucionaron este ? – Jules

+0

No he tratado de ser honesto. No estoy codificando mucho cacao ahora, así que mi enfoque está en otra parte. –

Respuesta

4

Recibí la confirmación del equipo de Testflightapp.com de que se trata de un problema conocido. Esperan arreglarse en la próxima versión que dijeron.

+1

aún no corregido :( –

+0

Uso TestFlight, Crittercism y Flurry Resulta que TestFlight sobrescribe continuamente cualquier otro manejo de excepción. Al menos esto es lo que Crittercism me dijo ya que tenían el mismo problema y lo encontró a través de la depuración – Bot

0

no soy capaz de probar esto directamente, pero el TestFlight documentation parece decir esto:

Si usted hace uso de excepción sin capturar o manipuladores de señal instalar sus controladores antes de llamar al despegue. Nuestro SDK luego llamará a su controlador mientras el nuestro se está ejecutando.

Incluso dan algunos example code que pueden ayudarlo a conseguirlo.

+1

Sí, lo sé, y lo estoy haciendo de la manera correcta, por lo que puedo ver. Editando la publicación original para mostrar cómo la implementé en mi aplicación delegada también. –

+0

Sugiero que le pregunte a TestFlight si está seguro de que no está funcionando, ya que supongo que debe ser un problema en su SDK que no pasa el control a su controlador definido como dicen que debería. – mattjgalloway

+0

Sí, obtuve un boleto registrado con ellos, y Flurry. Publicaremos la solución aquí si pueden encontrar el motivo. –

0

He encontrado una solución en un blog, no estoy seguro si funciona también para Flurry, lo que dice es llamar al método UninstallCrashHandlers (declarado en TestFlight.h) dos veces después del método [TestFlight takeOff: @ "KEY"] , y luego registre otro servicio para el cual quiera usar para el reporte de fallas. Ver código de ejemplo para TestFlight vs Crashlytics

Deshabilitar los informes de fallos de TestFlight es bastante simple. Agregue el código siguiente a su incluye en AppDelegate.m:

... 
#import TestFlight.h 

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

En didFinishLaunchingWithOptions llama a este método en primer lugar con NO y luego con SÍ, como:

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

    UninstallCrashHandlers(NO); 
    UninstallCrashHandlers(YES); 

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

    return YES; 
} 

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

+0

Si alguien puede revise y confirme esto, marcaré la respuesta como la solución. Ya no estoy desarrollando para plataformas móviles, por lo que no puedo controlarme. –