تحديد المشاكل وحلّها الأسئلة الشائعة حول Unity وFirebase

تقدّم هذه الصفحة نصائح ومعلومات لتحديد المشاكل وحلّها في 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 طريقة. سيتعذّر إنشاء الإصدار إذا تجاوز إجمالي عدد الطرق من جميع مكتبات Android في مشروعك هذا الحدّ.

أتاحت Unity ميزة التصغير في الإصدار 2017.2، وهي تستخدم Proguard (أو أدوات أخرى في بعض إصدارات Unity) لإزالة الرموز غير المستخدَمة، ما قد يؤدي إلى تقليل العدد الإجمالي للطُرق التي تتم الإشارة إليها في ملف dex واحد. يمكن العثور على الخيار في إعدادات المشغّل > Android > إعدادات النشر > تصغير. قد تختلف الخيارات في إصدارات Unity المختلفة، لذا يُرجى الرجوع إلى مستندات Unity الرسمية.

إذا كان عدد الطرق المشار إليها لا يزال يتجاوز الحدّ، يمكنك تفعيل multidex. تتوفّر عدة طرق لتحقيق ذلك في Unity:

  • في حال تفعيل Custom Gradle Template ضمن Player Settings، عدِّل mainTemplate.gradle.
  • إذا كنت تستخدم "استوديو Android" لإنشاء المشروع الذي تم تصديره، عدِّل ملف build.gradle على مستوى الوحدة.

يمكنك الاطّلاع على مزيد من التفاصيل في دليل مستخدم multidex.

مشاكل عند إنشاء إصدار Android باستخدام minSdkVersion 23

عند إنشاء إصدار لنظام التشغيل Android، إذا استهدفت الإصدار minSdkVersion 23، قد يتعذّر ذلك في خطوة إنشاء ملفات dex، وعادةً ما يحدث ذلك في مهمة Gradle ':launcher:mergeExtDexDebug'، حيث سيظهر الخطأ "تعذّر التحويل" لأحد مكتبات Android. يرجع السبب في ذلك إلى خطأ في أداة dex التلقائية في حزمة تطوير البرامج (SDK) لنظام التشغيل Android التي تستخدمها معظم برامج تعديل 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'
  }
}

مشاكل عند إنشاء إصدار لنظام التشغيل iOS باستخدام Cocoapods

عند إنشاء تطبيق لنظام التشغيل iOS، قد يتعذّر تثبيت Cocoapod بسبب ظهور خطأ بشأن اللغة المحلية أو ترميز UTF-8. هناك حاليًا عدة طرق مختلفة لحلّ المشكلة.

  • من النافذة الطرفية، شغِّل pod install مباشرةً، وافتح ملف xcworkspace الناتج.

  • ارجع إلى الإصدار 1.10.2 من Cocoapods. تحدث هذه المشكلة في الإصدار 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. يمكن استخدام التعليمات أدناه ليس فقط لتعديل إصدار الحِزم الفردية، ولكن أيضًا لنقل إدارة الحِزم إلى "مدير حِزم Unity" (UPM) (طريقة الاستيراد المُوصى بها)، إذا لزم الأمر.

إذا كانت حِزم Firebase في الدليل Assets/، يتوفّر لك خياران لتعديل إصدار حزمة SDK:

  • الخيار 1 (يُنصح به): الانتقال إلى استخدام "إدارة حِزم Unity" (متاحة في 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. يجب أن تتم معالجة الكتابة فوق إصدارات الحزمة التي تم استيرادها سابقًا تلقائيًا من خلال "أداة إدارة التبعيات الخارجية" (التي يتم تضمينها تلقائيًا عند استيراد .unitypackages في Firebase).

      ومع ذلك، إذا تعذّر إكمال هذه العملية التلقائية، عليك حذف المجلدات التالية يدويًا ثم إعادة محاولة تنفيذ خطوة الاستيراد المذكورة أعلاه.

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

إذا كانت حِزم Firebase تتم إدارتها من خلال UPM، استورِد أحدث إصدار من حزمة SDK كـ .tgz. سيؤدي هذا الاستيراد تلقائيًا إلى استبدال الإصدار السابق.