Отладка процесса сборки, установки и запуска игры

Введение

Ниже приводится руководство по отладке процесса компиляции и сборки игр Unity с использованием Firebase SDK для Unity. В нем описывается, как исследовать и решать многие из наиболее распространенных проблем, с которыми вы можете столкнуться при настройке и создании игры для новой платформы или после обновления. Он расположен в порядке возникновения этих ошибок в процессе. Прочитайте их по порядку и действуйте по мере решения каждого из них.

В дополнение к этому документу для получения дополнительной информации обратитесь к FAQ по Firebase for Unity .

Проблемы с компиляцией в режиме воспроизведения

Первый класс проблем сборки может возникнуть во время тестирования в редакторе перед попыткой запуска мобильной сборки. В этом разделе рассматриваются все ошибки Firebase, возникающие до и во время режима воспроизведения.

Когда Unity запускается или обнаруживает изменения в зависимостях, коде или других ресурсах, он пытается пересобрать проект. Если в этот момент проект не удастся скомпилировать, редактор зарегистрирует ошибки компиляции на консоли, и если вы попытаетесь войти в режим воспроизведения, вы получите всплывающее окно с ошибкой на вкладке «Сцена» Unity с надписью All compiler errors have to be fixed before you can enter playmode! .

Отсутствующие типы, классы, методы и члены.

Многие проблемы 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>'

Шаги разрешения:
  1. Если вы используете классы или методы Firebase в коде, убедитесь, что вы делаете их доступными, используя правильные директивы using для конкретных необходимых продуктов Firebase.

    1. Примеры из MechaHamster: Level Up With Firebase Edition :
      1. using Firebase.RemoteConfig;
      2. using Firebase.Crashlytics;
  2. Убедитесь, что вы импортировали соответствующие пакеты Firebase:

    1. Чтобы импортировать соответствующие пакеты:
      1. Добавьте Firebase Unity SDK как .unitypackage или
      2. Найдите и выполните один из вариантов в разделе «Дополнительные параметры установки Unity» .
    2. Убедитесь, что каждый продукт Firebase в вашем проекте и EDM4U :
      • Находятся в той же версии
      • Были установлены либо исключительно как .unitypackage , либо исключительно через диспетчер пакетов Unity.
  3. Если вы импортировали Firebase Unity SDK до версии «10.0.0» как .unitypackage , zip-архив Firebase Unity SDK содержит пакеты для поддержки .NET 3.x и .NET 4.x. Убедитесь, что вы включили в свой проект только совместимый уровень .NET Framework:

    1. Совместимость между версиями редактора Unity и уровнями .NET Framework обсуждается в разделе «Добавление Firebase в ваш проект Unity» .
    2. Если вы случайно импортировали пакеты Firebase на неправильном уровне .NET Framework или вам нужно переключиться с использования .unitypackage на один из дополнительных вариантов установки Unity , самый чистый способ — удалить все пакеты Firebase с помощью методов, упомянутых в этом разделе миграции , и затем снова импортируйте все пакеты Firebase.
  4. Убедитесь, что ваш редактор перестраивает ваш проект и что ваши попытки воспроизведения отражают самое текущее состояние вашего проекта:

    1. По умолчанию редактор Unity настроен на пересборку при обнаружении изменений ресурсов или конфигурации.
    2. Возможно, эта функция отключена и в редакторе Unity установлено ручное обновление/перекомпиляция . Выясните это и попробуйте обновить вручную, если это так.

Ошибки выполнения режима воспроизведения

Если ваша игра запускается, но во время работы возникают проблемы с Firebase, попробуйте следующее:

Убедитесь, что вы одобряете пакеты Firebase в разделе «Безопасность и конфиденциальность» в Mac OS.

Если при запуске игры в редакторе в Mac OS появляется диалоговое окно с надписью «FirebaseCppApp-<версия>.bundle невозможно открыть, поскольку разработчик не может быть проверен», вы должны утвердить этот конкретный файл пакета в Меню «Безопасность и конфиденциальность» Mac.

Для этого нажмите значок Apple > Системные настройки > Безопасность и конфиденциальность .

В меню безопасности, примерно посередине страницы, есть раздел, в котором говорится: «Использование FirebaseCppApp-<версия>.bundle» заблокировано, поскольку оно принадлежит неустановленному разработчику».

Нажмите кнопку с надписью «Все равно разрешить» .

c35166e224cce720.png

Вернитесь в Unity и снова нажмите Play .

Затем вы увидите предупреждение, похожее на первое:

5ad9ddb0d3a52892.png

Нажмите «Открыть» , и ваша программа сможет продолжить работу; вас больше не спросят об этом конкретном файле.

Убедитесь, что ваш проект содержит и использует действительные файлы конфигурации.

  1. Убедитесь, что настройки сборки установлены для целевой цели (iOS или Android) в меню «Файл» > «Настройки сборки» . Более полное обсуждение можно найти в документации по настройкам сборки Unity .
  2. Загрузите файл конфигурации для своего приложения ( google-services.json для Android или GoogleService-Info.plist для iOS) и создайте цель из консоли Firebase в разделе «Настройки проекта» > «Ваши приложения» . Если у вас уже есть эти файлы, удалите их в своем проекте. и замените их самой последней версией, убедившись, что они написаны точно так, как показано выше, без «(1)» или других цифр, прикрепленных к именам файлов.
  3. Если консоль содержит сообщение о файлах в Assets/StreamingAssets/ , убедитесь, что нет сообщений консоли о том, что Unity не удалось редактировать файлы там.
  4. Убедитесь, что Assets/StreamingAssets/google-services-desktop.json создан и соответствует загруженному файлу конфигурации.
    • Если он не создается автоматически и StreamingAssets/ не существует, вручную создайте каталог в каталоге Assets .
    • Проверьте, сгенерировал ли Unity google-services-desktop.json .

Убедитесь, что каждый продукт Firebase и EDM4U были установлены исключительно через .unitypackage или через диспетчер пакетов Unity.

  1. Проверьте папку Assets/ и диспетчер пакетов Unity, чтобы убедиться, что Firebase SDK и EDM4U были установлены исключительно тем или иным методом.
  2. Некоторые плагины, разработанные Google , такие как Google Play, и сторонние плагины могут зависеть от EDM4U. Эти плагины могут включать EDM4U в свои пакеты .unitypackage или Unity Package Manager (UPM). Убедитесь, что в вашем проекте имеется только одна копия EDM4U. Если какие-либо пакеты UPM зависят от EDM4U, лучше всего сохранить только версии UPM EDM4U, которые можно найти на странице Google API for Unity Archive .

Убедитесь, что все продукты Firebase в вашем проекте имеют одну и ту же версию.

  1. Если SDK Firebase были установлены через .unitypackage , проверьте, все ли библиотеки FirebaseCppApp в разделе Assets/Firebase/Plugins/x86_64/ имеют одну и ту же версию.
  2. Если SDK Firebase были установлены через диспетчер пакетов Unity (UPM), откройте Windows > Диспетчер пакетов , найдите «Firebase» и убедитесь, что все пакеты Firebase имеют одну и ту же версию.
  3. Если ваш проект содержит разные версии 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, чтобы узнать о дополнительных опциях.