Центр приложений Visual Studio: сбои и ошибки не работают в Xamarin iOS

В моем приложении Xamarin для iOS я включил AppCenter Analytics и Crash, как описано здесь: https://docs.microsoft.com/en-us/appcenter/sdk/getting-started/xamarin

Аналитика работает, но я не вижу сбоев / ошибок в разделе «Диагностика» веб-консоли App Center. На странице устранения неполадок написано, что на iOS не может быть больше, чем инструмент для обработки исключений, и это единственный. В своем приложении я включил FCM, поэтому есть Firebase, я попытался удалить любую ссылку на Firebase, но ничего не изменилось.

Включение AppCenter.LogLevel = LogLevel.Verbose; Я вижу, что при сбое приложения AppCenter пытается сохранить исключение («Сохранение журнала сбоев»), но после этого я вижу «Обнаружена пустая позиция буфера». При перезапуске я вижу, что вызывается SendingErrorReport обратный вызов, но SentErrorReport и FailedToSendErrorReport игнорируются.

После AppCenter.Start я попытался вызвать await Crashes.SetEnabledAsync(true). Если я позволю ему вылететь и когда я снова открою приложение, я вызываю ErrorReport crashReport = await Crashes.GetLastSessionCrashReportAsync() отчет о сбое всегда будет нулевым.

В разделе «Символы» я могу прочитать: «Ты классный! Несимвольных сбоев нет». Я пробовал компилировать в Debug и Release. Я пробовал запустить новое Exception и использовать Crashes.GenerateTestCrash.

У меня не было проблем с использованием Analytics и Crash с приложением Xamarin.Forms.


person Mauro Piccotti    schedule 26.03.2018    source источник
comment
Для iOS - вам необходимо перезапустить приложение после сбоя, и сбой App Center будет пересылать журнал сбоев только после его перезапуска. Кроме того, в Xamarin.iOS SDK не будет сохранять журнал сбоев, если вы подключили отладчик. Убедитесь, что отладчик не подключен, когда вы аварийно завершаете работу приложения iOS. Если вы по-прежнему не видите отчеты о сбоях, нажмите синий значок в правом нижнем углу портала App Center и откройте заявку в службу поддержки, чтобы мы могли вам лучше помочь. Пожалуйста, поделитесь подробными журналами вашего приложения до и после сбоя приложения. Спасибо!   -  person Ela    schedule 26.03.2018
comment
Привет, если событие отправки инициировано, но не отправлено или не удалось отправить, вероятно, оно борется с сетевыми вызовами. Подробные журналы содержат все сведения о выполненных HTTP-вызовах (URL-адрес, заголовки, json, код состояния и повторные попытки). Если вам нужна помощь с пониманием журналов, вы можете поделиться ими в службе поддержки, используя синюю кнопку чата на любой странице портала appcenter.   -  person Guillaume Perrot    schedule 26.03.2018
comment
Я провел свой тест как на устройстве, так и на симуляторе, скомпилировал в выпуске, позволил приложению вылететь, а затем перезапустился. Надеясь, что это не ошибка, а просто неправильное использование инструмента, я написал свой вопрос, а затем отправил ссылку в службу поддержки, которая немедленно ответила. В обоих случаях, если мы решим, решение может быть полезно сообществу.   -  person Mauro Piccotti    schedule 26.03.2018
comment
Привет, @MauroPiccotti. Я думаю, вам нужно перейти в режим отладки: docs.microsoft.com/ en-us / appcenter / sdk / crashes / xamarin Этот API проверяет конфигурацию отладки и выпуска. Таким образом, вы можете использовать его только при отладке, так как он не будет работать для выпускаемых приложений.   -  person Chucky    schedule 06.06.2018
comment
@Chucky, спасибо, но я отказался от AppCenter из-за сбоев, но я совершенно уверен, что пробовал как отладку, так и выпуск. В любом случае, спасибо.   -  person Mauro Piccotti    schedule 06.06.2018


Ответы (2)


Такая конфигурация мне тоже подходит:

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

person Artūras Paleičikas    schedule 26.03.2018
comment
Я знаю, что это старый поток, но у меня была аналогичная проблема, и причина в том, что тип приложения был неправильно установлен в AppCenter. Я работал над приложением WPF, где, как и в AppCenter, он был настроен как приложение UWP. - person Riz; 11.10.2019

Наконец, после множества попыток и испытаний я обнаружил, что вам нужно переопределить другой метод 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));
}

Добро пожаловать ;-)


  1. Журналы ошибок будут загружены при следующей загрузке приложения, поэтому выведите его из строя одним нажатием кнопки, затем закройте приложение и удалите его из недавних приложений.
  2. Снова запустите приложение и подождите пару секунд, затем откройте веб-интерфейс.
  3. В зависимости от версии ОС вам также необходимо добавить следующий код в info.plist

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

person AZ_    schedule 15.01.2020
comment
+1 Просто к сведению некоторых людей. Я следил за их руководством по началу работы и ничего не получил на вкладке «Аналитика». Это было до тех пор, пока я не установил для LogLevel значение LogLevel.Verbose. Так что просто к вашему сведению, убедитесь, что вы делаете это, чтобы заставить его работать. - person philm; 13.04.2020