Введение
Ниже приведено руководство по отладке процесса компиляции и сборки игр 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, то архив Firebase Unity SDK содержит пакеты для поддержки .NET 3.x и .NET 4.x. Убедитесь, что в ваш проект включен только совместимый уровень .NET Framework:- Вопросы совместимости между версиями редактора Unity и уровнями .NET Framework обсуждаются в разделе «Добавление Firebase в ваш проект Unity» .
- Если вы случайно импортировали пакеты Firebase на неправильном уровне .NET Framework или вам нужно переключиться с использования
.unitypackageна один из вариантов установки Additional Unity , самый простой способ — удалить все пакеты Firebase с помощью методов, описанных в этом разделе миграции , а затем повторно импортировать все пакеты Firebase.
Убедитесь, что ваш редактор перестраивает ваш проект и что ваши попытки воспроизведения отражают самое актуальное состояние вашего проекта:
- По умолчанию редактор Unity настроен на пересборку при обнаружении изменений ресурсов или конфигурации.
- Возможно, эта функция отключена, и в редакторе Unity включен режим ручного обновления/перекомпиляции . Проверьте это и попробуйте выполнить ручное обновление, если это так.
Ошибки выполнения в режиме воспроизведения
Если игра запускается, но во время работы возникают проблемы с Firebase, попробуйте следующее:
Убедитесь, что вы одобрили пакеты Firebase в разделе «Безопасность и конфиденциальность» в Mac OS.
Если при запуске игры в редакторе на Mac OS появляется диалоговое окно с сообщением "FirebaseCppApp-<version>.bundle не может быть открыт, поскольку разработчик не может быть проверен", вам необходимо подтвердить этот конкретный файл пакета в меню "Безопасность и конфиденциальность" на Mac.
Для этого щелкните значок Apple > Системные настройки > Безопасность и конфиденциальность
В меню безопасности, примерно посередине страницы, есть раздел, в котором говорится: «Файл „FirebaseCppApp-<version>.bundle“ заблокирован для использования, поскольку он не принадлежит идентифицированному разработчику».
Нажмите кнопку « Разрешить в любом случае» .

Вернитесь в Unity и снова нажмите кнопку «Играть» .
Затем вы увидите предупреждение, похожее на первое:

Нажмите «Открыть» , и ваша программа сможет продолжить работу; вам больше не потребуется указывать этот файл.
Убедитесь, что ваш проект содержит и использует корректные конфигурационные файлы.
- Убедитесь, что параметры сборки заданы для целевой платформы (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, чтобы убедиться, что SDK Firebase и EDM4U были установлены исключительно одним из двух способов. - Некоторые плагины, разработанные Google , например, для Google Play, а также плагины сторонних разработчиков могут зависеть от EDM4U. Эти плагины могут включать EDM4U в свои файлы
.unitypackageили пакеты Unity Package Manager (UPM). Убедитесь, что в вашем проекте есть только одна копия EDM4U. Если какие-либо пакеты UPM зависят от EDM4U, лучше всего хранить только версии EDM4U, созданные с помощью UPM, которые можно найти на странице Google APIs for Unity Archive .
Убедитесь, что все продукты Firebase в вашем проекте имеют одинаковую версию.
- Если SDK Firebase были установлены через
.unitypackage, проверьте, совпадают ли версии всех библиотекFirebaseCppAppв папкеAssets/Firebase/Plugins/x86_64/. - Если SDK Firebase были установлены через диспетчер пакетов Unity (UPM), откройте Windows > Диспетчер пакетов , найдите "Firebase" и убедитесь, что все пакеты Firebase имеют одинаковую версию.
- Если ваш проект содержит разные версии SDK Firebase, мы рекомендуем полностью удалить все SDK Firebase, прежде чем устанавливать их заново, на этот раз с теми же версиями. Самый чистый способ — удалить все пакеты Firebase с помощью методов, описанных в этом разделе миграции .
Ошибки сборки резолвера и целевого устройства
Если ваша игра работает в редакторе (с настройкой для выбранной вами целевой среды сборки), далее убедитесь, что менеджер внешних зависимостей для Unity (EDM4U) правильно настроен и функционирует.
В репозитории EDM4U на GitHub содержится пошаговое руководство для этой части процесса, которое следует изучить и выполнить перед продолжением.
Проблемы с «единым порядком дескрипторов» и минификацией ( обязательно при использовании 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
Если после включения минификации количество используемых методов по-прежнему превышает лимит, можно включить multidex . В Unity это можно сделать несколькими способами:
- Если в настройках проигрывателя включена опция "Пользовательский шаблон 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, обратитесь к разделу «Внешний менеджер зависимостей для Unity» по этому вопросу.
Дальнейшие шаги
Если в вашей игре по-прежнему возникают проблемы с компиляцией, сборкой или запуском, связанные с Firebase, изучите страницу проблем Firebase SDK для Unity и рассмотрите возможность создания новой заявки. Кроме того, обратитесь к странице поддержки Firebase, чтобы узнать о дополнительных возможностях.