在iOS上使用多个崩溃报告工具

13

我们目前成功地使用TestFlightLive作为我们的崩溃报告器,但我认为有一些功能缺失。这些功能在另一个崩溃报告器Crashlytics中存在,但目前我不想完全切换崩溃报告器。所以我想知道是否可能在一个应用程序中同时使用这两个崩溃报告器(该应用程序将来是要上架到应用商店的)。


请查看此链接:http://www.grahamdennis.me/blog/2012/10/21/how-to-disable-testflights-crash-handlers/ - HelmiB
2个回答

17

我同时使用TestFlight和Crashlytics,它们都能够正常地报告错误。就像Jens Kohl上面所说的那样,必须在初始化TestFlight SDK之后包含它。这是我的代码:

#ifdef DEBUG
    // setup testflight if in debug (ie dev) mode
    [TestFlight takeOff:kTestFlightAPIKey];
#endif

    [Crashlytics startWithAPIKey:kCrashlyticsAPIKey];

1
请注意:这个方案仅适用于这两种工具的组合,无法与多个第三方崩溃报告工具的任意组合配合使用。我们已经看到了多种情况,一些崩溃报告并未将捕获的异常或其他崩溃转发到另一个实例,因此另一个报告可能无法报告任何有用信息。 - Kerni
2
等一下。因为TestFlight在DEBUG #ifdef中,所以你只在生产环境中使用Crashlytics,对吧? - elsurudo
是的,在那之前TestFlight还没有准备好在生产环境中运行。如果你想始终运行TestFlight,只需从ifdef中取消注释即可。 - Brian Antonelli

4

您只能使用一个崩溃报告框架。捕获崩溃的框架会让其他框架不捕获崩溃或者获取错误的数据,因为已经在该线程上执行了新代码。


1
Crashlytics 的支持团队回复说,他们只需要成为最后一个被调用的崩溃报告工具包,并且在使用其他崩溃报告工具与 Crashlytics 并存时,他们没有遇到任何问题。我会尝试一下,但还是谢谢。 - Jens Kohl
1
他们的崩溃报告工具基本上是将大多数类重命名为PLCrashReporter。而PLCrashReporter在收集完所有数据后会让应用程序崩溃一次。这就是为什么它必须放在最后的原因之一。但是,根据在其之前运行的崩溃报告工具的种类不同,它们可能会自己运行Objective-C代码,这既不安全(http://landonf.bikemonkey.org/code/objc/Reliable_Crash_Reporting.20110912.html),也会修改崩溃线程的调用堆栈。所以,虽然它可能能够工作,但不能保证一定适用于所有情况。两个报告的结果可能会有很大不同,并且可能不准确。 - Kerni

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接