Введение
Ниже приведены инструкции по отладке процесса компиляции и сборки игр Unity с помощью Firebase SDK для Unity. В ней описано, как исследовать и решать многие из наиболее распространенных проблем, с которыми вы можете столкнуться при настройке и сборке игры для новой платформы или после обновления. Ошибки перечислены в порядке их возможного возникновения. Ознакомьтесь с ними и выполните необходимые действия.
Дополнительную информацию можно найти в разделе часто задаваемых вопросов о Firebase для Unity.
Проблемы с компиляцией в режиме воспроизведения
Первый класс проблем со сборкой может возникнуть во время тестирования в редакторе перед попыткой запустить мобильную сборку. В этом разделе рассматриваются все ошибки Firebase, которые возникают до и во время режима воспроизведения.
Когда Unity запускается или обнаруживает изменения в зависимостях, коде или других объектах, он пытается пересобрать проект. Если проект не удается скомпилировать, редактор зарегистрирует ошибки компиляции в консоли. Если вы попытаетесь войти в режим воспроизведения, на вкладке Scene (Сцена) в Unity появится всплывающее окно с ошибкой All compiler errors have to be fixed before you can enter playmode!.
Как устранять проблемы с компиляцией, связанные с Firebase
Отсутствующие типы, классы, методы и элементы
Многие проблемы с Firebase возникают из-за того, что редактор и компилятор не могут найти нужные типы, классы, методы и элементы. Обычно это проявляется следующим образом:
The type or namespace name ‘<CLASS OR NAMESPACE NAME>' could not be found. Are you missing a using directive or an assembly reference?
The type or namespace name <TYPE OR NAMESPACE NAME> does not exist in the namespace ‘Firebase<.OPTIONAL NESTED NAMESPACE NAME PATH>' (are you missing an assembly reference?)
‘<CLASS NAME>' does not contain a definition for ‘<MEMBER VARIABLE OR METHOD NAME>'
Как устранить проблему:
Если вы используете классы или методы Firebase в коде, убедитесь, что они доступны, добавив правильные директивы
usingдля нужных продуктов Firebase.Убедитесь, что вы импортировали нужные пакеты Firebase:
- Чтобы импортировать нужные пакеты, выполните одно из следующих действий:
- Добавьте Firebase Unity SDK в виде
.unitypackages или - Изучите и выполните один из альтернативных вариантов в разделе Дополнительные варианты установки Unity.
- Добавьте Firebase Unity SDK в виде
- Убедитесь, что каждый продукт Firebase в вашем проекте и EDM4U:
- имеют одинаковую версию;
- Установлены только как
.unitypackageили только через Unity Package Manager.
- Чтобы импортировать нужные пакеты, выполните одно из следующих действий:
Если вы импортировали Firebase Unity SDK до версии 10.0.0 в виде файлов
.unitypackage, то ZIP-архив Firebase Unity SDK содержит пакеты для поддержки как .NET 3.x, так и .NET 4.x. Убедитесь, что в проект включен только совместимый уровень .NET Framework:- Совместимость версий Unity Editor и уровней .NET Framework описана в статье Как добавить Firebase в проект Unity.
- Если вы случайно импортировали пакеты Firebase на неправильном уровне .NET Framework или вам нужно перейти с
.unitypackageна один из дополнительных вариантов установки Unity, лучше всего удалить все пакеты Firebase, используя методы, упомянутые в этом разделе о переносе, а затем повторно импортировать все пакеты Firebase.
Убедитесь, что редактор пересобирает проект и что ваши попытки воспроизведения отражают текущее состояние проекта.
- По умолчанию редактор Unity настроен на пересборку при обнаружении изменений в объектах или конфигурации.
- Возможно, эта функция отключена, а в Unity Editor задано обновление/перекомпиляция вручную. Проверьте, так ли это, и при необходимости обновите данные вручную.
Ошибки выполнения в режиме воспроизведения
Если игра запускается, но в процессе возникают проблемы с Firebase, попробуйте сделать следующее:
Убедитесь, что вы одобрили пакеты Firebase в разделе "Безопасность и конфиденциальность" в Mac OS.
Если при запуске игры в редакторе на Mac OS вы видите диалоговое окно с сообщением "Не удается открыть FirebaseCppApp-<версия>.bundle, так как не удается проверить разработчика", вам нужно одобрить этот файл пакета в меню "Защита и безопасность " на Mac.
Для этого нажмите на значок Apple > Системные настройки > Безопасность и конфиденциальность.
В меню безопасности примерно в середине страницы есть раздел с сообщением "Использование FirebaseCppApp-<версия>.bundle заблокировано, так как разработчик не идентифицирован".
Нажмите кнопку Allow Anyway (Все равно разрешить).

Вернитесь в Unity и снова нажмите Play (Воспроизвести).
Вы увидите предупреждение, похожее на первое:

