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

מבוא

במדריך הבא מוסבר איך לנפות באגים בתהליך ה-compile וה-build של משחקים ב-Unity באמצעות Firebase SDK ל-Unity. במאמר הזה מוסבר איך לבדוק ולפתור הרבה מהבעיות הנפוצות שעשויות לצוץ במהלך ההגדרה והפיתוח של המשחק לפלטפורמה חדשה או אחרי עדכון. הוא מסודר לפי הסדר שבו השגיאות האלה עשויות להתרחש בתהליך. כדאי לעיין בהן לפי הסדר ולהמשיך לאחר פתרון כל אחת מהן.

מידע נוסף זמין במאמר שאלות נפוצות בנושא Firebase ל-Unity.

בעיות בהידור במצב Play

הסוג הראשון של בעיות ב-build יכול להתרחש במהלך בדיקה בעורך לפני שמנסים להתחיל גרסת build לנייד. הקטע הזה מתייחס לכל השגיאות ב-Firebase שמתרחשות לפני מצב ההפעלה ואחריו.

כש-Unity מתחילה או מזהה שינויים ביחסי התלות, בקוד או בנכסים אחרים, היא תנסה ליצור מחדש את הפרויקט. אם לא ניתן יהיה לקמפל את הפרויקט בשלב הזה, השגיאות בקמפל יתועדו ביומן במסוף. אם תנסו להיכנס למצב הפעלה, תוצג לכם הודעה קופצת עם השגיאה All compiler errors have to be fixed before you can enter playmode! בכרטיסייה Scene ב-Unity.

סוגים, כיתות, שיטות וחברים חסרים

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

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

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

שגיאות זמן ריצה במצב Play

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

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

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

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

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

לוחצים על הלחצן אישור בכל מקרה.

c35166e224cce720.png

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

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

5ad9ddb0d3a52892.png

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

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

  1. מוודאים שהגדרות ה-build מוגדרות ליעד הרצוי (iOS או Android) בקטע File (קובץ) > Build Settings (הגדרות build). לסקירה מפורטת יותר, אפשר לעיין במסמכי התיעוד של הגדרות ה-Build ב-Unity.
  2. מורידים את קובץ התצורה של האפליקציה (google-services.json ל-Android או GoogleService-Info.plist ל-iOS) ויוצרים יעד build במסוף 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.

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

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

  1. אם ערכות ה-SDK של Firebase הותקנו דרך .unitypackage, צריך לבדוק אם כל ספריות ה-FirebaseCppApp בקטע Assets/Firebase/Plugins/x86_64/ הן באותה גרסה.
  2. אם חבילות ה-SDK של Firebase הותקנו דרך Unity Package Manager‏ (UPM), פותחים את Windows > Package Manager, מחפשים את 'Firebase' ומוודאים שכל החבילות של Firebase הן באותה גרסה.
  3. אם הפרויקט מכיל גרסאות שונות של Firebase SDK, מומלץ להסיר את כל ערכות ה-SDK של Firebase לחלוטין לפני שמתקינים שוב את כל ערכות ה-SDK של Firebase, הפעם עם אותן הגרסאות. הדרך הכי נקייה היא להסיר כל חבילת Firebase באמצעות השיטות שמפורטות בקטע הזה על העברה.

פתרון שגיאות ב-build של מכשיר היעד

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