פתרון בעיות & שאלות נפוצות על Unity ו-Firebase

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

נתקלתם בבעיות אחרות או שהבעיה שלכם לא מופיעה ברשימה שלמטה? כדאי לעיין בשאלות הנפוצות העיקריות בנושא Firebase כדי לקבל מידע נוסף על Firebase או על מוצרים ספציפיים.

בעיה ב-single dex בזמן בניית אפליקציית Android

במהלך בניית אפליקציית Android, יכול להיות שתיתקלו בתקלה בבנייה שקשורה לקובץ dex יחיד. אם הפרויקט שלכם מוגדר לשימוש במערכת ה-build של Gradle, הודעת השגיאה תיראה בערך כך:

Cannot fit requested classes in a single dex file.

קובצי Dalvik Executable ‏ (.dex) משמשים להחזקת קבוצה של הגדרות מחלקה ונתונים נלווים שקשורים אליהם באפליקציות ל-Android ‏ (.apk). קובץ dex יחיד מוגבל להפניה ל-65,536 שיטות. ה-build ייכשל אם המספר הכולל של המתודות מכל ספריות Android בפרויקט שלכם יעלה על המגבלה הזו.

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

אם מספר השיטות שמוזכרות עדיין חורג מהמגבלה, אפשרות נוספת היא להפעיל את multidex. יש כמה דרכים לעשות את זה ב-Unity:

  • אם האפשרות Custom Gradle Template בקטע Player Settings מופעלת, משנים את mainTemplate.gradle.
  • אם אתם משתמשים ב-Android Studio כדי לבצע build של הפרויקט המיוצא, אתם צריכים לשנות את הקובץ build.gradle ברמת המודול.

פרטים נוספים זמינים במדריך למשתמש בנושא multidex.

בעיות כשמבצעים build ל-Android עם minSdkVersion ‏23

כשמבצעים build ל-Android, אם מכוונים ל-minSdkVersion 23, יכול להיות שהפעולה תיכשל בשלב ה-dexing, בדרך כלל במשימת Gradle ‏ ':launcher:mergeExtDexDebug', שבה יופיע הכיתוב 'Failed to transform' (ההמרה נכשלה) באחת מספריות Android. הבעיה הזו נובעת מבג בכלי dex שמוגדר כברירת מחדל ב-Android SDK, שרוב עורכי Unity משתמשים בו. אפשר לפתור את הבעיה בכמה דרכים:

  • מגדירים את minSdkVersion ל-24.
  • מפעילים את האפשרות 'מזעור' ב-Android דרך Player Settings > Android > Publishing Settings > Minify
  • כדי לציין גרסה אחרת של כלי ה-dex, מוסיפים את השורה הבאה לקובץ settingsTemplate.gradle:
buildscript {
  repositories {
    mavenLocal()
    maven { url 'https://maven.google.com'  }
    mavenCentral()
  }
  dependencies {
    classpath 'com.android.tools:r8:8.3.37'
  }
}

בעיות בבנייה ל-iOS באמצעות Cocoapods

כשמבצעים build ל-iOS, יכול להיות שההתקנה של Cocoapod תיכשל עם שגיאה לגבי הלוקאל של השפה או קידוד UTF-8. יש כרגע כמה דרכים שונות לעקוף את הבעיה.

  • מריצים את pod install ישירות מהטרמינל ופותחים את קובץ ה-xcworkspace שנוצר.

  • מבצעים שדרוג לאחור של גרסת Cocoapods ל-1.10.2. הבעיה קיימת רק בגרסה 1.11 ובגרסאות חדשות יותר.

  • בחשבון ~/.bash_profile או בחשבון מקביל, מוסיפים export LANG=en_US.UTF-8

איך מעדכנים את הגרסה של Firebase Unity SDKs

תהליך העדכון של גרסאות Firebase Unity SDK תלוי באופן הייבוא הראשוני שלהן. אלה שתי שיטות הייבוא החלופיות:

  • ייבוא קבצים מסוג .unitypackage לספרייה Assets/ בפרויקט
  • ייבוא באמצעות Unity Package Manager ‏(UPM)
    • זו הדרך המומלצת לניהול חבילות ב-Unity 2018.4 ואילך.
    • השיטה הזו תעזור לכם לעדכן גרסאות בעתיד בקלות רבה יותר, ותשמור על Assets/ ספריית המכשירים שלכם נקייה.

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