בדף הזה מפורטים טיפים לפתרון בעיות ספציפיות ל-Unity שאתם עשויים להיתקל בהן במהלך השימוש ב-Firebase.
נתקלתם בבעיות אחרות או שהבעיה שלכם לא מופיעה ברשימה שלמטה? כדאי לעיין בשאלות הנפוצות הראשיות בנושא Firebase כדי לקבל מידע נוסף על Firebase או על מוצרים ספציפיים.
בעיה ב-dex יחיד במהלך בניית אפליקציית Android
במהלך בניית אפליקציית Android, יכול להיות שתיתקלו בכשל בבנייה שקשור לקובץ dex יחיד. אם הפרויקט שלכם מוגדר לשימוש במערכת 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.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
כשמבצעים קומפילציה ל-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 (שיטת הייבוא המומלצת), אם צריך.
חבילות שיובאו כקבצים .unitypackage
לספרייה Assets/
אם חבילות Firebase נמצאות בספרייה Assets/
, יש לכם שתי אפשרויות לעדכון גרסת ה-SDK:
אפשרות 1 (מומלצת): מעבר לשימוש ב-UPM (זמין ב-Unity 2018.4 ואילך)
- פועלים לפי ההוראות שמופיעות ב-Firebase כדי להעביר את ניהול החבילות ל-UPM.
- השיטה הזו דורשת יותר הגדרות ראשוניות מאשר המשך השימוש בתהליך העבודה של
.unitypackage
, אבל היא מפשטת את העדכונים של גרסאות ה-SDK הבאות.
אפשרות 2: ממשיכים להשתמש בקבצים מסוג
.unitypackage
כדי לייבא אותם לספרייהAssets/
מייבאים כל אחת מהחבילות של הגרסה המעודכנת.
אם אתם מורידים את firebase_unity_sdk.zip מהאתר של Firebase, חשוב לוודא שאתם מייבאים את כל
.unitypackages
מהתיקייה הנכונהdotnet
.- אם אתם משתמשים ב-Unity 2019 ואילך, מייבאים מהתיקייה
dotnet4
. - אחרת, בוחרים באפשרות Scripting Runtime Version (גרסת זמן הריצה של הסקריפט) בPlayer Settings (הגדרות הנגן), ואם היא מוגדרת ל-.NET 3.x, מייבאים מהתיקייה
dotnet3
.
- אם אתם משתמשים ב-Unity 2019 ואילך, מייבאים מהתיקייה
המערכת אמורה לטפל באופן אוטומטי בהחלפה של גרסאות החבילה שייבאתם קודם (החלפה שמתבצעת על ידי External Dependency Manager, שכלול באופן אוטומטי כשמייבאים את Firebase
.unitypackages
).עם זאת, אם התהליך האוטומטי הזה ייכשל, תצטרכו למחוק ידנית את התיקיות הבאות ואז לנסות שוב את שלב הייבוא שלמעלה.
Assets/Editor Default Resources/Firebase
Assets/ExternalDependencyManager
Assets/Firebase
Assets/Parse
Assets/Plugins/iOS/Firebase
חבילות שמנוהלות על ידי UPM
אם חבילות Firebase מנוהלות על ידי UPM,
מייבאים את הגרסה החדשה יותר של ה-SDK כ-.tgz
.
הייבוא הזה יחליף באופן אוטומטי את הגרסה הקודמת.