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

Введение

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

Помимо этого документа, рекомендуем ознакомиться с разделом часто задаваемых вопросов о Firebase для 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 как .unitypackages или
      2. Изучите и выполните один из альтернативных вариантов, описанных в разделе Дополнительные варианты установки Unity.
    2. Убедитесь, что все продукты Firebase в вашем проекте и EDM4U:
      • имеют одинаковую версию;
      • Установлены только как .unitypackages ИЛИ только через менеджер пакетов Unity.
  3. Если вы импортировали Firebase Unity SDK версии ниже 10.0.0 как .unitypackages, то в ZIP-архиве Firebase Unity SDK будут пакеты для поддержки .NET 3.x и .NET 4.x. Убедитесь, что в проекте указан только совместимый уровень .NET Framework:

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

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

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

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

Как разрешить использование пакетов Firebase в разделе "Безопасность и конфиденциальность" на устройстве с macOS

Если при запуске игры в редакторе на macOS появляется диалоговое окно с сообщением "Не удается открыть FirebaseCppApp-<version>.bundle, так как не удалось проверить разработчика", вам нужно одобрить этот файл в меню "Системные настройки > Защита и безопасность".

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

В меню безопасности примерно в середине страницы есть раздел с сообщением "Использование "FirebaseCppApp-<version>.bundle" заблокировано, поскольку разработчик не идентифицирован".

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

c35166e224cce720.png

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

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

5ad9ddb0d3a52892.png

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

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

  1. Убедитесь, что в настройках сборки в разделе File > Build Settings (Файл > Настройки сборки) выбрана нужная платформа (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, лучше оставить только версии EDM4U для UPM, которые можно найти на странице архива API Google для Unity.

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

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