在我的 Xamarin iOS 应用程序中,我启用了 AppCenter 的分析和崩溃,具体解释如下:https://learn.microsoft.com/en-us/appcenter/sdk/getting-started/xamarin
分析有效,但我在应用程序中心 Web 控制台的诊断部分看不到任何崩溃/错误。 在故障排除页面中写道,在 iOS 上只能是一种异常处理工具,而且这是唯一的一个。在我的应用程序中,我启用了 FCM,因此存在 Firebase,我尝试删除对 Firebase 的任何引用,但没有任何变化。
启用
AppCenter.LogLevel = LogLevel.Verbose;
我可以看到,当应用程序崩溃时,AppCenter 尝试存储异常(“将日志存储到崩溃”),但在我可以看到“找到空缓冲区位置”之后。重新启动时,我看到调用了 SendingErrorReport
回调,但 SentErrorReport
和 FailedToSendErrorReport
被忽略。
AppCenter.Start 之后,我尝试拨打
await Crashes.SetEnabledAsync(true)
。如果我让它崩溃,当我重新打开应用程序时,我会调用 ErrorReport crashReport = await Crashes.GetLastSessionCrashReportAsync()
崩溃报告始终为空。
在符号部分我可以读到“你太棒了!没有未符号化的崩溃”。我尝试在调试和发布中进行编译。我尝试启动一个新的异常并使用
Crashes.GenerateTestCrash
。
我在 Xamarin.Forms 应用程序中使用 Analytics 和 Crash 时没有遇到任何问题。
这种配置对我来说也很有效:
using Microsoft.AppCenter.Crashes;
AppCenter.Start(Settings.AppCenterConfigString, typeof(Analytics), typeof(Crashes) /*, typeof(Push)*/);
Crashes.NotifyUserConfirmation(UserConfirmation.AlwaysSend);
自定义异常(错误)日志记录:
catch (Exception e) { Crashes.TrackError(e, ...); }
最后,经过大量的点击和尝试,我发现你必须重写一个不同的
FinishedLaunching
方法,它提供 UIApplication
和 NSDictionary
参数。
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));
}
不客气;-)
info.plist
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>