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

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

چالش های دیگری دارید یا مشکل خود را در زیر نمی بینید؟ حتماً سؤالات متداول اصلی Firebase را برای سؤالات متداول pan-Firebase یا محصول خاص بررسی کنید.

مشکل تک دکس هنگام ساخت اپلیکیشن اندروید

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

Cannot fit requested classes in a single dex file.

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

Unity Minification را در سال 2017.2 معرفی کرد که از Proguard (یا ابزارهای دیگر در برخی نسخه‌های Unity) برای حذف کدهای استفاده نشده استفاده می‌کند که می‌تواند تعداد کل روش‌های ارجاع‌شده را در یک فایل dex کاهش دهد. این گزینه را می توان در تنظیمات پخش کننده > Android > تنظیمات انتشار > Minify پیدا کرد. گزینه ها ممکن است در نسخه های مختلف Unity متفاوت باشند، بنابراین به اسناد رسمی Unity مراجعه کنید.

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

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

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

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

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

  • minSdkVersion را روی 24 تنظیم کنید.
  • کوچک‌سازی اندروید را در تنظیمات Player > Android > Publishing Settings > Minify روشن کنید
  • با افزودن این مورد به فایل settingsTemplate.gradle ، نسخه دیگری از ابزار dex را مشخص کنید:
buildscript {
  repositories {
    mavenLocal()
    maven { url 'https://maven.google.com'  }
    mavenCentral()
  }
  dependencies {
    classpath 'com.android.tools:r8:8.3.37'
  }
}

مشکلات هنگام ساخت برای iOS با Cocoapod

هنگام ساخت برای 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/ Directory خود استفاده کنید.

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

اگر بسته‌های Firebase در فهرست Assets/ قرار دارند، دو گزینه برای به‌روزرسانی نسخه SDK دارید:

  • گزینه 1 (توصیه می شود) : برای استفاده از UPM مهاجرت کنید (موجود در Unity 2018.4+)

  • گزینه 2 : به استفاده از فایل‌های .unitypackage برای وارد کردن آنها به فهرست Assets/ ادامه دهید.

    1. هر یک از بسته ها را برای نسخه به روز شده وارد کنید.

      اگر firebase_unity_sdk.zip را از وب‌سایت Firebase دانلود می‌کنید، مطمئن شوید که همه .unitypackages را از پوشه dotnet صحیح وارد کرده‌اید.

      • اگر از Unity 2019 یا جدیدتر استفاده می کنید، از پوشه dotnet4 وارد کنید.
      • در غیر این صورت، Scripting Runtime Version را در Player Settings انتخاب کنید و اگر روی ".NET 3.x" تنظیم شده است، از پوشه dotnet3 وارد کنید.
    2. بازنویسی نسخه‌های بسته‌ای که قبلاً وارد شده‌اند باید به‌طور خودکار توسط External Dependency Manager انجام شود (که به‌طور خودکار هنگام وارد کردن .unitypackages گنجانده می‌شود).

      با این حال، اگر و فقط اگر این فرآیند خودکار با شکست مواجه شد، باید پوشه های زیر را به صورت دستی حذف کنید و سپس دوباره مرحله واردات بالا را دوباره امتحان کنید.

      • Assets/Editor Default Resources/Firebase
      • Assets/ExternalDependencyManager
      • Assets/Firebase
      • Assets/Parse
      • Assets/Plugins/iOS/Firebase

اگر بسته‌های Firebase توسط UPM مدیریت می‌شوند، نسخه جدیدتر SDK را به‌عنوان .tgz وارد کنید . این واردات به طور خودکار نسخه قبلی را بازنویسی می کند.