2012-02-21 2 views
7

Мы используем как testflight.com sdk, так и flurry.com sdk для отслеживания необработанных исключений. Проблема в том, что никакие исключения не подхвачены шквал после того, как мы добавили testflight.com sdk.Внедрение обработки ошибок Testflight.com и Flurry.com

метод срабатывает, когда необработанное исключение происходит, выглядит так:

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

Я не знаю, как testflight.com делает это, но мне кажется, что они перехватывать исключение и зарегистрировать данные для себя без разрешить запуск зарегистрированного метода?

Есть ли какой-либо способ для сосуществования обоих из них?

+0

вы решить эту проблему ? – Jules

+0

Я не пытался быть честным. Сегодня я не кодирую много какао, поэтому я сосредоточен в другом месте. –

ответ

4

У меня есть подтверждение от команды Testflightapp.com, что это известная проблема. Они надеются зафиксировать в следующей версии, о которой они говорили.

+1

все еще не исправлено :( –

+0

Я использую TestFlight, Crittercism и Flurry. Оказывается, TestFlight постоянно перезаписывает любую другую обработку исключений. По крайней мере, это то, что сказал мне Crittercism, поскольку они имели такую ​​же проблему и нашли это путем отладки. – Bot

0

Я не в состоянии проверить это непосредственно, но TestFlight documentation, кажется, сказать:

Если вы используете неперехваченные исключения или сигнал обработчики установить обработчик перед вызовом взлета. Затем наш SDK вызовет вашего обработчика, пока мы работаем.

Они даже дают некоторые example code, которые могут помочь вам получить эту работу.

+1

Да, я знаю, и я делаю это правильно, насколько я вижу. Редактирование оригинальной записи, чтобы показать, как я ее реализовал в моем делете приложения. –

+0

Я бы посоветовал попросить TestFlight, если вы уверены, что он не работает, поскольку я полагаю, что это проблема в SDK, не передающая управление определенному обработчику, как они говорят. – mattjgalloway

+0

Да, зарегистрировался билет с ними, и Флеш. Будет опубликован решение здесь, если они смогут найти причину. –

0

Я нашел решение в блоге, не уверен, что он работает и для Flurry, и что он говорит о том, чтобы вызвать метод UninstallCrashHandlers (объявленный в TestFlight.h) дважды после [TestFlight takeOff: @ "KEY"] метода , а затем зарегистрируйте другую службу, для которой вы хотите использовать отчет о сбоях. См. Пример кода для TestFlight vs Crashlytics

Отключение отчетов о сбоях TestFlight довольно просто. Добавьте следующий код вашего включает в AppDelegate.m:

... 
#import TestFlight.h 

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

В didFinishLaunchingWithOptions этот метод вызывается сначала с NO, а затем YES, как:

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

    UninstallCrashHandlers(NO); 
    UninstallCrashHandlers(YES); 

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

    return YES; 
} 

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

+0

Если кто-нибудь может проверьте и подтвердите это, я буду отмечать ответ как решение. Я больше не занимаюсь разработкой мобильных платформ, поэтому я не могу проверить себя. –