Debugowanie procesu tworzenia, instalowania i uruchamiania gier

Wprowadzenie

Poniżej znajdziesz przewodnik po debugowaniu procesu kompilacji i tworzenia gier w Unity za pomocą pakietu SDK Firebase dla Unity. Opisujemy w nim, jak badać i rozwiązywać 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. Sprawdź je po kolei i wykonaj odpowiednie działania.

Oprócz tego dokumentu więcej informacji znajdziesz w odpowiedziach na najczęstsze pytania dotyczące Firebase w Unity.

Problemy z kompilacją w trybie odtwarzania

Pierwsza grupa problemów z kompilacją może wystąpić podczas testowania w edytorze przed rozpoczęciem kompilacji mobilnej. Ta sekcja dotyczy wszystkich błędów Firebase, które występują przed i w trakcie trybu odtwarzania.

Gdy Unity uruchomi się lub wykryje zmiany w zależnościach, kodzie lub innych zasobach, spróbuje ponownie skompilować projekt. Jeśli w tym czasie nie uda się skompilować projektu, edytor zarejestruje błędy kompilacji w konsoli. Jeśli spróbujesz przejść do trybu odtwarzania, w karcie 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 niemożności znalezienia przez edytor i kompilator 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 w kodzie używasz klas lub metod Firebase, upewnij się, że są one dostępne dzięki odpowiednim dyrektywom using dla konkretnych usług Firebase.

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

    1. Aby zaimportować odpowiednie pakiety:
      1. Dodaj pakiet SDK Firebase Unity jako .unitypackages lub
      2. Zapoznaj się z jedną z alternatywnych opcji w sekcji Dodatkowe opcje instalacji Unity i wykonaj ją.
    2. Upewnij się, że każda usługa Firebase w Twoim projekcie i EDM4U:
      • są w tej samej wersji,
      • zostały zainstalowane .unitypackagewyłącznieLUB wyłącznie za pomocą Menedżera pakietów Unity.
  3. Jeśli pakiet Firebase Unity SDK w wersji wcześniejszej niż „10.0.0” został zaimportowany jako .unitypackages, archiwum 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 Frameworks omawiamy w artykule Dodawanie Firebase do projektu w Unity.
    2. Jeśli pakiety Firebase zostały zaimportowane na nieprawidłowym poziomie .NET Framework lub chcesz przejść z .unitypackage na jedną z dodatkowych opcji instalacji Unity, najprostszym sposobem jest usunięcie wszystkich pakietów Firebase za pomocą metod wymienionych w tej sekcji dotyczącej migracji, a następnie ponowne zaimportowanie wszystkich pakietów Firebase.
  4. Sprawdź, czy edytor ponownie buduje projekt i czy próby odtworzenia odzwierciedlają jego aktualny stan:

    1. Domyślnie edytor Unity jest skonfigurowany tak, aby przebudowywać projekt za każdym razem, gdy wykryje zmiany w zasobach lub konfiguracji.
    2. Możliwe, że ta funkcja została wyłączona, a edytor Unity jest ustawiony na ręczne odświeżanie lub ponowną kompilację. Sprawdź to i w razie potrzeby odśwież stronę ręcznie.

Błędy czasu działania w trybie odtwarzania

Jeśli gra się uruchamia, ale podczas działania występują problemy z Firebase, spróbuj wykonać te czynności:

Upewnij się, że pakiety Firebase są zatwierdzone w sekcji „Ochrona i prywatność” w systemie macOS.

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

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ą „Plik „FirebaseCppApp-<version>.bundle” został zablokowany, ponieważ nie pochodzi od zidentyfikowanego dewelopera”.

Kliknij przycisk Zezwól mimo to.

c35166e224cce720.png

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

Zobaczysz wtedy ostrzeżenie podobne do pierwszego:

5ad9ddb0d3a52892.png

Kliknij Otwórz, a program będzie mógł kontynuować działanie. Nie pojawi się już pytanie o ten konkretny plik.

Sprawdź, czy projekt zawiera prawidłowe pliki konfiguracyjne i czy z nich korzysta.

  1. Upewnij się, że ustawienia kompilacji są skonfigurowane dla wybranego urządzenia (iOS lub Android) w sekcji Plik > Ustawienia kompilacji. Więcej informacji znajdziesz w dokumentacji ustawień kompilacji Unity.
  2. Pobierz plik konfiguracyjny aplikacji (google-services.json w przypadku Androida lub GoogleService-Info.plist w przypadku iOS) i utwórz element docelowy w konsoli Firebase w sekcji Ustawienia projektu > Twoje aplikacje: Jeśli masz już te pliki, usuń je z projektu i zastąp najnowszą wersją. Upewnij się, że nazwy plików są identyczne z nazwami podanymi powyżej i nie zawierają „(1)” ani innych liczb.
  3. Jeśli w konsoli pojawi się komunikat dotyczący plików w Assets/StreamingAssets/, sprawdź, czy nie ma w niej komunikatów informujących o tym, że Unity nie może edytować plików w tym miejscu.
  4. Sprawdź, czy wygenerowany kod Assets/StreamingAssets/google-services-desktop.json jest zgodny z pobranym plikiem konfiguracji.
    • Jeśli nie zostanie wygenerowany automatycznie i nie istnieje, utwórz go ręcznie w katalogu Assets.StreamingAssets/
    • Sprawdź, czy Unity wygenerowało już google-services-desktop.json.

