Вы запускаете мобильную VR-игру на Quest 3. Через неделю — поток жалоб: вылетает на Horizon OS, в логах только hex-адреса. Без crash reporting вы теряете дни на ручной поиск. Мы настроили мониторинг для десятка VR-проектов — разбираем, как исключить слепые зоны. Один такой кейс: игра с URP и динамическими тенями падала на Pico 4 из-за некорректного unload AssetBundle. Crashlytics показал hex-стек, который после symbolication указал на AssetBundle.Unload(true) в неверном потоке. Исправление заняло два часа вместо двух недель. После настройки symbolication crash-free rate вырос с 94% до 99.2% — это стандартная динамика для VR-проектов с нашей интеграцией.
Почему стандартный Unity Crash Reporter не работает для VR?
Unity Cloud Diagnostics и встроенный UnityCrashHandler покрывают C#-исключения, но 90% крэшей в VR — нативные: SIGSEGV, SIGABRT. Они приходят с hex-стеком, который без NDK symbolication не читается. Вот реальный пример: Quest 2, Unity LTS, URP — крэш на Horizon OS. Стек: #00 pc 0x00000000012abc14 /data/app/.../libunity.so. После загрузки symbol table он раскрывается в вызов Vulkan buffer allocation, который лёг из-за изменения memory limits. Для IL2CPP-сборок нужны .pdb или il2cpp_data — без них Firebase Crashlytics покажет нативный стек без маппинга на C#.
Oculus Developer Center рекомендует загружать symbols для каждой сборки. Это единственный способ получить читаемый стек для нативных крэшей.
Firebase Crashlytics или Sentry: что выбрать для VR?
Firebase Crashlytics — стандарт для мобильного VR. Интеграция через Firebase Unity SDK: добавьте google-services.json, настройте launcherTemplate.gradle. Включите android.useNewApkSplitting для корректного маппинга версий. Загрузка NDK symbols — через CLI: firebase crashlytics:symbols:upload --app=APP_ID path/to/libil2cpp.so. Важно: всегда загружайте symbols для каждой используемой версии Unity.
Sentry даёт больше гибкости: можно развернуть on-premise для конфиденциальных данных и настроить кастомные event-логи. Мы часто предлагаем комбинацию: Crashlytics для автоматического сбора, Sentry для событий под NDA. Оба инструмента поддерживают фильтрацию по версии ОС, модели и версии игры.
| Инструмент | Время интеграции | Symbolication | On-premise |
|---|---|---|---|
| Firebase Crashlytics | 1–2 дня | + IL2CPP, NDK | — |
| Sentry | 2–3 дня | + IL2CPP, NDK | + |
Firebase Crashlytics быстрее Sentry примерно в два раза на этапе базовой интеграции, но Sentry выигрывает в кастомизации. На одном проекте мы сэкономили 40% времени QA после настройки symbolication — crash-free rate вырос с 94% до 99.2% за две недели.
Как загрузить NDK symbols в Firebase Crashlytics?
Процесс включает загрузку .pdb для IL2CPP и .sym для нативного кода. Для Unity IL2CPP: в билде создаётся il2cpp_data — его нужно преобразовать в symbol файл через il2cpp-symbols.zip. Для нативного NDK: используйте ndk-stack или Firebase CLI. Мы автоматизируем этот шаг в CI/CD: после каждой сборки Jenkins загружает symbols, чтобы не терять версии. Гарантируем, что symbol upload не ломает пайплайн.
Как мы настраиваем мониторинг под ключ
Процесс включает пять этапов:
- Аналитика: изучение текущего билда, версии Unity, платформы, сценариев крэшей.
- Интеграция: подключение Crashlytics и/или Sentry, настройка symbol upload в CI/CD.
- Кастомизация: добавление breadcrumbs, custom events, soft error logging.
- Тестирование: симуляция крэшей, проверка стека, настройка алиасов.
- Документация: инструкция по разбору крэшей для команды.
| Этап | Длительность |
|---|---|
| Базовая интеграция Crashlytics с symbolication | 1–2 рабочих дня |
| Полный стек (Crashlytics + Sentry + custom events) | 3–5 рабочих дней |
| Разбор и исправление топ-5 крэшей после запуска | 1–3 недели |
Типичные причины крэшей в мобильных VR-играх
Основные проблемы: Out of Memory (Quest 3 оставляет приложению около 3-4 ГБ), утечки нативной памяти, некорректный unload AssetBundle, Vulkan validation errors, threading violations. Например, обращение к Unity API не из main thread — частая причина SIGABRT. После внедрения мы поддерживаем дашборд с фильтрацией по версии Horizon OS, модели устройства и версии игры. Ключевая метрика — crash-free rate: для VR норма выше 99%, если ниже 97% — срочное расследование. В одном проекте утечка AssetBundle давала 3% крэшей — после фикса показатель вернулся к 99.5%.
Что вы получаете в итоге?
- Полная visibility крэшей: managed + native.
- Сокращение времени поиска причины с недель до часов.
- Возможность фильтровать по версии ОС, модели, версии игры.
- Обучение команды работе с дашбордом.
Закажите интеграцию — мы оценим ваш проект и предложим оптимальный стек. Для начала достаточно прислать билд и список целевых устройств. Получите консультацию: наши инженеры помогут выбрать инструменты и настроить пайплайн symbol upload.






