Введение
Ниже приводится руководство по отладке процесса компиляции и сборки игр Unity с использованием Firebase SDK для Unity. В нем описывается, как исследовать и решать многие наиболее распространенные проблемы, с которыми вы можете столкнуться при настройке и создании игры для новой платформы или после обновления. Он расположен в порядке возникновения этих ошибок в процессе. Прочитайте их по порядку и действуйте по мере решения каждого из них.
В дополнение к этому документу для получения дополнительной информации обратитесь к FAQ по Firebase for Unity .
Проблемы с компиляцией в режиме воспроизведения
Первый класс проблем сборки может возникнуть во время тестирования в редакторе перед попыткой запуска мобильной сборки. В этом разделе рассматриваются все ошибки Firebase, возникающие до и во время режима воспроизведения.
Когда Unity запускается или обнаруживает изменения в зависимостях, коде или других ресурсах, он пытается пересобрать проект. Если в этот момент проект не удастся скомпилировать, редактор зарегистрирует ошибки компиляции на консоли, и если вы попытаетесь войти в режим воспроизведения, вы получите всплывающее окно с ошибкой на вкладке «Сцена» 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 как
.unitypackage
или - Найдите и выполните один из вариантов в разделе «Дополнительные параметры установки Unity» .
- Добавьте Firebase Unity SDK как
- Убедитесь, что каждый продукт Firebase в вашем проекте и EDM4U :
- Находятся в той же версии
- Были установлены либо исключительно как
.unitypackage
, либо исключительно через диспетчер пакетов Unity.
- Чтобы импортировать соответствующие пакеты:
Если вы импортировали Firebase Unity SDK до версии «10.0.0» как
.unitypackage
, zip-архив Firebase Unity SDK содержит пакеты для поддержки .NET 3.x и .NET 4.x. Убедитесь, что вы включили в свой проект только совместимый уровень .NET Framework:- Совместимость между версиями редактора Unity и уровнями .NET Framework обсуждается в разделе «Добавление Firebase в ваш проект Unity» .
- Если вы случайно импортировали пакеты Firebase на неправильном уровне .NET Framework или вам нужно переключиться с использования
.unitypackage
на один из дополнительных вариантов установки Unity , самый чистый способ — удалить все пакеты Firebase с помощью методов, упомянутых в этом разделе миграции , и затем снова импортируйте все пакеты Firebase.
Убедитесь, что ваш редактор перестраивает ваш проект и что ваши попытки воспроизведения отражают самое текущее состояние вашего проекта:
- По умолчанию редактор Unity настроен на пересборку при обнаружении изменений ресурсов или конфигурации.
- Возможно, эта функция отключена и в редакторе Unity установлено ручное обновление/перекомпиляция . Выясните это и попробуйте обновить вручную, если это так.
Ошибки выполнения режима воспроизведения
Если ваша игра запускается, но во время работы возникают проблемы с Firebase, попробуйте следующее:
Убедитесь, что вы одобряете пакеты Firebase в разделе «Безопасность и конфиденциальность» в Mac OS.
Если при запуске игры в редакторе в Mac OS вы увидите диалоговое окно с надписью «FirebaseCppApp-<version>.bundle Невозможно открыть, поскольку разработчик не может быть проверен», вы должны утвердить этот конкретный файл пакета в Меню «Безопасность и конфиденциальность» Mac.
Для этого нажмите значок Apple > Системные настройки > Безопасность и конфиденциальность.
В меню безопасности, примерно посередине страницы, есть раздел, в котором говорится: «Использование FirebaseCppApp-<version>.bundle» заблокировано, поскольку оно принадлежит неустановленному разработчику».
Нажмите кнопку с надписью «Разрешить в любом случае» .
Вернитесь в Unity и снова нажмите Play .
Затем вы увидите предупреждение, похожее на первое:
Нажмите «Открыть» , и ваша программа сможет продолжить работу; вас больше не спросят об этом конкретном файле.
Убедитесь, что ваш проект содержит и использует действительные файлы конфигурации.
- Убедитесь, что настройки сборки установлены для целевой цели (iOS или Android) в меню «Файл» > «Настройки сборки» . Более полное обсуждение можно найти в документации по настройкам сборки Unity .
- Загрузите файл конфигурации для своего приложения (
google-services.json
для Android илиGoogleService-Info.plist
для iOS) и создайте цель из консоли Firebase в «Настройки проекта» > «Ваши приложения» . Если у вас уже есть эти файлы, удалите их в своем проекте. и замените их самой последней версией, убедившись, что они написаны точно так, как показано выше, без «(1)» или других цифр, прикрепленных к именам файлов. - Если консоль содержит сообщение о файлах в
Assets/StreamingAssets/
, убедитесь, что нет сообщений консоли о том, что Unity не удалось редактировать файлы там. - Убедитесь, что
Assets/StreamingAssets/google-services-desktop.json
создан и соответствует загруженному файлу конфигурации.- Если он не создается автоматически и
StreamingAssets/
не существует, вручную создайте каталог в каталогеAssets
. - Проверьте, сгенерировал ли Unity
google-services-desktop.json
.
- Если он не создается автоматически и
Убедитесь, что каждый продукт Firebase и EDM4U были установлены исключительно через .unitypackage
или через диспетчер пакетов Unity.
- Проверьте папку
Assets/
и диспетчер пакетов Unity, чтобы убедиться, что Firebase SDK и EDM4U были установлены исключительно тем или иным методом. - Некоторые плагины, разработанные Google , такие как Google Play, и сторонние плагины могут зависеть от EDM4U. Эти плагины могут включать EDM4U в свои пакеты
.unitypackage
или Unity Package Manager (UPM). Убедитесь, что в вашем проекте имеется только одна копия EDM4U. Если какие-либо пакеты UPM зависят от EDM4U, лучше всего сохранить только версии UPM EDM4U, которые можно найти на странице API Google для архива Unity .
Убедитесь, что все продукты Firebase в вашем проекте имеют одну и ту же версию.
- Если Firebase SDK были установлены через
.unitypackage
, проверьте, все ли библиотекиFirebaseCppApp
в разделеAssets/Firebase/Plugins/x86_64/
имеют одну и ту же версию. - Если SDK Firebase были установлены через диспетчер пакетов Unity (UPM), откройте Windows > Диспетчер пакетов , найдите «Firebase» и убедитесь, что все пакеты Firebase имеют одну и ту же версию.
- Если ваш проект содержит разные версии Firebase SDK, мы рекомендуем полностью удалить все Firebase SDK перед повторной установкой всех Firebase SDK, на этот раз с теми же версиями. Самый чистый способ — удалить все пакеты Firebase с помощью методов, упомянутых в этом разделе миграции .
Ошибки сборки преобразователя и целевого устройства
Если ваша игра работает в редакторе (настроенном для выбранной вами цели сборки), затем убедитесь, что диспетчер внешних зависимостей для 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 только в том случае, если минификация не решает проблему.
Включить минификацию
Unity представила минификацию в 2017.2 для удаления неиспользуемого кода, что может уменьшить общее количество ссылочных методов в одном dex-файле. * Эту опцию можно найти в настройках проигрывателя > Android > Настройки публикации > Минимизировать . * Параметры могут различаться в разных версиях Unity, поэтому обратитесь к официальной документации Unity.
Включить мультидекс
Если после включения минификации количество ссылочных методов все еще превышает лимит, другой вариант — включить multidex
. В Unity есть несколько способов добиться этого:
- Если в настройках проигрывателя включен пользовательский шаблон Gradle , измените
mainTemplate.gradle
. - Если вы используете Android Studio для сборки экспортированного проекта, измените файл build.gradle на уровне модуля.
Более подробную информацию можно найти в руководстве пользователя multidex .
Понимание и исправление ошибок времени выполнения целевого устройства
Если ваша игра работает в редакторе и может быть создана и установлена на ваше целевое устройство, но вы столкнулись с ошибками во время выполнения, проверьте и изучите журналы, созданные на устройстве .
В этом разделе описывается, как исследовать журналы на предмет возможных ошибок, а также одной такой ошибки, которая возникает только во время выполнения на устройстве или симуляторе.
Андроид
Симулятор
- Просмотрите журналы, отображаемые в консоли вашего эмулятора, или просмотрите окно Logcat .
Устройство
Ознакомьтесь с adb и adb logcat и их использованием.
- Хотя вы можете использовать различные инструменты вашей среды командной строки для фильтрации вывода, рассмотрите альтернативный вариант — изучить параметры logcat.
Простой способ начать сеанс ADB с чистого листа:
adb logcat -c && adb logcat <OPTIONS>
где
OPTIONS
— это те флаги, которые вы передаете в командной строке для фильтрации вывода.
Использование Logcat через Android Studio
При использовании Logcat через Android Studio доступны дополнительные инструменты поиска , которые упрощают создание продуктивного поиска.
iOS
Проверка журналов
Если вы используете физическое устройство, подключите его к компьютеру. Проверьте lldb в Xcode.
Свифт Проблемы
Если вы столкнетесь с журналами ошибок, в которых упоминается Swift, обратитесь к разделу «Диспетчер внешних зависимостей для Unity» .
Дальнейшие шаги
Если в вашей игре по-прежнему возникают проблемы с компиляцией, сборкой или запуском, связанные с Firebase, изучите страницу проблем Firebase SDK для Unity и рассмотрите возможность регистрации новой проблемы. Кроме того, посетите страницу поддержки Firebase, чтобы узнать о дополнительных опциях.