“[Crashlytics:Crash] 报告被禁用”

"[Crashlytics:Crash] Reporting is disabled"

当我们的生产 iOS 应用程序初始化时,我收到以下错误消息:

[Crashlytics] Version 3.8.4 (121)
[Crashlytics] Running on iOS Simulator (iPhone), 10.3.0 (16E195) 
[Crashlytics:Crash] Reporting is disabled 
[Crashlytics] Crash reporting could not be initialized 
[Answers] Initialized 
[Fabric] Initialized with kit versions: {
    "com.twitter.answers.ios" = "1.3.4"; 
    "com.twitter.crashlytics.ios" = "3.8.4"; 
    "io.fabric.sdk.ios" = "1.6.11"; 
}

每次后续调用记录事件都会出现以下错误:

[Crashlytics:Crash] WARNING: CLSLog has been used before (or concurrently with) 
    Crashlytics initialization and cannot be recorded. The message was: ...

该应用程序的非生产版本工作正常运行 完全相同的代码但具有不同的 bundleID。通常当应用程序第一次初始化时,我会看到应用程序填充在 Fabric 仪表板中,但在这种情况下,应用程序没有显示。

我们有一个 Android 和一个 iOS 版本的应用程序,它们都使用相同的 bundleID,所以我想知道是否因此存在冲突?我在仪表板中看到应用程序的 Android 版本,它似乎工作正常。这是一个最初是编译到两个平台的 Xamarin 应用程序的应用程序,两者都没有包含 Fabric/Crashlytics。我们现在已经在每个平台上编写了本机应用程序,并且都在使用 Fabric/Crashlytics.

由于这是两个应用商店中已有的应用,我们无法更改任何一个应用的 bundleID。

确保在调用任何 Crashlytics 方法之前使用 Fabric 初始化 Crashlytics:

Fabric.with([Crashlytics.self])

我经常错过的一个步骤是确保您已在目标上添加构建阶段:

"${PODS_ROOT}/Fabric/run" ${FABRIC_API_KEY} ${FABRIC_BUILD_SECRET}

并用您的密钥和密码替换 ${FABRIC_API_KEY}${FABRIC_BUILD_SECRET} 或为每个添加自定义构建设置。

显然在某些情况下,Crashlytics 不会自动激活新的应用程序,以便它们显示在您的应用程序列表下,即使所有内容都已正确编码并且数据正在传输到它们的服务器。在这种情况下,请向 Crashlytics 支持 (support@fabric.io) 发送一封电子邮件,其中包含相关应用的 info.plist 条目的副本,他们会为您激活它。我不得不这样做好几次,尤其是应用程序扩展。

当我最终在我的情况下追查时,错误是完全正确的,但并不明显。

我在各种测试目标中看到了这些错误,我们测试的代码使用了一个名为 CLSNSLogv() 的自定义日志记录包装器,但测试实际上并没有通过 AppDelegate,因此确实不初始化 Crashlytics。在尝试了几件事之后,我确信它在作为应用程序执行时可以正常工作,但在我们的配置中,它在单元测试配置下无法正常工作。

我可能会更改我们的自定义包装器以在测试期间绕过 CLSNSLogv()。使用它的最大好处是当设备发生崩溃时,我们不会遗漏任何东西。