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

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

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

בעיה עם dex יחיד במהלך פיתוח אפליקציה ל-Android

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

Cannot fit requested classes in a single dex file.

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

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

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

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

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

בעיות ב-build ל-Android עם minSdkVersion 23

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

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

בעיות בזמן ה-build ל-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 SDKs

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

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

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