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

Введение

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

В дополнение к этому документу, для получения дополнительной информации ознакомьтесь с часто задаваемыми вопросами по Firebase для Unity .

Проблемы компиляции Play Mode

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

Когда 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: Повышение уровня с 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 Package Manager.
  3. Если вы импортировали Firebase Unity SDK до версии "10.0.0" как .unitypackage s, zip-архив Firebase Unity SDK содержит пакеты для поддержки как .NET 3.x, так и .NET 4.x. Убедитесь, что вы включили в свой проект только совместимый уровень .NET Framework:

    1. Совместимость между версиями редактора Unity и уровнями .NET Frameworks обсуждается в разделе Добавление 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-<version>.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 Package Manager.

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

Убедитесь, что все продукты 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 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 появилась функция Minification , позволяющая удалять неиспользуемый код, что позволяет сократить общее количество методов, на которые есть ссылки, в одном файле dex. * Эту опцию можно найти в разделе Player Settings > Android > Publishing Settings > Minify . * Параметры могут различаться в разных версиях Unity, поэтому обратитесь к официальной документации Unity.

Включить Multidex

Если после включения минификации количество ссылочных методов все еще превышает лимит, другой вариант — включить multidex . В Unity есть несколько способов добиться этого:

  • Если в настройках проигрывателя включен пользовательский шаблон Gradle , измените mainTemplate.gradle .
  • Если вы используете Android Studio для сборки экспортированного проекта, измените файл build.gradle на уровне модуля.

Более подробную информацию можно найти в руководстве пользователя Multidex .

Понимание и исправление ошибок выполнения целевого устройства

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

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

андроид

Симулятор

  • Проверьте журналы, отображаемые в консоли эмулятора, или просмотрите окно Logcat .

Устройство

Ознакомьтесь с adb и adb logcat и способами их использования.

  • Хотя вы можете использовать различные инструменты командной строки для фильтрации вывода, рассмотрите возможность использования опций logcat.
  • Простой способ начать сеанс АБР с чистого листа:

    adb logcat -c && adb logcat <OPTIONS>

    где OPTIONS — это флаги, которые вы передаете в командной строке для фильтрации вывода.

Использование Logcat через Android Studio

При использовании Logcat через Android Studio доступны дополнительные инструменты поиска , которые упрощают создание продуктивных поисковых запросов.

iOS

Проверка журналов

Если работает физическое устройство, подключите его к компьютеру. Проверьте lldb в Xcode.

Вопросы Swift

Если вы обнаружите в журналах ошибок упоминание Swift, обратитесь к разделу «Диспетчер внешних зависимостей для Unity» по поводу их использования.

Дальнейшие шаги

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