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

מבוא

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

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

בעיות בקומפילציה של מצב הפעלה

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

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

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

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

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

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

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

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

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

c35166e224cce720.png

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

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

5ad9ddb0d3a52892.png

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

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

  1. מוודאים שהגדרות ה-build מוגדרות ליעד הרצוי (iOS או Android) בקובץ > הגדרות ה-build. דיון מקיף יותר בנושא מופיע במאמרי העזרה בנושא Unity Build Settings.
  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 SDK הותקנו דרך .unitypackage, צריך לבדוק אם כל הספריות של FirebaseCppApp בקטע Assets/Firebase/Plugins/x86_64/ הן באותה גרסה.
  2. אם התקנתם את Firebase SDK באמצעות 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 יחיד. הודעת השגיאה תיראה בערך כך (אם הפרויקט שלכם מוגדר לשימוש במערכת ה-build של Gradle):

Cannot fit requested classes in a single dex file.

קובצי .dex משמשים לאחסון של קבוצת הגדרות מחלקה ונתונים נלווים שמשויכים אליהן באפליקציות ל-Android. קובץ dex יחיד מוגבל להפניה ל-65,536 שיטות. אם המספר הכולל של השיטות מכל ספריות Android בפרויקט חורג מהמגבלה הזו, הבנייה תיכשל.

אפשר להחיל את שני השלבים הבאים ברצף. מפעילים multidex רק אם המיניפיקציה לא פותרת את הבעיה.

הפעלת צמצום

‫Unity הציגה את התכונה Minification (מזעור) בגרסה 2017.2 כדי להסיר קוד שלא נמצא בשימוש, מה שיכול להקטין את המספר הכולל של שיטות שמופנות אליהן בקובץ dex יחיד. * האפשרות נמצאת בהגדרות של נגן > Android > הגדרות פרסום > מזעור. * האפשרויות עשויות להיות שונות בגרסאות שונות של 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 כדי לקבל מידע על אפשרויות נוספות.