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

מבוא

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

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

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

הסוג הראשון של בעיות בבנייה יכול להתרחש במהלך בדיקה בעורך לפני שמנסים להתחיל בנייה לנייד. הסעיף הזה מתייחס לכל השגיאות ב-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:
      • הגרסה שלהם זהה
      • הותקנו רק כ.unitypackageאו רק דרך 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 או שאתם צריכים לעבור משימוש ב-.unitypackage לאחת מאפשרויות ההתקנה הנוספות של Unity , הדרך הכי טובה היא להסיר את כל חבילות Firebase באמצעות השיטות שמוזכרות בקטע הזה בנושא העברה ואז לייבא מחדש את כל חבילות Firebase.
  4. בודקים שהעורך בונה מחדש את הפרויקט, ושהניסיונות להפעיל את המשחק משקפים את המצב הנוכחי ביותר של הפרויקט:

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

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

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

אישור חבילות Firebase ב-Mac OS

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

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

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