我们正在使用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是如何做到的,但它似乎拦截了异常并为自己注册数据而不让注册的方法运行?
有没有办法让这两者共存?
答案 0 :(得分:4)
我从Testflightapp.com团队得到确认,这是一个已知问题。他们希望在他们说的下一个版本中修复。
答案 1 :(得分:0)
我无法直接测试,但TestFlight documentation似乎这样说:
如果您确实使用未捕获的异常或信号处理程序,请在调用takeOff之前安装处理程序。然后,我们的SDK将在我们的运行时调用您的处理程序。
他们甚至会提供一些example code,这可能会帮助您实现这一目标。
答案 2 :(得分: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/