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

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

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

בעיה ב-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 בפרויקט שלכם יחרוג מהמגבלה הזו.

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

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

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

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

בעיות בפיתוח ל-Android עם minSdkVersion 23

כשמפתחים ל-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

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

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

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

  • ב-~/.bash_profile או בתוכנה מקבילה, מוסיפים את export LANG=en_US.UTF-8

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

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

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

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