ניפוי באגים בתהליך הבנייה, ההתקנה וההפעלה של המשחק

מבוא

המדריך הבא מסביר איך לנפות באגים בתהליך ההידור והבנייה של משחקי 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 מתרחשות בגלל שהעורך והקומפיילר לא מצליחים למצוא את הסוגים, המחלקות, השיטות והחברים הנדרשים. התסמינים הנפוצים של המחלה הם וריאציות של התסמינים הבאים:

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 כ-.unitypackages או
      2. אפשר לעיין באחת מהאפשרויות החלופיות שמפורטות במאמר אפשרויות נוספות להתקנת Unity ולבצע אותה.
    2. מוודאים שכל מוצר Firebase בפרויקט ו-EDM4U:
      • הגרסה שלהם זהה
      • הותקנו כ-.unitypackages באופן בלעדי או באופן בלעדי דרך Unity Package Manager.
  3. אם ייבאתם את Firebase Unity SDK לפני גרסה 10.0.0 בתור .unitypackages, קובץ ה-ZIP של Firebase Unity SDK מכיל חבילות לתמיכה ב-‎ .NET 3.x וב-‎ .NET 4.x. מוודאים שכללתם בפרויקט רק את רמת ‎ .NET Framework התואמת:

    1. במאמר הוספת Firebase לפרויקט ב-Unity מוסבר על רמות התאימות בין גרסאות של Unity Editor ושל .NET Frameworks.
    2. אם בטעות ייבאתם את חבילות Firebase ברמה הלא נכונה של ‎ .NET Framework או שאתם צריכים לעבור משימוש ב-.unitypackages לאחת מאפשרויות ההתקנה הנוספות של Unity , הדרך הכי טובה היא להסיר את כל חבילות Firebase באמצעות השיטות שמוזכרות בקטע הזה בנושא העברה ואז לייבא מחדש את כל חבילות Firebase.
  4. בודקים שהעורך בונה מחדש את הפרויקט, ושהניסיונות שלכם לשחק משקפים את המצב הנוכחי ביותר של הפרויקט:

    1. כברירת מחדל, עורך Unity מוגדר לבנייה מחדש בכל פעם שמתגלים שינויים בנכס או בהגדרה.
    2. יכול להיות שהפונקציונליות הזו הושבתה, ועורך Unity מוגדר לרענון או קומפילציה ידניים. כדאי לבדוק את זה ולנסות לרענן ידנית אם זה המקרה.

שגיאות זמן ריצה במצב הפעלה

אם המשחק מתחיל לפעול, אבל נתקל בבעיות ב-Firebase במהלך הפעולה, נסו את הפעולות הבאות:

מוודאים שמאשרים חבילות Firebase בקטע 'אבטחה ופרטיות' ב-Mac OS

אם כשמפעילים את המשחק בעורך ב-Mac OS מוצג דו-שיח עם ההודעה 'לא ניתן לפתוח את FirebaseCppApp-<version>.bundle כי לא ניתן לאמת את המפתח', צריך לאשר את קובץ ה-bundle הספציפי הזה בתפריט'אבטחה ופרטיות' ב-Mac.

כדי לעשות זאת, לוחצים על סמל Apple > העדפות המערכת > אבטחה ופרטיות

בתפריט האבטחה, בערך באמצע הדף, יש קטע שבו כתוב "השימוש ב-FirebaseCppApp-<version>.bundle נחסם כי הוא לא הגיע ממפתח מזוהה".

לוחצים על הלחצן עם התווית אישור בכל זאת.

c35166e224cce720.png

חוזרים ל-Unity ומקישים שוב על Play.

לאחר מכן תוצג אזהרה דומה לראשונה:

5ad9ddb0d3a52892.png

לוחצים על פתיחה והתוכנה תוכל להמשיך. לא תתבקשו שוב לאשר את הקובץ הזה.

מוודאים שהפרויקט מכיל קובצי הגדרה תקינים ומשתמש בהם

  1. מוודאים שהגדרות ה-Build מוגדרות ליעד הרצוי (iOS או Android) בקובץ > הגדרות Build. דיון מקיף יותר מופיע במסמכי התיעוד בנושא הגדרות בנייה ב-Unity.
  2. מורידים את קובץ ההגדרות של האפליקציה (google-services.json ל-Android או GoogleService-Info.plist ל-iOS) ואת יעד הבנייה ממסוף Firebase בקטע Project Settings > Your Apps: אם הקבצים האלה כבר קיימים, מוחקים אותם מהפרויקט ומחליפים אותם בגרסה העדכנית ביותר. חשוב לוודא שהאיות שלהם זהה לאיות שמוצג למעלה, בלי (1) או מספרים אחרים שמצורפים לשמות הקבצים.
  3. אם במסוף מופיעה הודעה לגבי קבצים ב-Assets/StreamingAssets/, מוודאים שלא מופיעות הודעות במסוף שלפיהן Unity לא הצליח לערוך קבצים שם
  4. מוודאים שנוצר קובץ Assets/StreamingAssets/google-services-desktop.json ושתוכנו זהה לתוכן קובץ התצורה שהורדתם.
    • אם הוא לא נוצר באופן אוטומטי והתיקייה StreamingAssets/ לא קיימת, צריך ליצור את התיקייה באופן ידני בתיקייה Assets.
    • בודקים אם Unity יצר עכשיו את google-services-desktop.json.

מוודאים שכל מוצר של Firebase וכל EDM4U הותקנו באופן בלעדי דרך .unitypackage או דרך Unity Package Manager

  1. בודקים את התיקייה Assets/ ואת Unity Package Manager כדי לוודא ש-Firebase SDKs ו-EDM4U הותקנו באמצעות אחת מהשיטות האלה בלבד.
  2. חלק מתוספי Google, כמו Google Play, ותוספים של צד שלישי עשויים להיות תלויים ב-EDM4U. יכול להיות שהתוספים האלה יכללו את EDM4U בחבילות .unitypackages או בחבילות של Unity Package Manager ‏ (UPM). מוודאים שיש רק עותק אחד של EDM4U בפרויקט. אם חבילות UPM כלשהן תלויות ב-EDM4U, מומלץ לשמור רק את גרסאות UPM של EDM4U, שאפשר למצוא בדף הארכיון של Google APIs for Unity.

חשוב לוודא שכל מוצר Firebase בפרויקט נמצא באותה גרסה.

  1. אם התקנתם את Firebase SDKs דרך .unitypackage, בדקו אם כל הספריות של FirebaseCppApp בקטע Assets/Firebase/Plugins/x86_64/ הן באותה גרסה.
  2. אם התקנתם את Firebase SDKs דרך Unity Package Manager (UPM), פותחים את Windows > Package Manager, מחפשים את Firebase ומוודאים שכל חבילות Firebase הן באותה גרסה.
  3. אם הפרויקט שלכם מכיל גרסאות שונות של 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 כדי לקבל מידע על אפשרויות נוספות.