Налаштування crash-моніторингу для мобільних VR-ігор

Ви запускаєте мобільну VR-гру на Quest 3. Через тиждень — потік скарг: вилітає на Horizon OS, в логах лише hex-адреси. Без crash reporting ви втрачаєте дні на ручний пошук. Ми налаштували моніторинг для десятка VR-проектів — розбираємо, як виключити сліпі зони. Один такий кейс: гра з URP та динамічн

Наші компетенції

Інші послуги студії

VR/AR/MR застосунки на замовлення

Вражайте клієнтів і навчайте команду у віртуальній реальності

Розробка ігор на Unity

Від ідеї до релізу — ігри, які запам'ятовуються

3D-моделювання та анімація

Оживимо ваш продукт в об'ємній графіці та анімації

VR-тренажери промислового обладнання

Тренуємо операторів на техніці без ризику і простою

AR-інструкції для виробництва

Покрокові підказки прямо на обладнанні — без паперу

Safety-тренажери

Відпрацювання НС і техніки безпеки без виходу на об'єкт

VR/AR-тренінги

Навчаємо персонал сервісу, адаптації та soft skills у VR

Навчальні вікторини

Перевірка знань у форматі гри — легко і без стресу

Корпоративні відеоінструкції

Зрозумілі ролики для навчання співробітників і клієнтів

Гейміфікація бізнес-процесів

Мотивуємо команду через ігрові механіки в KPI та HR

Застосунки для інфокіосків

Інтерактивні екрани для магазинів, стендів і офісів

VR/AR-інсталяції

Wow-ефект для брендів на виставках, івентах і в шоу-румах

Віртуальні виставки та музеї

Ваша експозиція доступна з будь-якої точки світу — 24/7

Event-квести та брендовані ігри

Незабутні ігри для конференцій та клієнтських івентів

Часті запитання

Останні роботи

  • image_games_mortal_motors_495_0.webp
    Розробка гри для компанії Mortal Motors
    1504
  • image_games_a_turnbased_strategy_game_set_in_a_fantasy_setting_with_fire_and_sword_603_0.webp
    Покрокова стратегія у фентезі сеттингу With Fire And Sword
    1006
  • image_games_second_team_604_0.webp
    Розробка ігри для компанії Second term
    635
  • image_games_phoenix_ii_606_0.webp
    3D-анімація – тизер для гри phoenix 2.
    716
  • image_training-quizzes_kids_shopping_quiz_614_0.webp
    Навчальна вікторина для дітей «Покупки в магазині»
    95

Ви запускаєте мобільну 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 не ламає пайплайн.

Як ми налаштовуємо моніторинг під ключ

Процес включає п'ять етапів:

  1. Аналітика: вивчення поточного білда, версії Unity, платформи, сценаріїв крішів.
  2. Інтеграція: підключення Crashlytics та/або Sentry, налаштування symbol upload у CI/CD.
  3. Кастомізація: додавання breadcrumbs, custom events, soft error logging.
  4. Тестування: симуляція крішів, перевірка стека, налаштування аліасів.
  5. Документація: інструкція з розбору крішів для команди.
Етап Тривалість
Базова інтеграція 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.