Нажмите Открыть, и программа продолжит работу. Больше вы не увидите предупреждений об этом файле.
Убедитесь, что в проекте есть действительные файлы конфигурации и они используются.
- Убедитесь, что в настройках сборки (File > Build Settings (Файл > Настройки сборки)) указана нужная целевая платформа (iOS или Android). Подробную информацию можно найти в документации по настройкам сборки Unity.
- Скачайте файл конфигурации для своего приложения (
google-services.jsonдля Android илиGoogleService-Info.plistдля iOS) и создайте цель в консоли Firebase, выбрав Project Settings (Настройки проекта) > Your Apps (Ваши приложения). Если у вас уже есть эти файлы, удалите их из проекта и замените на последние версии. Убедитесь, что названия файлов точно соответствуют указанным выше и не содержат цифр, например "(1)". - Если в консоли есть сообщение о файлах в
Assets/StreamingAssets/, убедитесь, что в ней нет сообщений о том, что Unity не удалось отредактировать файлы в этой папке. - Убедитесь, что файл
Assets/StreamingAssets/google-services-desktop.jsonсоздан и соответствует скачанному файлу конфигурации.- Если каталог не создается автоматически и папка
StreamingAssets/отсутствует, создайте ее вручную в каталогеAssets. - Проверьте, сгенерировал ли Unity файл
google-services-desktop.json.
- Если каталог не создается автоматически и папка
Убедитесь, что все продукты Firebase и EDM4U были установлены только через .unitypackage или Unity Package Manager.
- Проверьте папку
Assets/и Unity Package Manager, чтобы убедиться, что Firebase SDK и EDM4U были установлены только одним из способов. - Некоторые плагины, разработанные Google, например Google Play, и сторонние плагины могут зависеть от EDM4U. Эти плагины могут включать EDM4U в свои пакеты
.unitypackageили Unity Package Manager (UPM). Убедитесь, что в вашем проекте есть только одна копия EDM4U. Если какие-либо пакеты UPM зависят от EDM4U, лучше оставить только версии EDM4U для UPM, которые можно найти на странице архива API Google для Unity.
Убедитесь, что все продукты Firebase в вашем проекте имеют одинаковую версию.
- Если Firebase SDK были установлены через
.unitypackage, проверьте, все ли библиотекиFirebaseCppAppвAssets/Firebase/Plugins/x86_64/имеют одну и ту же версию. - Если Firebase SDK были установлены через Unity Package Manager (UPM), откройте Windows > Package Manager, найдите Firebase и убедитесь, что все пакеты Firebase имеют одну и ту же версию.
- Если в вашем проекте используются разные версии Firebase SDK, рекомендуем удалить их все и установить заново, но уже одной версии. Лучше всего удалить все пакеты Firebase, как описано в разделе о переносе.
Ошибки сборки, связанные с распознавателем и целевым устройством
Если игра работает в редакторе (настроенном для выбранной целевой сборки), убедитесь, что External Dependency Manager for Unity (EDM4U) правильно настроен и работает.
В репозитории EDM4U на GitHub есть пошаговое руководство по этой части процесса. Ознакомьтесь с ним и следуйте инструкциям.
Проблемы с Single Dex и минификация (обязательно, если используется Cloud Firestore)
При создании приложения для Android может возникнуть ошибка сборки, связанная с наличием одного файла DEX. Если ваш проект настроен на использование системы сборки Gradle, сообщение об ошибке будет выглядеть примерно так:
Cannot fit requested classes in a single dex file.
Файлы .dex используются для хранения набора определений классов и связанных с ними дополнительных данных для приложений для Android. Один файл DEX может ссылаться не более чем на 65 536 методов. Если общее количество методов из всех библиотек Android в вашем проекте превышает это ограничение,сборка не будет выполнена.
Выполните два шага, описанных ниже. Включайте multidex, только если минификация не помогла решить проблему.
Включить минификацию
В версии 2017.2 Unity появилась функция минификации, которая удаляет неиспользуемый код. Это позволяет уменьшить общее количество методов, на которые ссылается один DEX-файл. * Этот параметр можно найти в разделе Player Settings (Настройки проигрывателя) > Android > Publishing Settings (Настройки публикации) > Minify (Минификация). * В разных версиях Unity могут быть разные варианты. Ознакомьтесь с официальной документацией Unity.
Включите Multidex
Если после включения минификации количество методов, на которые есть ссылки, по-прежнему превышает лимит, можно включить multidex. В Unity это можно сделать несколькими способами:
- Если в разделе Player Settings (Настройки проигрывателя) включен параметр Custom Gradle Template (Собственный шаблон Gradle), измените
mainTemplate.gradle. - Если вы используете Android Studio для сборки экспортированного проекта, измените файл build.gradle на уровне модуля.
Подробную информацию можно найти в руководстве пользователя по multidex.
Как устранять ошибки выполнения на целевом устройстве
Если игра работает в редакторе, ее можно собрать и установить на целевое устройство, но возникают ошибки выполнения, изучите журналы, созданные на устройстве.
В этом разделе рассказывается, как искать в журналах возможные ошибки, в том числе те, которые возникают только во время выполнения на устройстве или в симуляторе.
Android
Симулятор
- Проверьте журналы в консоли эмулятора или откройте окно Logcat.
Устройство
Ознакомьтесь с инструментами adb и adb logcat и узнайте, как их использовать.
- Для фильтрации выходных данных можно использовать различные инструменты командной строки или параметры logcat.
Чтобы начать сеанс ADB с чистого листа, выполните следующие действия:
adb logcat -c && adb logcat <OPTIONS>где
OPTIONS– это параметры, которые вы передаете в командную строку для фильтрации выходных данных.
Как использовать Logcat в Android Studio
При использовании Logcat через Android Studio доступны дополнительные инструменты поиска, которые упрощают создание эффективных поисковых запросов.
iOS
Проверка журналов
Если вы используете физическое устройство, подключите его к компьютеру. Проверьте lldb в Xcode.
Проблемы со Swift
Если в журналах ошибок упоминается Swift, ознакомьтесь с разделом External Dependency Manager for Unity.
Дальнейшие действия
Если у вас по-прежнему возникают проблемы с компиляцией, сборкой или запуском игры, связанные с Firebase, изучите страницу проблем Firebase SDK для Unity и при необходимости сообщите о новой проблеме. Дополнительную информацию можно найти на странице поддержки Firebase.