Всем привет! Сегодня хочу поговорить о самой изматывающей части работы разработчика: поиске багов, которые возникают в самых неожиданных условиях. Когда проблема есть только у одного пользователя, воспроизводится раз в полгода и вообще выглядит как мистика.
Загадка с Face ID и темной темой:
Недавно мы получили странный баг-репорт: «Приложение зависает при попытке войти через Face ID». Особенность была в том, что проблема возникала только у пользователей с включенной темной темой и только на
iPhone 14 Pro.
Логи показывали стандартный поток аутентификации, но при вызове
Face ID приложение просто замирало. Оказалось, что кастомная анимация загрузки конфликтовала с системным модальным окном
Face ID в темной теме. Система пыталась применить темную тему к нашему кастомному компоненту, что приводило к бесконечному циклу обновления UI.
Проблема с арабским языком и скроллом:
Другой интересный случай: пользователь жаловался на дергающийся скролл в списке. Особенность: устройство было настроено на арабский язык с направлением текста справа налево.
Мы тестировали приложение с английским и русским языками, но забыли про RTL-локации. Оказалось, что кастомный индикатор скролла неправильно рассчитывал позицию при RTL-раскладке, из-за чего происходило постоянное перерисовывание контента.
Режим энергосбережения как тормоз:
Классика: жалобы на тормозящее приложение, когда у телефона меньше 20% заряда и включен режим энергосбережения. Система ограничивает производительность, а пользователь винит наше приложение.
Slide Over и потерянный контент:
Еще одна история: пользователь сообщал, что в режиме
Slide Over на
iPad пропадает часть контента. При обычном использовании все работало идеально.
Проблема была в том, что мы не учитывали изменение
safe area insets в компактном режиме. Контент просто уезжал за границы видимой области, но только при определенной ширине
Slide Over.
Загадка в подвале:
Несколько лет назад к нам пришла жалоба: «Приложение не работает вообще». Никакие данные не грузятся, картинки не отображаются. По логам полная чистота. У пользователя нет аномалий, мы перепробовали все сценарии.
И тогда мы задали простой вопрос: «А где вы находились, когда это произошло?».
Ответ оказался неожиданным: «в подвале». Человек решил проверить работу приложения в под землей, где не ловил ни
Wi-Fi, ни мобильный интернет. Все встало на свои места!
Что я из этого вынес:
- Контекст важнее технических данных: иногда нужно спросить не «что делали?», а «где и при каких условиях?».
- Логи не всесильны: они показывают только то, что мы предусмотрели.
- Пользователи живут в другом мире: их сценарии использования часто отличаются от наших, тестовых.
- Тестируйте неочевидные сценарии: темная тема, разные языки, специальные возможности.
- Учитывайте особенности платформы: Slide Over, Split View, Picture-in-Picture.
Разрабатывайте не только для идеальных условий. Пользователи будут использовать ваше приложение в самых неожиданных местах и ситуациях. И иногда самое сложное не пофиксить баг, а найти его причину.