Перейти к содержанию
Innovialabs

Отслеживание падений приложения: Crashlytics или Sentry

Практика4 мин

Коротко

Crashlytics — бесплатный и быстрый способ видеть падения, если вы уже в Firebase; Sentry сильнее в ошибках, производительности и self-hosted, но сложнее и платный на объёме. В обоих случаях без загрузки dSYM и mapping-файлов отчёты нечитаемы.

Коротко: что выбрать

Firebase Crashlytics — разумный выбор по умолчанию для мобильного приложения: бесплатный, быстро подключается, хорошо работает с Firebase Analytics и Remote Config. Sentry выбирают, когда нужно больше: единая система ошибок для мобильного приложения и бэкенда, трассировка производительности, гибкие правила алертов или размещение на своём сервере.

КритерийCrashlyticsSentry
СтоимостьБесплатноЕсть бесплатный тариф, дальше оплата по объёму событий; можно развернуть у себя
ФокусПадения и нефатальные ошибки в мобайлеОшибки, производительность, релизы на всех платформах
ПлатформыiOS, Android, Flutter, Unity, React Native (через сторонний модуль)iOS, Android, Flutter, React Native, веб, бэкенд
АлертыБазовые, включая резкий рост паденийГибкие правила, интеграции с Slack, Telegram через вебхуки и т. п.
Хранение данныхТолько облако GoogleОблако или self-hosted

Crash-free rate: главная метрика стабильности

Crash-free users — доля пользователей, у которых за период не было ни одного падения. Crash-free sessions — доля сессий без падений. Первая метрика показывает, сколько людей пострадало, вторая — насколько часто приложение падает при обычном использовании.

Смотрите на обе и сравнивайте по версиям. Если новая версия заметно хуже предыдущей, это повод остановить поэтапный релиз в App Store Connect или Google Play Console, пока не вышел фикс.

Символикация: почему стектрейс нечитаем

В релизной сборке код оптимизирован и обфусцирован, поэтому вместо имён функций в отчёте будут адреса памяти или имена вроде a.b.c. Чтобы превратить их обратно в понятный стектрейс, нужны файлы символов:

  • iOS — dSYM. Генерируются при сборке, если в Build Settings для Release указано DWARF with dSYM File. Их нужно загружать для каждой сборки.
  • Android — mapping.txt. Создаётся R8/ProGuard при минификации. Без него имена классов будут обфусцированы.
  • Native-код (NDK, C++) — отдельные символьные файлы.
  • Flutter — при сборке с --obfuscate --split-debug-info нужно загрузить и debug-info.
  • React Native — source maps для JavaScript-бандла.

Самая частая ошибка — символы загружены для одной сборки и забыты для следующей. Автоматизируйте загрузку в CI, а не делайте её вручную.

Подключение Crashlytics

  1. Создайте проект в Firebase и добавьте приложения iOS и Android.
  2. Положите конфиги GoogleService-Info.plist и google-services.json в проект.
  3. Добавьте SDK Crashlytics.
  4. На Android подключите Gradle-плагин — он сам загружает mapping-файл:
plugins {
    id("com.google.gms.google-services")
    id("com.google.firebase.crashlytics")
}
  1. На iOS добавьте в Build Phases скрипт загрузки dSYM из документации Firebase.
  2. Вызовите тестовое падение и проверьте, что оно появилось в консоли с читаемым стектрейсом.

Логируйте и нефатальные ошибки — например, ошибки парсинга ответа API. Добавляйте ключи вроде экрана, роли пользователя и версии конфигурации, но не пишите персональные данные.

Подключение Sentry

  1. Создайте проект в Sentry и получите DSN.
  2. Установите SDK и инициализируйте его как можно раньше при запуске. Пример для Flutter:
await SentryFlutter.init(
  (options) {
    options.dsn = "https://<key>@<host>/<project>";
    options.tracesSampleRate = 0.2;
  },
  appRunner: () => runApp(const MyApp()),
);
  1. Настройте sentry-cli в CI для загрузки dSYM, mapping-файлов и source maps.
  2. Передавайте release и environment, чтобы отделять продакшен от тестовых сборок и сравнивать версии.

Алерты и приоритизация

Не все падения одинаково важны. Сортируйте их по влиянию:

  • Сколько пользователей затронуто, а не сколько событий. Одно устройство может дать сотни повторов.
  • Где происходит падение: на оплате, регистрации или старте приложения — критично, в редком экране настроек — может подождать.
  • Новое или регрессия: проблема, которая появилась в последней версии, важнее старой и стабильной.
  • Тренд: резкий рост после релиза требует реакции в тот же день.

Настройте минимум три алерта: новая проблема в свежей версии, резкий рост числа падений, падение crash-free ниже вашего порога. Отправляйте их в канал команды, а не на почту, которую никто не читает.

Частые вопросы

Технически да, но два обработчика падений могут конфликтовать, а команда будет смотреть в две системы. Обычно выбирают один инструмент для падений.

Поможем с этим

Если хотите не разбираться самим, а получить результат — этим мы занимаемся каждый день.

Обсудить проект

Читайте также

Есть идея или задача? Расскажите нам

Ответим в течение рабочего дня и предложим решение. Консультация бесплатная.