מבוא
המדריך הבא מסביר איך לנפות באגים בתהליך ההידור והבנייה של משחקי Unity באמצעות Firebase SDK for Unity. במאמר מוסבר איך לחקור ולפתור הרבה מהבעיות הנפוצות יותר שיכולות לקרות בזמן ההגדרה והפיתוח של המשחק לפלטפורמה חדשה או אחרי עדכון. השגיאות מסודרות לפי הסדר שבו הן עשויות להתרחש בתהליך. צריך לפעול לפי הסדר ולעבור לשלב הבא רק אחרי שפותרים את הבעיה.
בנוסף למסמך הזה, אפשר לעיין בשאלות הנפוצות בנושא Firebase ל-Unity לקבלת מידע נוסף.
בעיות קומפילציה במצב הפעלה
הבעיות הראשונות בגרסת ה-build יכולות להתרחש במהלך בדיקה בעורך לפני שמנסים להתחיל גרסת build לנייד. הסעיף הזה מתייחס לכל השגיאות ב-Firebase שמתרחשות לפני ובמהלך מצב ההפעלה.
כש-Unity מתחיל או מזהה שינויים בתלות, בקוד או בנכסים אחרים, הוא ינסה לבנות מחדש את הפרויקט. אם הפרויקט לא יצליח לעבור קומפילציה באותו זמן, העורך ירשום שגיאות קומפילציה במסוף, ואם תנסו להיכנס למצב הפעלה, תקבלו חלון קופץ עם שגיאה בכרטיסייה Scene ב-Unity עם הכיתוב All compiler errors have to be fixed before you can enter playmode!
.
ניפוי באגים בבעיות קומפילציה שקשורות ל-Firebase
חסרים סוגים, מחלקות, שיטות וחברים
הרבה בעיות ב-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>'
שלבים לפתרון:
אם אתם משתמשים במחלקות או בשיטות של Firebase בקוד, ודאו שהן זמינות באמצעות ההוראות הנכונות של
using
למוצרי Firebase הספציפיים שנדרשים.מוודאים שיובאו חבילות Firebase מתאימות:
- כדי לייבא את החבילות המתאימות:
- מוסיפים את Firebase Unity SDK כ-
.unitypackage
s או - אפשר לעיין באחת מהאפשרויות החלופיות שמפורטות במאמר אפשרויות נוספות להתקנת Unity ולבצע אותה.
- מוסיפים את Firebase Unity SDK כ-
- מוודאים שכל מוצר Firebase בפרויקט ו-EDM4U:
- הגרסה שלהם זהה
- הותקנו כ-
.unitypackage
s באופן בלעדי או באופן בלעדי דרך Unity Package Manager.
- כדי לייבא את החבילות המתאימות:
אם ייבאתם את Firebase Unity SDK לפני גרסה 10.0.0 בתור
.unitypackage
s, קובץ ה-ZIP של Firebase Unity SDK מכיל חבילות לתמיכה ב- .NET 3.x וב- .NET 4.x. מוודאים שכללתם בפרויקט רק את רמת .NET Framework התואמת:- במאמר הוספת Firebase לפרויקט ב-Unity מוסבר על רמות התאימות בין גרסאות של Unity Editor ושל .NET Frameworks.
- אם בטעות ייבאתם את חבילות Firebase ברמה הלא נכונה של .NET Framework או שאתם צריכים לעבור משימוש ב-
.unitypackage
s לאחת מאפשרויות ההתקנה הנוספות של Unity , הדרך הכי טובה היא להסיר את כל חבילות Firebase באמצעות השיטות שמוזכרות בקטע הזה בנושא העברה ואז לייבא מחדש את כל חבילות Firebase.
בודקים שהעורך בונה מחדש את הפרויקט, ושהניסיונות שלכם לשחק משקפים את המצב הנוכחי ביותר של הפרויקט:
- כברירת מחדל, עורך Unity מוגדר לבנייה מחדש בכל פעם שמתגלים שינויים בנכס או בהגדרה.
- יכול להיות שהפונקציונליות הזו הושבתה, ועורך Unity מוגדר לרענון או קומפילציה ידניים. כדאי לבדוק את זה ולנסות לרענן ידנית אם זה המקרה.
שגיאות זמן ריצה במצב הפעלה
אם המשחק מתחיל לפעול, אבל נתקל בבעיות ב-Firebase במהלך הפעולה, נסו את הפעולות הבאות:
מוודאים שמאשרים חבילות Firebase בקטע 'אבטחה ופרטיות' ב-Mac OS
אם כשמפעילים את המשחק בעורך ב-Mac OS מוצג דו-שיח עם ההודעה 'לא ניתן לפתוח את FirebaseCppApp-<version>.bundle כי לא ניתן לאמת את המפתח', צריך לאשר את קובץ ה-bundle הספציפי הזה בתפריט'אבטחה ופרטיות' ב-Mac.
כדי לעשות זאת, לוחצים על סמל Apple > העדפות המערכת > אבטחה ופרטיות
בתפריט האבטחה, בערך באמצע הדף, יש קטע שבו כתוב "השימוש ב-FirebaseCppApp-<version>.bundle נחסם כי הוא לא הגיע ממפתח מזוהה".
לוחצים על הלחצן עם התווית אישור בכל זאת.
חוזרים ל-Unity ומקישים שוב על Play.
לאחר מכן תוצג אזהרה דומה לראשונה:
לוחצים על פתיחה והתוכנה תוכל להמשיך. לא תתבקשו שוב לאשר את הקובץ הזה.
מוודאים שהפרויקט מכיל קובצי הגדרה תקינים ומשתמש בהם
- מוודאים שהגדרות ה-Build מוגדרות ליעד הרצוי (iOS או Android) בקובץ > הגדרות Build. דיון מקיף יותר מופיע במסמכי התיעוד בנושא הגדרות בנייה ב-Unity.
- מורידים את קובץ ההגדרות של האפליקציה (
google-services.json
ל-Android אוGoogleService-Info.plist
ל-iOS) ואת יעד הבנייה ממסוף Firebase בקטע Project Settings > Your Apps: אם הקבצים האלה כבר קיימים, מוחקים אותם מהפרויקט ומחליפים אותם בגרסה העדכנית ביותר. חשוב לוודא שהאיות שלהם זהה לאיות שמוצג למעלה, בלי (1) או מספרים אחרים שמצורפים לשמות הקבצים. - אם במסוף מופיעה הודעה לגבי קבצים ב-
Assets/StreamingAssets/
, מוודאים שלא מופיעות הודעות במסוף שלפיהן Unity לא הצליח לערוך קבצים שם - מוודאים שנוצר קובץ
Assets/StreamingAssets/google-services-desktop.json
ושתוכנו זהה לתוכן קובץ התצורה שהורדתם.- אם הוא לא נוצר באופן אוטומטי והתיקייה
StreamingAssets/
לא קיימת, צריך ליצור את התיקייה באופן ידני בתיקייהAssets
. - בודקים אם Unity יצר עכשיו את
google-services-desktop.json
.
- אם הוא לא נוצר באופן אוטומטי והתיקייה
מוודאים שכל מוצר של Firebase וכל EDM4U הותקנו באופן בלעדי דרך .unitypackage
או דרך Unity Package Manager
- בודקים את התיקייה
Assets/
ואת Unity Package Manager כדי לוודא ש-Firebase SDKs ו-EDM4U הותקנו באמצעות אחת מהשיטות האלה בלבד. - חלק מתוספי Google, כמו Google Play, ותוספים של צד שלישי עשויים להיות תלויים ב-EDM4U. יכול להיות שהתוספים האלה יכללו את EDM4U בחבילות
.unitypackage
s או בחבילות של Unity Package Manager (UPM). מוודאים שיש רק עותק אחד של EDM4U בפרויקט. אם חבילות UPM כלשהן תלויות ב-EDM4U, מומלץ לשמור רק את גרסאות UPM של EDM4U, שאפשר למצוא בדף הארכיון של Google APIs for Unity.
חשוב לוודא שכל מוצר Firebase בפרויקט נמצא באותה גרסה.
- אם התקנתם את Firebase SDKs דרך
.unitypackage
, בדקו אם כל הספריות שלFirebaseCppApp
בקטעAssets/Firebase/Plugins/x86_64/
הן באותה גרסה. - אם התקנתם את Firebase SDKs דרך Unity Package Manager (UPM), פותחים את Windows > Package Manager, מחפשים את Firebase ומוודאים שכל חבילות Firebase הן באותה גרסה.
- אם הפרויקט שלכם מכיל גרסאות שונות של Firebase SDK, מומלץ להסיר את כל Firebase SDKs לחלוטין לפני שמתקינים מחדש את כל Firebase SDKs, הפעם עם אותן גרסאות. הדרך הכי נקייה היא להסיר כל חבילת Firebase באמצעות השיטות שמוזכרות בקטע הזה בנושא העברה.
שגיאות ב-Resolver ובגרסת ה-Build של מכשיר היעד
אם המשחק פועל בעורך (שהוגדר ליעד הבנייה המתאים שבחרתם), צריך לוודא ש-External Dependency Manager for 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 הציגה את התכונה Minification (מזעור) בגרסה 2017.2 כדי להסיר קוד שלא נמצא בשימוש, וכך לצמצם את המספר הכולל של השיטות שמופנות אליהן בקובץ dex יחיד. * האפשרות נמצאת בPlayer Settings > Android > Publishing Settings > Minify. * האפשרויות עשויות להיות שונות בגרסאות שונות של Unity, לכן מומלץ לעיין במסמכי התיעוד הרשמיים של Unity.
הפעלת Multidex
אם אחרי הפעלת המיזעור, מספר השיטות שמופנות אליהן עדיין חורג מהמגבלה, אפשרות נוספת היא להפעיל את multidex
. יש כמה דרכים לעשות את זה ב-Unity:
- אם האפשרות Custom Gradle Template (תבנית Gradle מותאמת אישית) מופעלת בקטע Player Settings (הגדרות הנגן), משנים את
mainTemplate.gradle
. - אם משתמשים ב-Android Studio כדי לבצע build של הפרויקט המיוצא, צריך לשנות את הקובץ 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, כדאי לעיין בקטע External Dependency Manager for Unity.
השלבים הבאים
אם עדיין יש במשחק בעיות שקשורות ל-Firebase במהלך קומפילציה, בנייה או הרצה, כדאי לעיין בדף הבעיות של Firebase SDK for Unity ולשקול הגשת בעיה חדשה. בנוסף, אפשר לעיין בדף התמיכה של Firebase כדי לקבל מידע על אפשרויות נוספות.