Debugowanie procesu tworzenia, instalowania i uruchamiania gier

Wprowadzenie

Poniżej znajdziesz przewodnik po debugowaniu procesu kompilacji i tworzenia gier Unity za pomocą pakietu SDK Firebase dla Unity. Opisujemy w nim, jak zbadać i rozwiązać wiele typowych problemów, które mogą wystąpić podczas konfigurowania i tworzenia gry na nową platformę lub po aktualizacji. Są one uporządkowane według kolejności, w jakiej mogą wystąpić w procesie. Sprawdzaj je po kolei i przechodź do kolejnych, gdy rozwiążesz poprzednie.

Oprócz tego dokumentu zapoznaj się też z najczęstszymi pytaniami dotyczącymi Firebase dla Unity.

Problemy z kompilacją w trybie odtwarzania

Pierwsza kategoria problemów z kompilacją może wystąpić podczas testowania w edytorze przed próbą rozpoczęcia kompilacji na urządzenia mobilne. Ta sekcja dotyczy wszystkich błędów Firebase, które występują przed trybem odtwarzania i w jego trakcie.

Gdy Unity uruchamia się lub wykrywa zmiany w zależnościach, kodzie lub innych zasobach, próbuje ponownie skompilować projekt. Jeśli w tym momencie nie będzie można skompilować projektu, edytor zarejestruje błędy kompilacji w konsoli, a jeśli spróbujesz przejść do trybu odtwarzania, na karcie Scene (Scena) w Unity pojawi się wyskakujące okienko z błędem All compiler errors have to be fixed before you can enter playmode!.

Brakujące typy, klasy, metody i elementy

Wiele problemów z Firebase wynika z tego, że edytor i kompilator nie mogą znaleźć niezbędnych typów, klas, metod i elementów. Typowe objawy to:

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>'

Rozwiązanie:
  1. Jeśli używasz klas lub metod Firebase w kodzie, upewnij się, że są one dostępne, stosując odpowiednie dyrektywy using dla konkretnych usług Firebase.

    1. Przykłady z gry MechaHamster: Level Up With Firebase Edition:
      1. using Firebase.RemoteConfig;
      2. using Firebase.Crashlytics;
  2. Sprawdź, czy zostały zaimportowane odpowiednie pakiety Firebase:

    1. Aby zaimportować odpowiednie pakiety:
      1. Dodaj pakiet Firebase Unity SDK jako .unitypackages lub
      2. Zapoznaj się z alternatywnymi rozwiązaniami w sekcji Dodatkowe opcje instalacji Unity i wykonaj jedną z opisanych tam czynności.
    2. Upewnij się, że każda usługa Firebase w projekcie i EDM4U:
      • mają tę samą wersję,
      • zostały zainstalowane wyłącznie jako .unitypackage LUB wyłącznie za pomocą menedżera pakietów Unity.
  3. Jeśli pakiet Firebase Unity SDK został zaimportowany przed wersją „10.0.0” jako .unitypackage, plik ZIP pakietu Firebase Unity SDK zawiera pakiety obsługujące zarówno .NET 3.x, jak i .NET 4.x. Upewnij się, że w projekcie uwzględniono tylko zgodny poziom .NET Framework:

    1. Zgodność wersji edytora Unity i poziomów .NET Framework została omówiona w artykule Dodawanie Firebase do projektu Unity.
    2. Jeśli pakiety Firebase zostały przypadkowo zaimportowane na nieprawidłowym poziomie .NET Framework lub chcesz przejść z .unitypackage na jedną z dodatkowych opcji instalacji Unity, najlepiej usunąć wszystkie pakiety Firebase za pomocą metod wymienionych w tej sekcji dotyczącej migracji, a następnie ponownie zaimportować wszystkie pakiety Firebase.
  4. Sprawdź, czy edytor przebudowuje projekt i czy próby odtworzenia odzwierciedlają najbardziej aktualny stan projektu:

    1. Domyślnie edytor Unity jest skonfigurowany tak, aby przeprowadzać ponowną kompilację za każdym razem, gdy wykryje zmiany w komponentach lub konfiguracji.
    2. Możliwe, że ta funkcja została wyłączona, a edytor Unity jest ustawiony na ręczne odświeżanie/rekompilowanie. Sprawdź, czy tak jest, i spróbuj odświeżyć ręcznie.

Błędy środowiska wykonawczego w trybie odtwarzania

Jeśli gra się uruchamia, ale podczas działania występują problemy z Firebase, wykonaj te czynności:

Zatwierdź pakiety Firebase w sekcji „Bezpieczeństwo i prywatność” w systemie Mac OS.

Jeśli po uruchomieniu gry w edytorze w systemie Mac OS pojawi się okno z komunikatem „Nie można otworzyć pliku FirebaseCppApp-<wersja>.bundle, ponieważ nie można zweryfikować dewelopera”, musisz zatwierdzić ten plik pakietu w menu Bezpieczeństwo i prywatność na Macu.

Aby to zrobić, kliknij ikonę Apple > Preferencje systemowe > Ochrona i prywatność.

W menu zabezpieczeń, mniej więcej w połowie strony, znajduje się sekcja z informacją, że pakiet „FirebaseCppApp-<wersja>.bundle” został zablokowany, ponieważ nie pochodzi od zidentyfikowanego dewelopera.

Kliknij przycisk Zezwalaj mimo to.

c35166e224cce720.png

Wróć do Unity i ponownie naciśnij Play (Graj).

Zobaczysz wtedy ostrzeżenie podobne do pierwszego:

5ad9ddb0d3a52892.png

Kliknij Otwórz, aby kontynuować. Nie zobaczysz już pytania o ten plik.

Sprawdź, czy projekt zawiera prawidłowe pliki konfiguracji i czy ich używa.

  1. Upewnij się, że ustawienia kompilacji są skonfigurowane pod kątem docelowego systemu (iOS lub Android) w sekcji File > Build Settings (Plik > Ustawienia kompilacji). Więcej informacji znajdziesz w dokumentacji ustawień kompilacji Unity.
  2. Pobierz plik konfiguracji aplikacji (google-services.json na Androida lub GoogleService-Info.plist na iOS) i cel kompilacji z konsoli Firebase, wybierając Ustawienia projektu > Twoje aplikacje. Jeśli masz już te pliki, usuń je z projektu i zastąp najnowszą wersją. Upewnij się, że ich nazwy są zapisane dokładnie tak, jak powyżej, bez „(1)” ani innych cyfr.
  3. Jeśli konsola zawiera komunikat dotyczący plików w Assets/StreamingAssets/, upewnij się, że nie ma w niej komunikatów o tym, że Unity nie może edytować plików w tym folderze.
  4. Upewnij się, że plik Assets/StreamingAssets/google-services-desktop.json został wygenerowany i jest zgodny z pobranym plikiem konfiguracji.
    • Jeśli nie zostanie on wygenerowany automatycznie i nie ma katalogu StreamingAssets/, utwórz go ręcznie w katalogu Assets.
    • Sprawdź, czy Unity wygenerował plik google-services-desktop.json.

Upewnij się, że każda usługa Firebase i EDM4U zostały zainstalowane wyłącznie za pomocą .unitypackage lub Menedżera pakietów Unity.

  1. Sprawdź zarówno folder Assets/, jak i Unity Package Manager, aby upewnić się, że pakiety SDK Firebase i EDM4U zostały zainstalowane tylko za pomocą jednej z tych metod.
  2. Niektóre wtyczki opracowane przez Google, takie jak Google Play, oraz wtyczki innych firm mogą zależeć od EDM4U. Te wtyczki mogą zawierać EDM4U w pakietach .unitypackage lub Unity Package Manager (UPM). Upewnij się, że w projekcie jest tylko jedna kopia EDM4U. Jeśli jakieś pakiety UPM zależą od EDM4U, najlepiej zachować tylko wersje UPM EDM4U, które można znaleźć na stronie archiwum interfejsów API Google dla Unity.

Upewnij się, że wszystkie usługi Firebase w projekcie są w tej samej wersji.

  1. Jeśli pakiety SDK Firebase zostały zainstalowane za pomocą .unitypackage, sprawdź, czy wszystkie biblioteki FirebaseCppApp w Assets/Firebase/Plugins/x86_64/ są w tej samej wersji.
  2. Jeśli pakiety SDK Firebase zostały zainstalowane za pomocą Unity Package Manager (UPM), otwórz Windows > Package Manager, wyszukaj „Firebase” i upewnij się, że wszystkie pakiety Firebase są w tej samej wersji.
  3. Jeśli Twój projekt zawiera różne wersje pakietów SDK Firebase, zalecamy całkowite usunięcie wszystkich pakietów SDK Firebase przed ich ponowną instalacją, tym razem w tych samych wersjach. Najlepszym sposobem jest usunięcie wszystkich pakietów Firebase za pomocą metod wymienionych w tej sekcji dotyczącej migracji.

Błędy kompilacji w narzędziu do rozwiązywania problemów i na urządzeniu docelowym

