【问题标题】:Visual Studio App Center: crashes and errors not working on Xamarin iOSVisual Studio App Center:崩溃和错误在 Xamarin iOS 上不起作用
【发布时间】:2018-03-26 10:03:22
【问题描述】:

在我的 Xamarin iOS 应用中,我启用了 AppCenter 的分析和崩溃,这里的解释如下:https://docs.microsoft.com/en-us/appcenter/sdk/getting-started/xamarin

分析工作,但我无法在 App Center Web 控制台的诊断部分看到任何崩溃/错误。 在故障排除页面中写道,在 iOS 上只能是一个用于异常处理的工具,而这是唯一的一个。在我的应用中,我启用了 FCM,因此有 Firebase,我尝试删除对 Firebase 的任何引用,但没有任何变化。

启用AppCenter.LogLevel = LogLevel.Verbose; 我可以看到,当应用程序崩溃时,AppCenter 会尝试存储异常(“将日志存储到崩溃”),但是在我看到“找到一个空的缓冲区位置”之后。在重新启动时,我看到调用了 SendingErrorReport 回调,但忽略了 SentErrorReportFailedToSendErrorReport

在 AppCenter.Start 之后,我尝试调用 await Crashes.SetEnabledAsync(true)。如果我让它崩溃,当我重新打开应用程序时,我调用 ErrorReport crashReport = await Crashes.GetLastSessionCrashReportAsync() 崩溃报告始终为空。

在符号部分,我可以读到“你太棒了!没有未符号化的崩溃”。我试图在 Debug 和 Release 中编译。我尝试启动一个新异常并使用Crashes.GenerateTestCrash

在 Xamarin.Forms 应用中使用 Analytics 和 Crash 没有任何问题。

【问题讨论】:

  • 对于 iOS - "应用程序崩溃后需要重启,App Center Crashes 只会在重启后才会转发崩溃日志。另外,在 Xamarin.iOS 上,SDK 不会保存任何如果您附加了调试器,则崩溃日志。请确保当您使 iOS 应用程序崩溃时未附加调试器”。如果您仍然没有看到崩溃报告,请点击应用中心门户右下角的蓝色图标并打开支持工单,以便我们更好地为您提供帮助。请在应用崩溃之前和之后分享您的应用的详细日志。谢谢!
  • 您好,如果发送事件被触发但未发送或发送失败,那么它可能正在与网络调用作斗争。详细日志包含有关进行的 HTTP 调用的所有详细信息(url、标头、json 和状态代码以及重试)。如果您在理解日志方面需要帮助,您可以使用 appcenter 门户的任何页面上的蓝色聊天按钮在支持人员中分享它们。
  • 我在设备和模拟器上都进行了测试,在发布时编译,让应用程序崩溃然后重新启动。希望这不是一个错误,而只是对我写问题的工具的滥用,然后我将链接发送给支持团队,支持团队立即回答。在这两种情况下,如果我们解决了该解决方案可能对社区有用。
  • 嗨@MauroPiccotti。我认为您需要处于调试模式:docs.microsoft.com/en-us/appcenter/sdk/crashes/xamarin“此 API 检查调试与发布配置。因此您只能在调试时使用它,因为它不适用于发布应用程序。”
  • @Chucky 谢谢你,但我放弃了 AppCenter 的崩溃,但我很确定我在调试和发布中都试过了。还是谢谢你。

标签: xamarin xamarin.ios crash-reports visual-studio-app-center


【解决方案1】:

这种配置也适用于我:

using Microsoft.AppCenter.Crashes;

AppCenter.Start(Settings.AppCenterConfigString, typeof(Analytics), typeof(Crashes) /*, typeof(Push)*/);
Crashes.NotifyUserConfirmation(UserConfirmation.AlwaysSend);

自定义异常(错误)日志记录:

catch (Exception e) { Crashes.TrackError(e, ...); }

https://docs.microsoft.com/en-us/appcenter/sdk/crashes/xamarin#ask-for-the-users-consent-to-send-a-crash-log

【讨论】:

  • 我知道它是一个旧线程,但我遇到了类似的问题,原因是 AppCenter 中的应用类型设置不正确。我正在开发 WPF 应用程序,在 AppCenter 中它被配置为 UWP 应用程序。
【解决方案2】:

最后经过大量的尝试和尝试,我发现你必须重写一个不同的FinishedLaunching 方法,它提供了UIApplicationNSDictionary 参数。

public override bool FinishedLaunching(UIApplication application, NSDictionary launchOptions)
        {
            AppCenter.LogLevel = LogLevel.Verbose; //just so you can see in debug //that it is running successfully
            AppCenter.Start(#your app id#, typeof(Crashes));
}

不客气 ;-)


  1. 错误日志将在下次加载应用时上传,因此单击按钮使其崩溃,然后关闭应用并将其从最近的应用中删除。
  2. 再次启动应用并等待片刻,然后查看网络 UI
  3. 根据操作系统版本,您还必须将以下代码添加到info.plist

    <key>NSAppTransportSecurity</key>
      <dict>
        <key>NSAllowsArbitraryLoads</key>
        <true/>
      </dict>

【讨论】:

  • +1 仅供某些人参考。我按照他们的入门指南进行操作,但在“分析”选项卡上没有得到任何信息。直到我将 LogLevel 设置为 LogLevel.Verbose。因此,仅供参考,请确保执行此操作以使其正常工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多