Иногда происходит сбой приложения киоска Xamarin для iOS без присмотра (новый, из нескольких месяцев в магазине приложений) - PullRequest
0 голосов
/ 11 мая 2018

У меня есть приложение для киоска, которое я разработал с использованием 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 для решения этой проблемы.


 Техническая поддержка разработчика

1 Ответ

0 голосов
/ 11 мая 2018

У меня были похожие симптомы (внезапные зависания и странные сбои) в приложении с серьезными утечками памяти. Я бы порекомендовал провести тестирование с использованием профилировщика.

Xamarin Profiler (требуется подписка Enterprise) / Инструменты

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...