Jeśli gra działa w edytorze (skonfigurowanym dla wybranego przez Ciebie odpowiedniego celu kompilacji), sprawdź, czy External Dependency Manager for Unity (EDM4U) jest prawidłowo skonfigurowany i działa.

Repozytorium EDM4U na GitHubie zawiera szczegółowy przewodnik po tej części procesu, z którym należy się zapoznać i którego należy przestrzegać przed przejściem dalej.

Problemy z „Single Dex” i minifikacja (obowiązkowe, jeśli używasz Cloud Firestore)

Podczas tworzenia aplikacji na Androida możesz napotkać błąd kompilacji związany z posiadaniem jednego pliku dex. Komunikat o błędzie wygląda podobnie do tego (jeśli projekt jest skonfigurowany do korzystania z systemu kompilacji Gradle):

Cannot fit requested classes in a single dex file.

Pliki .dex służą do przechowywania zestawu definicji klas i powiązanych z nimi danych dodatkowych dla aplikacji na Androida. Pojedynczy plik dex może odwoływać się do maksymalnie 65 536 metod. Jeśli łączna liczba metod ze wszystkich bibliotek Androida w projekcie przekroczy ten limit,kompilacja się nie powiedzie.

Te 2 kroki można wykonać po kolei. Włącz multidex tylko wtedy, gdy minifikacja nie rozwiąże problemu.

Włącz minifikację

W 2017.2 r. firma Unity wprowadziła minifikację, która usuwa nieużywany kod, co może zmniejszyć łączną liczbę metod, do których odwołuje się pojedynczy plik DEX. * Tę opcję znajdziesz w sekcji Player Settings > Android > Publishing Settings > Minify (Ustawienia odtwarzacza > Android > Ustawienia publikowania > Minifikacja). * Opcje mogą się różnić w zależności od wersji Unity, dlatego zapoznaj się z oficjalną dokumentacją Unity.

Włączanie multidex

Jeśli po włączeniu minifikacji liczba metod, do których odwołuje się aplikacja, nadal przekracza limit, możesz włączyć multidex. W Unity można to zrobić na kilka sposobów:

  • Jeśli w Ustawieniach odtwarzacza włączona jest opcja Niestandardowy szablon Gradle, zmodyfikuj plik mainTemplate.gradle.
  • Jeśli do tworzenia wyeksportowanego projektu używasz Android Studio, zmodyfikuj plik build.gradle na poziomie modułu.

Więcej informacji znajdziesz w przewodniku użytkownika multidex.

Omówienie i rozwiązywanie błędów środowiska wykonawczego na urządzeniu docelowym

Jeśli gra działa w edytorze i można ją skompilować oraz zainstalować na urządzeniu docelowym, ale występują błędy środowiska wykonawczego, sprawdź i przeanalizuj dzienniki wygenerowane na urządzeniu.

W tej sekcji opisano, jak sprawdzić logi pod kątem możliwych błędów i jednego z nich, który występuje tylko w czasie działania na urządzeniu lub w symulatorze.

Android

Symulator

  • Sprawdź logi wyświetlane w konsoli emulatora lub wyświetl okno Logcat.

Urządzenie

Zapoznaj się z narzędziami adb i adb logcat oraz sposobami ich używania.

  • Do filtrowania danych wyjściowych możesz używać różnych narzędzi środowiska wiersza poleceń, ale możesz też zapoznać się z opcjami logcat.
  • Prostym sposobem na rozpoczęcie sesji ADB od zera jest:

    adb logcat -c && adb logcat <OPTIONS>

    gdzie OPTIONS to flagi, które przekazujesz do wiersza poleceń, aby filtrować dane wyjściowe.

Korzystanie z Logcata w Android Studio

Podczas korzystania z Logcata w Android Studio dostępne są dodatkowe narzędzia wyszukiwania, które ułatwiają generowanie skutecznych wyszukiwań.

iOS

Przeglądanie logów

Jeśli używasz urządzenia fizycznego, podłącz je do komputera. Sprawdź lldb w Xcode.

Problemy ze Swiftem

Jeśli napotkasz błędy związane z językiem Swift, zapoznaj się z sekcją External Dependency Manager for Unity.

Dalsze kroki

Jeśli nadal występują problemy z kompilacją, kompilowaniem lub uruchamianiem gry związane z Firebase, zapoznaj się ze stroną z problemami z pakietem SDK Firebase dla Unity i rozważ zgłoszenie nowego problemu. Dodatkowe opcje znajdziesz na stronie pomocy Firebase.