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

Введение

Ниже приведено руководство по отладке процесса компиляции и сборки игр 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 , то архив Firebase Unity SDK содержит пакеты для поддержки .NET 3.x и .NET 4.x. Убедитесь, что в ваш проект включен только совместимый уровень .NET Framework:

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

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

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

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

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

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

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

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

Нажмите кнопку « Разрешить в любом случае» .

c35166e224cce720.png

Вернитесь в Unity и снова нажмите кнопку «Играть» .

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

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, чтобы убедиться, что SDK Firebase и EDM4U были установлены исключительно одним из двух способов.
  2. Некоторые плагины, разработанные Google , например, для Google Play, а также плагины сторонних разработчиков могут зависеть от EDM4U. Эти плагины могут включать EDM4U в свои файлы .unitypackage или пакеты Unity Package Manager (UPM). Убедитесь, что в вашем проекте есть только одна копия EDM4U. Если какие-либо пакеты UPM зависят от EDM4U, лучше всего хранить только версии EDM4U, созданные с помощью UPM, которые можно найти на странице Google APIs for Unity Archive .

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

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