实现Testflight.com和Flurry.com异常处理

我们使用testflight.com sdk和flurry.com sdk来跟踪未处理的异常。 问题是在我们添加testflight.com sdk之后,没有任何例外情况被乱七八糟。

当未处理的异常发生时触发的方法如下所示:

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如何执行它,但是好像他们拦截了异常并为自己注册数据而不让注册方法运行?

这两种方式能够共存吗?


我从Testflightapp.com团队获得了确认,这是一个已知问题。 他们希望在他们说的下一个版本中修复。


我无法直接测试,但TestFlight文档似乎这样说:

如果您在调用takeOff之前使用未捕获的异常或信号处理程序安装处理程序。 我们的SDK会在我们运行时调用您的处理程序。

他们甚至提供了一些示例代码,可以帮助您实现这一目标。


我在博客上找到了一个解决方案,不知道它是否适用于Flurry,它说的是在[TestFlight takeOff:@“KEY”]方法后调用UninstallCrashHandlers方法(在TestFlight.h中声明)两次,然后注册您希望用于崩溃报告的其他服务。 查看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;
}

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

链接地址: http://www.djcxy.com/p/57645.html

上一篇: Implementing Testflight.com and Flurry.com exception handling

下一篇: How to use quaternion rotation in Three.js json scene