2012-02-21 75 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 2012-10-31 08:44:48

+0

我没有试图说实话。我现在没有编写太多可可,所以我的焦点在别处。 – 2012-10-31 12:25:18

回答

4

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

+1

依然不动:( – 2012-03-30 15:17:54

+0

我使用TestFlight,Crittercism,并乱舞。原来TestFlight不断改写的任何其他异常处理。这ATLEAST是什么Crittercism告诉我,因为他们有同样的问题,发现这个通过调试。 – Bot 2012-04-17 18:45:53

0

我不能够直接测试,但TestFlight documentation似乎这样说:

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

他们甚至给一些example code这可能会帮助你得到这个工作。

+1

是的,我知道,而且我尽我所能地看到了正确的方式。编辑原始帖子以显示我如何在我的应用程序委托中实现它。 – 2012-02-22 07:34:26

+0

我会建议问TestFlight,然后如果你确定它不工作,我猜它必须是他们的SDK中的问题,而不是像他们说的那样将控制权传递给你定义的处理程序。 – mattjgalloway 2012-02-22 09:02:16

+0

是的,有一张票登记了他们,和Flurry。如果他们能够找到原因,将在这里发布解决方案。 – 2012-02-22 13:28:25

0

我在博客上找到了一个解决方案,不确定它是否适用于Flurry,它说的是在[TestFlight takeOff:@“KEY”]方法后调用UninstallCrashHandlers方法(在TestFlight.h中声明)两次,然后注册您想要用于崩溃报告的其他服务。见VS Crashlytics

为TestFlight示例代码禁用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

如果任何人都可以检查并确认,我会将答案标记为解决方案,我不再为移动平台开发,所以我无法检查自己。 – 2013-06-13 12:49:55