Upewnij się, że wszystkie usługi 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 Menedżera pakietów Unity, aby upewnić się, że pakiety SDK Firebase i EDM4U zostały zainstalowane tylko jedną z tych metod.
  2. Niektóre wtyczki opracowane przez Google, takie jak Google Play, i wtyczki innych firm mogą zależeć od EDM4U. Te wtyczki mogą zawierać EDM4U w swoich pakietach .unitypackage lub pakietach menedżera pakietów Unity (UPM). Upewnij się, że w projekcie jest tylko jedna kopia EDM4U. Jeśli jakiekolwiek pakiety UPM są zależne od EDM4U, najlepiej zachować tylko wersje UPM EDM4U, które można znaleźć na stronie archiwum interfejsów Google API na potrzeby 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 sekcji Assets/Firebase/Plugins/x86_64/ mają tę samą wersję.
  2. Jeśli pakiety SDK Firebase zostały zainstalowane za pomocą Menedżera pakietów Unity (UPM), otwórz Windows > Package Manager, wyszukaj „Firebase” i sprawdź, czy wszystkie pakiety Firebase mają tę samą wersję.
  3. Jeśli Twój projekt zawiera różne wersje pakietów SDK Firebase, zalecamy całkowite usunięcie wszystkich pakietów SDK Firebase, a następnie ponowne zainstalowanie ich w tych samych wersjach. Najlepszym sposobem jest usunięcie wszystkich pakietów Firebase za pomocą metod opisanych w tej sekcji dotyczącej migracji.

Błędy kompilacji urządzenia rozwiązującego i urządzenia docelowego

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

W repozytorium EDM4U w GitHubie znajdziesz szczegółowy przewodnik dotyczący tej części procesu. Zapoznaj się z nim i postępuj zgodnie z jego instrukcjami, zanim przejdziesz dalej.

Problemy z „Single Dex” i minimalizacją (obowiązkowe w przypadku korzystania z Cloud Firestore)

Podczas tworzenia aplikacji na Androida może wystąpić 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.

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

Poniższe 2 kroki można wykonać kolejno. Włącz multidex tylko wtedy, gdy minifikacja nie rozwiąże problemu.

Włącz minimalizację

W wersji 2017.2 Unity wprowadziło 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 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 multidexu

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 osiągnąć na kilka sposobów:

  • Jeśli w sekcji Ustawienia odtwarzacza włączona jest opcja Niestandardowy szablon Gradle, zmień wartość mainTemplate.gradle.
  • Jeśli do kompilacji wyeksportowanego projektu używasz Androida Studio, zmodyfikuj plik build.gradle na poziomie modułu.

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

Interpretowanie i rozwiązywanie błędów środowiska wykonawczego urządzenia docelowego

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

W tej sekcji dowiesz się, jak sprawdzać logi pod kątem możliwych błędów, oraz poznasz jeden z nich, który występuje tylko w czasie działania aplikacji na urządzeniu lub w symulatorze.

Android

Symulator

  • Sprawdź logi wyświetlane w konsoli emulatora lub otwórz okno Logcat.

Urządzenie

Zapoznaj się z narzędziami adbadb logcat oraz sposobem ich używania.

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

    adb logcat -c && adb logcat <OPTIONS>

    gdzie OPTIONS to flagi przekazywane do wiersza poleceń w celu filtrowania danych wyjściowych.

Korzystanie z Logcata w Androidzie Studio

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

iOS

Sprawdzanie logów

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

Problemy z Swiftem

Jeśli w dziennikach błędów znajdziesz wzmianki o Swift, zapoznaj się z sekcją External Dependency Manager for Unity.

Dalsze kroki

Jeśli gra nadal ma problemy z kompilacją, tworzeniem lub uruchamianiem związane z Firebase, zapoznaj się ze stroną z problemami dotyczącymi pakietu Firebase SDK dla Unity i rozważ zgłoszenie nowego problemu. Dodatkowe opcje znajdziesz na stronie pomocy Firebase.