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

Iphone 实现Testflight.com和Flurry.com异常处理,iphone,ios,exception-handling,flurry,testflight,Iphone,Ios,Exception Handling,Flurry,Testflight,我们同时使用testflight.com sdk和flurry.com sdk跟踪未处理的异常。问题是,在我们添加testflight.com sdk之后,flurry没有发现任何异常 发生未处理的异常时触发的方法如下所示: void uncaughtExceptionHandler(NSException *exception) { [FlurryAnalytics logError:@"ERROR_NAME" message:@"ERROR_MESSAGE" exception:e

我们同时使用testflight.com sdk和flurry.com sdk跟踪未处理的异常。问题是,在我们添加testflight.com sdk之后,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是如何做到的,但他们似乎截获了异常并为自己注册了数据,而不让注册的方法运行


有没有办法让这两者共存?

我无法直接测试这一点,但似乎是这样说的:

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


他们甚至给出了一些可能有助于实现这一目标的建议。

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

我在一个博客上找到了一个解决方案,不确定它是否也适用于Flurry,它说的是在[TestFlight起飞:@“KEY”]方法之后调用卸载CrashHandlers方法(在TestFlight.h中声明)两次,然后注册您想要用于崩溃报告的其他服务。请参阅TestFlight vs Crashlytics的示例代码

禁用TestFlight的崩溃报告非常简单。添加AppDelegate.m中包含的以下代码:

...
#import TestFlight.h

// Function prototype for UninstallCrashHandler
extern void UninstallCrashHandlers(BOOL restore);
在didFinishLaunchingWithOptions中,先用“否”,然后用“是”调用此方法,如:

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

  UninstallCrashHandlers(NO);
  UninstallCrashHandlers(YES);

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

  return YES;
}
-(BOOL)应用程序:(UIApplication*)应用程序
didFinishLaunchingWithOptions:(NSDictionary*)启动选项
{
[试飞起飞:@”“;
卸载防撞手(无);
卸载防撞手(是);
[Crashlytics startwithapkey:@”“;
返回YES;
}

ref:

是的,我知道,而且就我所知,我正在以正确的方式进行。编辑原始帖子,展示我是如何在我的应用程序委托中实现它的。我建议询问TestFlight,如果你确定它不起作用,我想这一定是他们SDK中的一个问题,没有像他们说的那样将控制权传递给你定义的处理程序。是的,向他们注册了一张罚单,还有Flurry。如果他们能找到原因,我将在这里发布解决方案。我使用TestFlight、Critercis和Flurry。事实证明TestFlight会不断覆盖任何其他异常处理。至少这是Critercism告诉我的,因为他们有相同的问题,并且通过调试发现了这一点。我没有试图诚实。我现在没有编写太多的cocoa代码,所以我的重点放在其他地方。如果有人能检查并确认这一点,我会将答案标记为解决方案。我不再为移动平台开发,所以我无法检查自己。