Где именно ломается запуск
Любой сбой запуска попадает в одну из четырёх зон. Определите зону по симптому — и сразу сужаете круг поиска в 3-4 раза.
Краш до первого кадра, черный экран, перезапуск при загрузке ассетов. Зависит от RAM, GPU, версии ОС, архитектуры (arm64/x86).
Режект при модерации, «Waiting for Review» вечно, не качается у пользователей, неверный bundle ID, проблемы с подписью/профилями.
Игра запускается, но виснет на «Connecting…», ошибка 401/503, Remote Config не приходит, CDN отдаёт 404 для бандлов.
NullReference на Awake, бесконечный корутин, deadlock в потоке рендера, неинициализированные синглтоны, несовместимость IL2CPP/AOT.
Четыре зоны отказа — что проверять в первую очередь
Зона 1: Устройство и ОС
Самая коварная зона — ошибка не воспроизводится на дев-машине, но массово у пользователей.
- RAM OOM kill: игра съедает > лимита ОС (iOS ~1.8 Гб на старых, Android — по cgroups). Проверяйте профайлером на устройствах с 2-3 Гб RAM.
- GPU черновик: шейдеры, несовместимые с Mali/Adreno/PowerVR. Тестируйте на «тройке» чипсетов: Adreno, Mali, Apple GPU.
- Архитектура: arm64-only билд не запустится на x86 эмуляторах и некоторых Chrome OS. Всегда собирайте universal (arm64 + armv7 при необходимости).
- Версия ОС: минимальная поддерживаемая в манифесте/Info.plist должна совпадать с реально протестированной. Новые API (например, URP/HDRP) требуют iOS 13+ / Android 8+.
Зона 2: Магазины приложений
Игра работает локально, но не доходит до пользователя или режектится модерацией.
- Подпись и профили: expired Distribution сертификат, не тот Provisioning Profile (Development вместо Distribution), mismatch Bundle ID / package name.
- App Store Connect / Play Console: не заполнены обязательные поля (Privacy Policy, Age Rating, Data Safety), скриншоты не соответствуют гайдлайнам.
- App Tracking Transparency (iOS 14.5+): отсутствует NSUserTrackingUsageDescription — авторежект. На Android — не declarado AD_ID в Data Safety.
- TestFlight / Internal Testing: билд не доступен тестерам — проверьте группы тестеров, срок действия билда (90 дней), версию CFBundleShortVersionString / versionName.
Зона 3: Бэкенд и конфиг
Игра запускается, но «висит на загрузке» или выдаёт ошибку сети.
- Remote Config / Feature Flags: дефолтные значения отсутствуют, формат JSON невалиден, CDN отдаёт старую версию (кэш). Всегда имейте локальный fallback.
- Версионирование API: клиент шлёт v2, сервер ожидает v3 — handshake фейлится. Внедряйте обязательную проверку версии при старте с понятным сообщением «Обновите игру».
- CDN и ассет-бандлы: Addressables/AssetBundles возвращают 404 или 403. Проверьте заголовки CORS, подписи URL (signed URLs), срок действия ссылок.
- Античит и защита: root/jailbreak detect блокирует запуск на легальных устройствах (кастомные прошивки, эмуляторы для тестов). Добавьте whitelist для QA-сборок.
Зона 4: Клиентский код
Краш в managed-слое до первого кадра. Часто маскируется под «черный экран».
- Порядок инициализации: обращение к Instance до Awake, Race condition между SDK (Ads, Analytics, Push). Используйте ScriptableObject-конфиги и явный порядок через RuntimeInitializeOnLoadMethod.
- IL2CPP / AOT: рефлексия, Generic-методы, LINQ в горячих путях — крашит только в релизе. Тестируйте IL2CPP билд на устройстве обязательно.
- Striping уровни: High/Managed stripping вырезает код, используемый через рефлексию (JSON сериализация, DI контейнеры). Link.xml / preserve атрибуты — обязательны.
- Необработанные исключения: Application.logMessageReceivedThreaded + отправка в Sentry/Firebase Crashlytics до инициализации SDK — ловите в нативном плагине или UnityPlayerActivity.
Алгоритм диагностики за 5 шагов
Симптом в логе
Соберите Device Log (logcat / Xcode Console / Crashlytics). Ищите: Exception type, Stack trace, Last loaded assembly, PID exit code.
Локализация этапа
Сопоставьте с воронкой: нативный бутстрэп → managed Awake → загрузка ассетов → нетворк → геймплей. Каждый этап оставляет следы в логе.
Минимальный репро
Отключите SDK по одному (Ads, Analytics, Push, Anti-cheat). Уберите Addressables, запустите пустую сцену. Найдите виновника методом исключения.
Проверка окружения
Очистите кэш приложения, переустановите, проверьте дату/время на устройстве, VPN, корпоративный MDM, свободное место (нужно > 500 Мб).
Фикс и регресс-тест
Исправьте, соберите Development → Release → QA на матрице устройств. Закройте тикет с логами «до/после» и коммитом фикса.
iOS vs Android: разные болячки, разный подход
iOS — частые причины
Android — частые причины
5 типовых сценариев «не запускается» и что делать
Запуск игры — это не галочка в чек-листе перед релизом. Это непрерывный сигнал от пользователя к коду и обратно. Настройте слушание этого сигнала раз — и каждая следующая ночь будет спокойнее.
Надоели сериалы и однотипные игры? 🎬
Попробуйте текстовые ролевые игры с ИИ-персонажами — это как интерактивная книга, где главный герой вы сами. Никакого пассивного просмотра: вы говорите, действуете и влияете на сюжет. ИИ подыгрывает в роли персонажа и ведёт историю дальше — увлекает не хуже любимого сериала, только теперь главный — вы.
Попробовать новый формат 👉 https://clck.ru/3Ta8kQ

