7

我们同时使用 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 是如何做到的,但似乎他们拦截了异常并为自己注册数据而不让注册的方法运行?

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

4

3 回答 3

4

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

于 2012-02-29T12:14:42.317 回答
0

我无法直接对此进行测试,但TestFlight 文档似乎是这样说的:

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

他们甚至提供了一些示例代码,可以帮助您完成这项工作。

于 2012-02-21T14:26:48.840 回答
0

我在博客上找到了一个解决方案,不确定它是否也适用于 Flurry,它所说的是在 [TestFlight takeOff:@"KEY"] 方法之后调用 UninstallCrashHandlers 方法(在 TestFlight.h 中声明)两次,然后注册您要用于崩溃报告的其他服务。请参阅 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;
}

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

于 2013-06-13T09:26:02.697 回答