عیب یابی & سوالات متداول برای Unity و Firebase

این صفحه نکات و عیب‌یابی‌هایی را برای مشکلات خاص Unity که ممکن است هنگام استفاده از Firebase با آنها مواجه شوید، ارائه می‌دهد.

چالش‌های دیگری دارید یا مشکل خود را در زیر مشاهده نمی‌کنید؟ برای سوالات متداول بیشتر در مورد Firebase یا محصول خاص، حتماً به بخش اصلی سوالات متداول Firebase مراجعه کنید.

مشکلی با single dex هنگام ساخت برنامه اندروید

هنگام ساخت برنامه اندروید، ممکن است با خطای ساخت مربوط به داشتن یک فایل dex واحد مواجه شوید. اگر پروژه شما برای استفاده از سیستم ساخت Gradle پیکربندی شده باشد، پیام خطا مشابه زیر خواهد بود.

Cannot fit requested classes in a single dex file.

فایل‌های اجرایی Dalvik ( .dex ) برای نگهداری مجموعه‌ای از تعاریف کلاس و داده‌های الحاقی مرتبط با آنها برای برنامه‌های اندروید ( .apk ) استفاده می‌شوند. یک فایل dex محدود به ارجاع به 65536 متد است. اگر تعداد کل متدها از تمام کتابخانه‌های اندروید در پروژه شما از این حد تجاوز کند، ساخت برنامه با شکست مواجه خواهد شد.

یونیتی در سال ۲۰۱۷.۲ قابلیت Minification را معرفی کرد که از Proguard (یا ابزارهای دیگر در برخی نسخه‌های یونیتی) برای حذف کدهای استفاده نشده استفاده می‌کند و می‌تواند تعداد کل متدهای ارجاع شده در یک فایل dex را کاهش دهد. این گزینه را می‌توانید در Player Settings > Android > Publishing Settings > Minify پیدا کنید. این گزینه‌ها ممکن است در نسخه‌های مختلف یونیتی متفاوت باشند، بنابراین به مستندات رسمی یونیتی مراجعه کنید.

اگر تعداد متدهای ارجاع‌شده هنوز از حد مجاز بیشتر است، گزینه دیگر فعال کردن multidex است. روش‌های مختلفی برای دستیابی به این هدف در یونیتی وجود دارد:

  • اگر Custom Gradle Template در Player Settings فعال است، mainTemplate.gradle تغییر دهید.
  • اگر از اندروید استودیو برای ساخت پروژه اکسپورت شده استفاده می‌کنید، فایل build.gradle در سطح ماژول را تغییر دهید.

جزئیات بیشتر را می‌توانید در راهنمای کاربر multidex بیابید.

مشکلات هنگام ساخت برنامه برای اندروید با minSdkVersion 23

هنگام ساخت برای اندروید، اگر minSdkVersion 23 را هدف قرار دهید، ممکن است در مرحله dexing، معمولاً در وظیفه Gradle ':launcher:mergeExtDexDebug'، با شکست مواجه شود، جایی که پیام "Failed to transform" یکی از کتابخانه‌های اندروید را نشان می‌دهد. این به دلیل اشکالی در ابزار dex پیش‌فرض در SDK اندروید است که اکثر ویرایشگرهای Unity از آن استفاده می‌کنند و می‌توان آن را به چند روش مختلف برطرف کرد:

  • minSdkVersion را روی ۲۴ تنظیم کنید.
  • کوچک‌سازی اندروید را در تنظیمات پخش‌کننده > اندروید > تنظیمات انتشار > کوچک‌سازی فعال کنید.
  • با اضافه کردن این به فایل settingsTemplate.gradle خود، نسخه متفاوتی از ابزار dex را مشخص کنید:
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 را به ۱.۱۰.۲ دانگرید کنید. این مشکل فقط در نسخه ۱.۱۱ و جدیدتر وجود دارد.

  • در فایل ~/.bash_profile ‎ یا معادل آن، export LANG=en_US.UTF-8 ‎ را اضافه کنید.

نحوه به‌روزرسانی نسخه SDK های Firebase Unity

فرآیند به‌روزرسانی نسخه‌های Firebase Unity SDKها به نحوه‌ی اولیه‌ی وارد کردن آن‌ها بستگی دارد. در اینجا دو روش جایگزین برای وارد کردن آن‌ها آورده شده است:

  • وارد کردن فایل‌های .unitypackage ‎ در پوشه Assets/ پروژه شما
  • وارد کردن با استفاده از مدیر بسته‌های یونیتی (UPM)
    • این روش پیشنهادی برای مدیریت بسته‌ها در یونیتی ۲۰۱۸.۴ به بالا است.
    • از این روش برای آسان‌تر کردن به‌روزرسانی‌های نسخه‌های بعدی و پاک‌سازی دایرکتوری Assets/ استفاده کنید.

در پروژه Unity خود، فقط باید از یک روش import برای مدیریت تمام بسته‌های Firebase خود استفاده کنید. دستورالعمل‌های زیر نه تنها برای به‌روزرسانی نسخه بسته‌های منفرد، بلکه در صورت نیاز، برای انتقال مدیریت بسته به UPM (روش import پیشنهادی) نیز قابل استفاده هستند.