Реализация Testflight.com и Flurry.com обработки исключений - PullRequest
7 голосов
/ 21 февраля 2012

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

Метод, запускаемый при возникновении необработанного исключения, выглядит следующим образом:

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 делает это, но кажется, что они перехватывают исключение и регистрируют данные для себя, не позволяя зарегистрированному методу быть запущенным?

Есть ли способ, чтобы оба они сосуществовали?

Ответы [ 3 ]

4 голосов
/ 29 февраля 2012

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

0 голосов
/ 13 июня 2013

Я нашел решение в блоге, но не уверен, что оно работает и для Flurry; он говорит, что дважды вызывает метод UninstallCrashHandlers (объявленный в TestFlight.h) после метода [TestFlight takeOff: @ "KEY"],а затем зарегистрируйте другой сервис, который вы хотите использовать для отчетов о сбоях.Посмотрите пример кода для TestFlight против 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;
}

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

0 голосов
/ 21 февраля 2012

Я не могу проверить это напрямую, но документация TestFlight , кажется, говорит это:

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

Они даже дают пример кода , который может помочь вам в этом.

...