מבוא
במדריך הבא מוסבר איך לנפות באגים בתהליך ה-compile וה-build של משחקים ב-Unity באמצעות Firebase SDK ל-Unity. במאמר הזה מוסבר איך לבדוק ולפתור הרבה מהבעיות הנפוצות שעשויות לצוץ במהלך ההגדרה והיצירה של המשחק לפלטפורמה חדשה או אחרי עדכון. הוא מסודר לפי הסדר שבו השגיאות האלה עשויות להתרחש בתהליך. כדאי לעיין בהן לפי הסדר ולהמשיך לאחר פתרון כל אחת מהן.
בנוסף למסמך הזה, אפשר לעיין בשאלות הנפוצות בנושא Firebase ל-Unity לקבלת מידע נוסף.
בעיות בהידור של מצב Play
הבעיות מהסוג הראשון יכולות להתרחש במהלך הבדיקה בעורך, לפני שמנסים להתחיל גרסה לנייד. הקטע הזה מתייחס לכל השגיאות ב-Firebase שמתרחשות לפני מצב ההפעלה ואחריו.
כש-Unity מתחילה או מזהה שינויים ביחסי התלות, בקוד או בנכסים אחרים, היא תנסה ליצור מחדש את הפרויקט. אם לא ניתן יהיה לקמפל את הפרויקט בשלב הזה, השגיאות בקמפל יתועדו ביומן במסוף. אם תנסו להיכנס למצב הפעלה, תוצג לכם הודעה קופצת עם השגיאה All compiler errors have to be fixed before you can enter playmode!
בכרטיסייה Scene ב-Unity.
ניפוי באגים של בעיות שקשורות ל-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
או - כדאי לבדוק את אחת מהחלופות המפורטות במאמר אפשרויות התקנה נוספות של Unity ולנסות אותה.
- מוסיפים את Firebase Unity SDK כ-
- מוודאים שכל המוצרים של Firebase בפרויקט וב-EDM4U:
- הן בגרסה זהה
- הותקנו כ-
.unitypackage
בלבד או בלעדית דרך מנהל החבילות של Unity.
- כדי לייבא את החבילות המתאימות:
אם מייבאים את Firebase Unity SDK לפני גרסה '10.0.0' כקבצי
.unitypackage
, הארכיון ה-zip של Firebase Unity SDK מכיל חבילות לתמיכה ב-NET 3.x וב-NET 4.x. חשוב לוודא שכללתם בפרויקט רק את רמת ה-Framework .NET התואמת:- התאימות בין הגרסאות של Unity Editor לבין רמות ה-NET Framework מפורטת במאמר הוספת Firebase לפרויקט ב-Unity.
- אם מייבאים בטעות את חבילות Firebase ברמה הלא נכונה של .NET Framework, או אם צריך לעבור משימוש ב-
.unitypackage
s לאחת מאפשרויות ההתקנה הנוספות של Unity, הדרך הכי נקייה היא להסיר כל חבילת Firebase באמצעות השיטות שמפורטות בקטע הזה בנושא העברה, ואז לייבא מחדש את כל חבילות Firebase.
בודקים שהעורך יוצר מחדש את הפרויקט ושניסיונות ההפעלה משקפים את המצב העדכני ביותר של הפרויקט:
- כברירת מחדל, עורך Unity מוגדר לבנות מחדש בכל פעם שמזוהה שינוי בנכס או בהגדרה.
- יכול להיות שהפונקציונליות הזו הושבתה ועורך Unity מוגדר לרענון ידני/הדרכה מחדש. כדאי לבדוק את הנושא ולנסות רענון ידני אם זה המצב.
שגיאות זמן ריצה במצב Play
אם המשחק מתחיל אבל נתקלים בבעיות ב-Firebase במהלך הפעלתו, נסו את הפעולות הבאות:
מוודאים שאישרתם את החבילות של Firebase בקטע 'אבטחה ופרטיות' ב-Mac OS
אם כשאתם מפעילים את המשחק בעורך ב-Mac OS מוצגת תיבת דו-שיח עם הכיתוב "לא ניתן לפתוח את הקובץ FirebaseCppApp-<version>.bundle כי לא ניתן לאמת את המפתח", עליכם לאשר את קובץ האוסף הספציפי הזה בתפריט'אבטחה ופרטיות' ב-Mac.
כדי לעשות זאת, לוחצים על סמל Apple > העדפות המערכת > אבטחה ופרטיות.
בתפריט האבטחה, בערך באמצע הדף, מופיע הקטע "השימוש ב-FirebaseCppApp-<version>.bundle נחסם כי הוא לא מגיע ממפתח מזוהה".
לוחצים על הלחצן אישור בכל מקרה.
חוזרים ל-Unity ומקישים שוב על Play.
לאחר מכן תוצג אזהרה דומה לאזהרה הראשונה:
לוחצים על פתיחה והתוכנית תמשיך לפעול. לא תתבקשו שוב לגבי הקובץ הספציפי הזה.
מוודאים שהפרויקט מכיל קובצי תצורה תקינים ומשתמש בהם
- מוודאים שהגדרות ה-build מוגדרות ליעד הרצוי (iOS או Android) בקטע File (קובץ) > Build Settings (הגדרות build). לסקירה מפורטת יותר, אפשר לעיין במסמכי התיעוד של הגדרות ה-Build ב-Unity.
- מורידים את קובץ התצורה של האפליקציה (
google-services.json
ל-Android אוGoogleService-Info.plist
ל-iOS) ויוצרים יעד build במסוף 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.
- בודקים גם את התיקייה
Assets/
וגם את מנהל החבילות של Unity כדי לוודא ש-Firebase SDK ו-EDM4U הותקנו רק באחת מהשיטות. - יכול להיות שפלאגינים שפותחו על ידי Google, כמו Google Play, ופלאגינים של צד שלישי יהיו תלויים ב-EDM4U. יישומי הפלאגין האלה עשויים לכלול את EDM4U בחבילות
.unitypackage
או בחבילות של מנהל החבילות של Unity (UPM). חשוב לוודא שיש רק עותק אחד של EDM4U בפרויקט. אם יש חבילות UPM שתלויות ב-EDM4U, מומלץ לשמור רק את הגרסאות של EDM4U ל-UPM. אפשר למצוא אותן בדף הארכיון של Google APIs for Unity.
חשוב לוודא שכל המוצרים של Firebase בפרויקט שלכם הם באותה גרסה.
- אם ערכות ה-SDK של Firebase הותקנו דרך
.unitypackage
, צריך לבדוק אם כל ספריות ה-FirebaseCppApp
בקטעAssets/Firebase/Plugins/x86_64/
הן באותה גרסה. - אם חבילות ה-SDK של Firebase הותקנו דרך Unity Package Manager (UPM), פותחים את Windows > Package Manager, מחפשים את 'Firebase' ומוודאים שכל החבילות של Firebase הן באותה גרסה.
- אם הפרויקט מכיל גרסאות שונות של Firebase SDK, מומלץ להסיר את כל Firebase SDK לחלוטין לפני שמתקינים שוב את כל Firebase SDK, הפעם עם אותן הגרסאות. הדרך הכי נקייה היא להסיר כל חבילת Firebase באמצעות השיטות שמפורטות בקטע הזה על העברה.
שגיאות ב-build של המכשיר היעד ושל ה-resolver
אם המשחק פועל בעורך (שהוגדרה לו יעד ה-build המתאים לבחירתכם), בשלב הבא צריך לוודא שמנהל יחסי התלות החיצוניים ל-Unity (EDM4U) מוגדר ופועל כראוי.
במאגר של EDM4U ב-GitHub יש מדריך מפורט לחלק הזה בתהליך. מומלץ לקרוא את המדריך ולפעול לפי ההוראות לפני שממשיכים.
בעיות שקשורות ל-'Single Dex' ומיטוב (חובה אם משתמשים ב-Cloud Firestore)
במהלך ה-build של אפליקציית Android, יכול להיות שתבחינו בכישלון build שקשור לקובץ dex יחיד. הודעת השגיאה נראית כך (אם הפרויקט מוגדר לשימוש במערכת ה-build של Gradle):
Cannot fit requested classes in a single dex file.
קבצים מסוג .dex
משמשים לאחסון קבוצה של הגדרות כיתות והנתונים המשויכים שלהן לאפליקציות ל-Android. קובץ dex יחיד מוגבל להפניה ל-65,536 שיטות. תהליכי ה-build ייכשל אם המספר הכולל של השיטות מכל ספריות Android בפרויקט חורג מהמגבלה הזו.
אפשר לבצע את שני השלבים הבאים ברצף. צריך להפעיל את multidex רק אם המינימציה לא פותרת את הבעיה.
הפעלת דחיסה
ב-Unity הוצגה צמצום קוד בגרסה 2017.2 כדי להסיר קוד שלא בשימוש. הפעולה הזו יכולה לצמצם את המספר הכולל של השיטות שמצוינות בקובץ dex יחיד. * האפשרות הזו מופיעה בקטע הגדרות הנגן > Android > הגדרות פרסום > דחיסה. * האפשרויות עשויות להיות שונות בגרסאות שונות של Unity, לכן מומלץ לעיין במסמכי העזרה הרשמיים של Unity.
הפעלת Multidex
אם אחרי הפעלת המינימיזציה, מספר השיטות שמצוינות בקוד עדיין חורג מהמגבלה, אפשרות אחרת היא להפעיל את multidex
. יש כמה דרכים לעשות זאת ב-Unity:
- אם האפשרות Custom Gradle Template (תבנית Gradle מותאמת אישית) מופעלת בקטע Player Settings (הגדרות הנגן), משנים את הערך של
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
אם נתקלתם ביומני שגיאות עם אזכור של swift, תוכלו להיעזר בקטע מנהל יחסי התלות החיצוניים ב-Unity.
שלבים נוספים
אם עדיין יש בעיות ב-compile, ב-build או בהרצה של המשחק שקשורות ל-Firebase, כדאי לעיין בדף הבעיות של Firebase SDK ל-Unity ולשקול לשלוח דיווח על בעיה חדשה. בנוסף, אפשר לעיין בדף התמיכה של Firebase כדי לקבל מידע על אפשרויות נוספות.