在 iOS 上使用多个崩溃报告器

Posted

技术标签:

【中文标题】在 iOS 上使用多个崩溃报告器【英文标题】:Use multiple crash reporter on iOS 【发布时间】:2012-05-25 13:28:24 【问题描述】:

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

【问题讨论】:

看看这个。 :grahamdennis.me/blog/2012/10/21/… 【参考方案1】:

我同时运行了 TestFlight 和 Crashlytics,它们都报告了错误。就像上面Jens Kohl 说的,它必须在TestFlight SDK 初始化之后包含。这是我的代码:

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

    [Crashlytics startWithAPIKey:kCrashlyticsAPIKey];

【讨论】:

注意:这两者结合使用。它不适用于多个 3rd 方崩溃报告器的任何组合。我们已经看到了多种情况,其中一些崩溃报告没有将捕获的异常或其他崩溃转发到另一个实例,因此其他报告不会报告任何内容或任何有用的内容。 等一下。因为 TestFlight 在 DEBUG #ifdef 中,所以您只在生产中使用 Crashlytics,不是吗? 是的,这是在 TestFlight 打算在生产中运行之前。如果你想一直运行 TestFlight,只需从 ifdef 中解开它。【参考方案2】:

您只能使用 1 个崩溃报告框架。捕获崩溃的框架让其他框架要么无法捕获它,要么得到错误的数据,因为线程上已经执行了新代码。

【讨论】:

Crashlytics 支持人员回复说,他们只需要成为最后一个调用的崩溃报告工具包,并且在与 Crashlytics 一起使用另一个崩溃报告器时,他们直到现在还没有任何问题。我会试一试,不过还是谢谢。 他们的崩溃报告器基本上是 PLCrashReporter,大多数类都重命名了。一旦收集到所有数据,PLCrashReporter 就会让应用程序崩溃。所以这是它必须是最后一个的原因之一。但是取决于在它之前运行什么样的崩溃报告器,运行 Objective-C 代码本身,这不仅不安全(landonf.bikemonkey.org/code/objc/…),而且还会改变崩溃线程上的调用堆栈。所以它可能有效,但不能肯定地说它一般有效。两份报告的结果可能有很大差异且不准确。

以上是关于在 iOS 上使用多个崩溃报告器的主要内容,如果未能解决你的问题,请参考以下文章

新的崩溃日志不会出现在特定 iOS 设备的管理器中

Apple 报告应用程序崩溃,但我无法弄清楚

iOS objc_msgSend 崩溃,没有给出报告或警告

使用firebase iOS swift创建具有相同捆绑ID的多个环境?

iOS崩溃报告服务[关闭]

iOS应用在闪屏时崩溃,Xcode Organizer崩溃报告上没有堆栈痕迹[已关闭] 。