Microsoft.AppCenter.Crashes未检测到Xamarin.Forms iOS项目上的崩溃

g0czyy6m  于 2023-09-28  发布在  iOS
关注(0)|答案(2)|浏览(100)

我最近尝试实现Microsoft.AppCenter.Crashes来帮助跟踪我团队的Xamarin.Forms应用程序中的崩溃。但是,当我们的iOS项目发生崩溃时,AppCenter从未检测到它。我已经创建了以下用于设置和检查的函数,该函数在我们的中心项目的App.xaml.cs App构造函数的开头附近被调用:

private async Task CheckForPreviousCrash()
    {
        //Setup AppCenter
        await Xamarin.Forms.Device.InvokeOnMainThreadAsync(() =>
        {
            //Keys changed in StackOverflow post for security reasons.
            AppCenter.Start("ios=########-####-####-####-############;android=########-####-####-####-############;uwp=########-####-####-####-############", typeof(Crashes));
            AppCenter.IsNetworkRequestsAllowed = false; //Prevents sending user data to Microsoft. Required by company
        });

        //Make sure AppCenter is working
        bool isEnabled = await Crashes.IsEnabledAsync();
        if (!isEnabled)
        {
            _logger.LogError("AppCenter could not be started");
        }
        else
        {
            //Check for memory leak warnings
            bool memoryIssue = await Crashes.HasReceivedMemoryWarningInLastSessionAsync();
            if (memoryIssue)
            {
                _logger.LogError("AppCenter detected a memory warning in the last session");
            }

            //Check for crash info
            bool crashed = await Crashes.HasCrashedInLastSessionAsync();
            if (crashed)
            {
                var report = await Crashes.GetLastSessionCrashReportAsync();
                _logger.LogCrashReport(report);
            }

            //If AppCenter detected no issues in the last session, log an "all clear" message
            if (!memoryIssue && !crashed)
            {
                _logger.LogInformation("AppCenter did not detect a crash in the last session");
            }
        }
    }

我已经使用Crashes.GenerateTestCrash()函数测试了这段代码,这是我的团队试图解决的崩溃之一,还有一个简单的递归函数,它永远调用自己。在iOS上运行时,我们的日志将始终显示“AppCenter在上次会话中未检测到崩溃”消息,无论是否发生崩溃。任何帮助确定什么可能导致这将不胜感激。
备注:

  • iOS项目始终运行,不连接调试器。我知道有一条规则,如果iOS附加了调试器,就不会生成崩溃报告
  • 这在使用调试和发布模式构建时就已经看到了
  • 这段代码在我们的Android和UWP项目上可以正常工作
  • iOS项目始终通过isEnabled检查
  • 正在运行AppCenter和AppCenter。4.5.0版崩溃
  • 这是在iOS 15.2.1上运行的第7代iPad

编辑:针对建议答案的额外注解:

  • 用于构建iOS项目的Mac运行macOS 11.6.2
  • 项目使用XCode 13.2.1构建
  • Xamarin Forms项目在Visual Studio 2019 16.11.7中构建,并通过Visual Studio的“Pair to Mac”功能发送到连接的Mac
  • 没有其他库用于崩溃报告(最常用的是Serilog,它应该只处理日志)
  • 我们不使用CocoaPods来集成AppCenter
2nc8po8w

2nc8po8w1#

您可以检查您是否符合以下要求:

  • 您的iOS项目在macOS 10.14.4或更高版本上的Xcode 11或更高版本中设置。
  • 您的目标设备运行iOS 9.0或更高版本。
  • 您没有使用任何其他提供崩溃报告功能的库(仅适用于App Center崩溃)。
  • 如果您使用CocoaPods集成App Center,则需要CocoaPods版本1.10或更高版本。
    App Center SDK Analytics和Crashes通过XCFramework或SwiftPM与Mac Catalyst兼容。
    以下是有关appcenter在ios https://learn.microsoft.com/en-us/appcenter/sdk/getting-started/ios上崩溃的更多详细信息
jogvjijk

jogvjijk2#

您是否使用Xamarin.Google.iOS.MobileAds?如果是,版本需要是7.27.0.3或更早版本,因为AppCenter Crashes报告不适用于此软件包的最新版本。

相关问题