У меня есть приложение для киоска, которое я разработал с использованием Xamarin Forms для iPad.
Это приложение-киоск имеет устройство для считывания кредитных карт и Bluetooth-сканер штрих-кода.
Версия App Store 1.0.4 вышла с ноября 2017 года без проблем.В течение последнего месяца или около того мы получали сообщения от моих клиентов о том, что iPad заблокирован (приложение заблокировано).Я провел некоторое исследование журналов сбоев и обнаружил, что тайм-аут Springboard Watchdog (10 секунд) из-за вызова API веб-службы, который я делал, находился в потоке пользовательского интерфейса.Связался с владельцем веб-службы и обнаружил, что у них есть некоторые проблемы с сервером, вызывающие медленный отклик.Я изменил приложение, чтобы сделать все вызовы веб-API в фоновом потоке, и подумал, что это должно облегчить проблему.Я обнаружил, что iPad все еще зависает, но на этот раз нет журнала сбоев.
Перемотка вперед примерно на 5 ревизий (теперь используется Testflight), и я нахожусь на версии 1.0.9.Я добавил много журналирования, пинга каждые 10 минут, много вызовов try / catch для всех методов с журналами, чтобы попытаться изолировать проблему.Я потерпел неудачу.
Итак, вот мы, iPad зависает повсюду, журналы не показывают, как или почему они блокируются.Однако киоски заблокированы и требуют, чтобы кто-то вышел из режима управляемого доступа, закрыл приложение и перезапустил приложение.
Итак, у меня есть самый последний пример ниже, это последние записи журнала перед тем, как устройство отключилось (перестал пинговать).
Сначала появляются новейшие записи журнала Id LogTime LocationCodeId LogMessage
61872 2018-05-11 08: 45: 50.223 61 Вход в папку A19Bb2bc ...
61871 2018-05-11 08: 45: 50.210 61 Открытие устройства чтения карт Magtek ...
(... в журналах больше ничего нет, но на данный момент приложение замороженона экране ...) он не разбился, просто заморожен интерфейс не реагирует на прикосновения.Требуется принудительное завершение с домашней кнопки iPad с двойной верхней крышкой, проведите пальцем вверх.
61576 2018-05-11 07: 24: 33.870 61 Заказ успешно размещен
61577 2018-05-11 07: 24: 33.870 61 Перезапуск
61575 2018-05-11 07: 24: 33.263 61 Запуск триггера сканера
61574 2018-05-11 07: 24: 33.217 61 Сканер триггераначало
61573 2018-05-11 07: 24: 33.027 61 Продукт Медовые орехи Cheerios (чашка) (Id: 5038 AssetId: 35 Цена: $ 1,79 удалено из корзины. Общая сумма корзины составляет $ 0,00
После этой записи в журнале «порядок размещения» ViewModel (обычно) выполняет Navigation.PopAsync (true) и возвращается в режим ожидания. Однако после этого больше нет записей журнала. Это рабочий пример журнала:
Нет фоновых потоков, нет странных блокировок, нет вызовов в базе данных и т. Д. Это простой журнал для нашего Logging API, затем вытолкните корзину со стеком навигации и верните в режим ожидания.
61329 2018-05-11 05: 13: 08.560 61 Таймер пинга
61327 2018-05-11 05: 12: 09.490 61 IdleView OnAppearing выполнено
61326 2018-05-11 05: 12: 09.443 61 ShoppingCartView OnDisappearing
61324 2018-05-11 05: 12: 09.413 61 IdleView OnAppearing
61323 2018-05-11 05: 12: 09.383 61 Остановка сканера штрих-кода ...
61321 2018-05-11 05: 12: 08.710 61 Заказ успешно размещен
61322 2018-05-11 05: 12: 08.710 61 Перезагрузка
61319 2018-05-11 05: 12: 07.820 61 Запуск триггера сканера
Символический журнал аварий можно найти здесь:
https://pastebin.com/urNsFA4z
Links to pastebin.com must be accompanied by code?
Я не могу понять, что говорит журнал аварий.В журнале сбоев нет ни одной строки, указывающей на какой-либо мой исходный код, что заставляет меня думать, что это проблема асинхронности / многопоточности или какое-то другое необработанное исключение.
Любая помощь будет принята с благодарностью.
ОБНОВЛЕНИЕ: Получен ответ от Apple о журнале аварий:
Продолжение: 689674112Причина, по которой журнал сбоя не является полезным, заключается в том, что это не настоящий сбой.
Ваше приложение прервано, потому что Xamarin называется abort () в главном потоке.
Он сделал это после попытки обработать исключение, а когда не смог, он сдался и прервал приложение.
Почему это происходит, я не могу вам сказать. Но, скорее всего, это связано не с чем-то в основном потоке, а с обработчиком исключений Xamarin в основном потоке.
Я вижу, что потоки 8 и 9 чего-то ждут (надеюсь, не в тупике). Кроме этого, у меня не было бы возможности узнать, что Ксамарин считает исключением.
Возможно, пришло время обратиться за помощью к ресурсам Xamarin для решения этой проблемы.
Техническая поддержка разработчика