Решение
Описание : Общая проблема заключается в том, чтобы при завершении работы приложения любой фрагмент кода блокировал основной поток на iOS (см. этот документ для получения дополнительной информации). В нашем случае это происходит из-за текущих запросов, когда игрок убивает приложение. Поскольку мы сохраняем прогресс проигрывателя на сервере после завершения работы приложения (используя метод Dispose()
), запрос блокирует основной поток, вызывая cra sh. Решение состоит в том, чтобы удалить это конкретное сохранение. Мы протестировали сборку, включающую это исправление, и до сих пор у нас не было сбоев при 20 попытках убить игру после загрузки игровой сцены. Мы не думали об этом раньше, потому что этот кусок кода существует с августа 2019 года, и с тех пор его не трогали. Проблема начала возникать только в феврале 2020 года.
Дополнительная информация : поскольку фрагмент кода проблемной c был в проекте с августа 2019 года, и проблема начала возникать только в феврале 2020 года возможно , что версия iOS имеет какое-то отношение к этому. Мы еще не исследовали список изменений, но самая старая версия iOS, представляющая пока что cra sh, - iOS 13.2, выпущенная 28 октября 2019 года.
Другая возможность состоит в том, что некоторые изменения в наш внутренний код вызвал зависание запроса. Поскольку мы используем BestHTTP, по умолчанию все запросы прерываются, когда приложение завершается. Мы не исследовали, может ли быть проблема в порядке выполнения Dispose
против OnDisable/OnApplicationQuit
. Кроме того, по умолчанию запросы, прерванные BestHTTP во время выхода из приложения, все еще вызывают обратные вызовы. В нашем случае обратным вызовом для этого проигрывателя Save является null
, так что это может не быть проблемой.
Связанные сбои : Мы все еще сталкиваемся с некоторыми сбоями на сцене загрузки. Насколько мы видели, они происходят, когда происходит запрос. Скорость воспроизведения этих проблем намного ниже, чем проблема на игровой сцене.
Подсказки : у нас были трудности с получением журналов Crashlytics, потому что большинство из них не было отправлено. Вот пошаговое руководство по извлечению журнала с самого устройства iOS:
- Откройте приложение Настройки на устройстве iPhone / iPad
- Go до Конфиденциальность (отображается ниже Батарея вкл. iOS 13)
- Прокрутите вниз и откройте Аналитика и улучшения
- Открыть Данные аналитики
- Найти журналы для нужного приложения