Введение
Ниже приведены инструкции по отладке процесса компиляции и сборки игр Unity с помощью Firebase SDK для Unity. В нем рассказывается, как выявлять и устранять распространенные проблемы, которые могут возникнуть при настройке и сборке игры для новой платформы или после обновления. Ошибки перечислены в том порядке, в котором они могут возникнуть в процессе. Проверьте их по порядку и устраните.
Помимо этого документа, рекомендуем ознакомиться с разделом часто задаваемых вопросов о Firebase для 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 как
.unitypackages или - Изучите и выполните один из альтернативных вариантов, описанных в разделе Дополнительные варианты установки Unity.
- Добавьте Firebase Unity SDK как
- Убедитесь, что все продукты Firebase в вашем проекте и EDM4U:
- имеют одинаковую версию;
- Установлены только как
.unitypackages ИЛИ только через менеджер пакетов Unity.
- Чтобы импортировать нужные пакеты, выполните одно из следующих действий:
Если вы импортировали Firebase Unity SDK версии ниже 10.0.0 как
.unitypackages, то в ZIP-архиве Firebase Unity SDK будут пакеты для поддержки .NET 3.x и .NET 4.x. Убедитесь, что в проекте указан только совместимый уровень .NET Framework:- Совместимость версий редактора Unity и уровней .NET Framework описана в статье Как добавить Firebase в проект Unity.
- Если вы случайно импортировали пакеты Firebase на неправильном уровне .NET Framework или вам нужно перейти с использования
.unitypackages на один из дополнительных вариантов установки Unity, самый простой способ – удалить все пакеты Firebase, используя методы, описанные в этом разделе о переносе, а затем снова импортировать все пакеты Firebase.
Убедитесь, что редактор пересобирает проект и что ваши попытки воспроизвести его отражают текущее состояние проекта:
- По умолчанию редактор Unity перестраивает проект при обнаружении изменений в объектах или конфигурации.
- Возможно, эта функция отключена и в редакторе Unity задано ручное обновление/перекомпиляция. Проверьте, так ли это, и при необходимости обновите страницу вручную.
Ошибки среды выполнения в режиме воспроизведения
Если игра запускается, но при работе возникают проблемы с Firebase, попробуйте следующее:
Как разрешить использование пакетов Firebase в разделе "Безопасность и конфиденциальность" на устройстве с macOS
Если при запуске игры в редакторе на macOS появляется диалоговое окно с сообщением "Не удается открыть FirebaseCppApp-<version>.bundle, так как не удалось проверить разработчика", вам нужно одобрить этот файл в меню "Системные настройки > Защита и безопасность".
Для этого нажмите на значок Apple > Системные настройки > Безопасность и конфиденциальность.
В меню безопасности примерно в середине страницы есть раздел с сообщением "Использование "FirebaseCppApp-<version>.bundle" заблокировано, поскольку разработчик не идентифицирован".
Нажмите кнопку Все равно разрешить.

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

Нажмите Открыть, и программа сможет продолжить работу. Больше этот файл запрашиваться не будет.
Убедитесь, что в проекте есть действительные файлы конфигурации и они используются.
- Убедитесь, что в настройках сборки в разделе File > Build Settings (Файл > Настройки сборки) выбрана нужная платформа (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, лучше оставить только версии 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 SDK, а затем установить их заново, но уже одной версии. Самый простой способ – удалить все пакеты Firebase, используя методы, описанные в этом разделе.
Ошибки при создании целевого устройства и преобразователя
Если игра работает в редакторе (настроенном для подходящей целевой платформы), проверьте, правильно ли настроен и работает менеджер внешних зависимостей для Unity (EDM4U).
В репозитории EDM4U на GitHub есть пошаговое руководство по этому этапу. Ознакомьтесь с ним, прежде чем продолжить.
Проблемы с файлом 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 это можно сделать несколькими способами:
- Если в разделе Настройки проигрывателя включен параметр Специальный шаблон 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, ознакомьтесь с разделом Менеджер внешних зависимостей для Unity.
Дальнейшие действия
Если в игре по-прежнему возникают проблемы с компиляцией, сборкой или запуском, связанные с Firebase, изучите страницу проблем с Firebase SDK для Unity и, возможно, создайте новую проблему. Также вы можете ознакомиться с дополнительными вариантами на странице поддержки Firebase.