تصحيح أخطاء عملية إنشاء اللعبة وتثبيتها وتشغيلها

مقدّمة

في ما يلي دليل لتصحيح أخطاء عملية التجميع والإنشاء لألعاب Unity باستخدام حزمة تطوير البرامج (SDK) لمنصّة Firebase for Unity. وتشرح هذه المقالة طريقة التحقيق في العديد من المشاكل الأكثر شيوعًا التي قد تواجهها أثناء إعداد لعبتك وتصميمها لتعمل على نظام أساسي جديد أو حلّها بعد إجراء تحديث. يتم ترتيبها بترتيب وقت حدوث هذه الأخطاء في العملية. استشره بالترتيب وتابِع الخطوات بعد حل كل مشكلة.

بالإضافة إلى هذا المستند، يمكنك الرجوع إلى الأسئلة الشائعة حول Firebase for Unity للحصول على المزيد من المعلومات.

مشاكل التجميع في "وضع التشغيل"

يمكن أن تحدث الفئة الأولى من مشاكل الإصدار أثناء الاختبار في المحرّر قبل محاولة بدء إصدار للأجهزة الجوّالة. يتعلق هذا القسم بجميع أخطاء Firebase التي تحدث قبل "وضع التشغيل" وأثناءه.

عندما تبدأ Unity أو تكتشف تغييرات في التبعيات أو التعليمات البرمجية أو الأصول الأخرى، ستحاول إعادة بناء المشروع. إذا تعذّر تجميع المشروع في ذلك الوقت، سيسجّل المحرِّر أخطاء التجميع في وحدة التحكّم، وإذا حاولت الدخول إلى "وضع التشغيل"، ستظهر لك نافذة منبثقة تعرض رسالة خطأ في علامة التبويب Scene في Unity نصّها All compiler errors have to be fixed before you can enter playmode!.

عدم توفّر الأنواع والفئات والطرق والأعضاء

تحدث العديد من مشكلات Firebase بسبب عدم قدرة المحرر وبرنامج التجميع على العثور على الأنواع والفئات والأساليب والأعضاء الضرورية. تشمل الأعراض الشائعة لهذا النوع من المتغيرات ما يلي:

The type or namespace name ‘<CLASS OR NAMESPACE NAME>' could not be found. Are you missing a using directive or an assembly reference?

The type or namespace name <TYPE OR NAMESPACE NAME> does not exist in the namespace ‘Firebase<.OPTIONAL NESTED NAMESPACE NAME PATH>' (are you missing an assembly reference?)

‘<CLASS NAME>' does not contain a definition for ‘<MEMBER VARIABLE OR METHOD NAME>'

خطوات الحلّ:
  1. عند استخدام صفوف أو طرق Firebase في الرموز البرمجية، تأكّد من إتاحتها من خلال الحصول على توجيهات using الصحيحة لمنتجات Firebase المحدّدة المطلوبة.

    1. أمثلة من MechaHamster: Level Up with Firebase Edition:
      1. using Firebase.RemoteConfig;
      2. using Firebase.Crashlytics;
  2. تأكَّد من استيراد حِزم Firebase المناسبة:

    1. لاستيراد الحِزم المناسبة، عليك تنفيذ أحد الإجراءَين التاليَين:
      1. أضِف حِزمة تطوير البرامج (SDK) لمنصة Unity من Firebase باسم .unitypackage أو
      2. ابحث عن أحد البدائل ونفِّذها في خيارات تثبيت Unity الإضافية.
    2. تأكَّد من أنّ كل منتج من منتجات Firebase في مشروعك وEDM4U:
      • تستخدمان الإصدار نفسه
      • تم التثبيت إما كـ .unitypackage حصريًا أو من خلال Unity Package Manager.
  3. في حال استيراد حزمة تطوير البرامج (SDK) لمنصّة Firebase Unity قبل الإصدار 10.0.0 بتنسيق .unitypackage، يحتوي أرشيف حزمة تطوير البرامج (SDK) لمنصّة Firebase على حِزم متوافقة مع الإصدار .NET 3.x و .NET 4.x. تأكد من تضمين مستوى .NET متوافق فقط في مشروعك:

    1. وتناقش مناقشة التوافق بين إصدارَي Unity Editor و .NET Ruless مستويات في إضافة Firebase إلى مشروع Unity.
    2. إذا استوردت حِزم Firebase عن طريق الخطأ بمستوى غير صحيح ضمن إطار عمل NET .أو كنت بحاجة إلى التبديل من استخدام .unitypackage إلى أحد خيارات تثبيت Unity الإضافية، فإن الطريقة المثلى هي إزالة كل حزمة Firebase باتّباع الطرق المذكورة في قسم نقل البيانات هذا، ثم إعادة استيراد جميع حِزم Firebase مرة أخرى.
  4. تأكد من أن المحرر يعيد إنشاء مشروعك وأن محاولاتك للتشغيل تعكس أحدث حالة لمشروعك:

    1. يتم ضبط محرّر Unity تلقائيًا على إعادة الإنشاء كلما تم رصد تغييرات في مواد العرض أو الإعدادات.
    2. من المحتمل أنّه تم إيقاف هذه الوظيفة وضبط "محرِّر Unity" على إعادة التحميل/إعادة التجميع يدويًا. تحقَّق من المشكلة وجرِّب إعادة التحميل يدويًا إذا كان الأمر كذلك.

أخطاء في بيئة تشغيل "وضع التشغيل"

إذا بدأت اللعبة ولكنها تواجه مشاكل مع Firebase أثناء تشغيلها، جرِّب ما يلي:

يجب الموافقة على حِزم Firebase في قسم "الأمان والخصوصية" على نظام التشغيل Mac.

عند بدء تشغيل لعبتك في المحرِّر على نظام التشغيل Mac، يظهر لك مربع حوار نصه "لا يمكن فتح حزمة FirebaseCppApp -<version>.bundle لأنّه لا يمكن التحقّق من مطوّر البرامج". يجب الموافقة على ملف الحزمة المحدّد في قائمة "الأمان والخصوصية " في نظام التشغيل Mac.

ولإجراء ذلك، انقر على رمز Apple > الإعدادات المفضّلة للنظام > الأمان والخصوصية.

في أسفل الصفحة تقريبًا، يظهر قسم بعنوان "تم حظر استخدام "FirebaseCppApp-<version>.bundle" لأنّه ليس من مطوِّر برامج محدّد".

انقر على الزر المسمى السماح على أي حال.

c35166e224cce720.png

ارجِع إلى Unity واضغط على تشغيل مرة أخرى.

سيظهر لك بعد ذلك تحذير مشابه للأول:

5ad9ddb0d3a52892.png

اضغط على فتح وسيتمكّن برنامجك من المتابعة، ولن يتم سؤالك عن هذا الملف تحديدًا مرة أخرى.

تأكَّد من أنّ مشروعك يحتوي على ملفات إعداد صالحة ويستخدمها.

  1. تأكَّد من ضبط إعدادات الإصدار على الهدف الذي تريده (iOS أو Android) في ملف > إعدادات الإصدار. لإجراء مناقشة أكثر اكتمالاً، اطّلِع على مستندات إعدادات Unity Build.
  2. نزِّل ملف الإعداد لتطبيقك (google-services.json لنظام التشغيل Android أو GoogleService-Info.plist لنظام التشغيل iOS) وأنشِئ هدفًا من وحدة تحكُّم Firebase في إعدادات المشروع > تطبيقاتك: إذا كانت لديك هذه الملفات من قبل، احذفها في مشروعك واستبدِلها بأحدث إصدار، مع التأكّد من تهجئتها بالطريقة الموضّحة أعلاه بدون الرقم "(1)" أو الأرقام الأخرى المرفقة بأسماء الملفات.
  3. إذا كانت وحدة التحكّم تحتوي على رسالة بشأن الملفات في Assets/StreamingAssets/، تأكَّد من عدم توفّر رسائل من وحدة التحكّم تشير إلى أنّه تعذّر على Unity تعديل الملفات هناك.
  4. تأكَّد من إنشاء Assets/StreamingAssets/google-services-desktop.json ومطابقته لملف الإعداد الذي تم تنزيله.
    • إذا لم يتم إنشاؤه تلقائيًا ولم يكن StreamingAssets/ متوفّرًا، يمكنك إنشاء الدليل يدويًا في الدليل Assets.
    • تحقَّق ممّا إذا كان Unity قد أنشأت الآن google-services-desktop.json.

التأكّد من أنّه تم تثبيت كل منتج من منتجات Firebase وEDM4U حصريًا من خلال .unitypackage أو Unity Package Manager

  1. تحقَّق من المجلد Assets/ وأداة Unity Package Manager للتأكّد من أنّه تم تثبيت حِزم تطوير البرامج (SDK) لمنصة Firebase وEDM4U بطريقة حصرية.
  2. قد تعتمد بعض المكوّنات الإضافية التي طوّرتها Google، مثل Google Play والمكوّنات الإضافية التابعة لجهات خارجية، على EDM4U. وقد تتضمّن هذه المكوّنات الإضافية EDM4U في حزم .unitypackage أو حزم Unity Package Manager (UPM). التأكّد من توفّر نسخة واحدة فقط من EDM4U في مشروعك إذا كانت أي حِزم UPM تعتمد على EDM4U، من الأفضل الاحتفاظ فقط بإصدارات UPM من EDM4U، والتي يمكن العثور عليها في صفحة Google APIs for Unity المؤرشفة.

تأكّد من أنّ كل منتج Firebase في مشروعك يستخدم الإصدار نفسه.

  1. إذا تم تثبيت حِزم تطوير البرامج (SDK) لمنصة Firebase من خلال .unitypackage، تحقَّق مما إذا كانت كل مكتبات FirebaseCppApp ضمن Assets/Firebase/Plugins/x86_64/ تستخدم الإصدار نفسه.
  2. إذا تم تثبيت حِزم تطوير البرامج (SDK) لمنصّة Firebase من خلال أداة Unity Package Manager (UPM)، افتح Windows > مدير الحزم، وابحث عن "Firebase" وتأكَّد من أنّ كل حِزم Firebase تعمل في الإصدار نفسه.
  3. إذا كان مشروعك يحتوي على إصدارات مختلفة من حِزم تطوير البرامج (SDK) لمنصة Firebase، ننصحك بإزالة جميع حِزم SDK لمنصة Firebase بالكامل قبل تثبيت جميع حِزم SDK لمنصّة Firebase مرة أخرى، ولكن مع استخدام الإصدارات نفسها هذه المرة. والطريقة الأمثل هي إزالة كل حزمة Firebase من خلال الطرق المذكورة في قسم نقل البيانات هذا.

أداة حل المشاكل وأخطاء إصدار الجهاز المستهدف

إذا كانت لعبتك تعمل في المحرِّر (تم ضبطه لتناسب هدف الإصدار المناسب الذي تختاره)، تأكَّد بعد ذلك من أنّ مدير التبعية الخارجية في Unity (EDM4U) تم ضبطه ويعمل بشكل صحيح.

يتضمّن مستودع EDM4U GitHub دليلاً مفصّلاً لهذا الجزء من العملية الذي يجب مراجعته واتّباعه قبل المتابعة.

مشاكل "One Dex" وتصغيرها (إلزامي في حال استخدام Cloud Firestore)

أثناء إنشاء تطبيق Android، قد يتعذّر عليك إنشاء إصدار مرتبط بامتلاك ملف واحد لـ dex. تبدو رسالة الخطأ مشابهة لما يلي (إذا تم ضبط مشروعك على استخدام نظام إصدار Gradle):

Cannot fit requested classes in a single dex file.

يُستخدَم .dex ملف للاحتفاظ بمجموعة من تعريفات الفئة وبيانات الأدوات الإضافية المرتبطة بها لتطبيقات Android. يقتصر ملف dex واحد على 65,536 طريقة، ولن تنجح الإصدارات إذا تجاوز إجمالي عدد الطرق من جميع مكتبات Android في مشروعك هذا الحدّ.

يمكن تطبيق الخطوتَين التاليتَين بشكل تسلسلي، وعليك تفعيل الدمج المتعدّد فقط إذا لم يؤدِّ تصغير المشكلة إلى حلّ المشكلة.

تفعيل التصغير

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

تفعيل Multidex

بعد تفعيل تصغير البيانات، إذا ما زال عدد الطرق المُشار إليها يتجاوز الحدّ المسموح به، هناك خيار آخر وهو تفعيل multidex. تتوفّر عدة طرق لتحقيق ذلك في مفهوم الانسجام:

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

يمكن العثور على مزيد من التفاصيل في دليل مستخدم Multidex.

التعرّف على أخطاء وقت تشغيل الجهاز المستهدَف وإصلاحها

إذا كانت لعبتك تعمل في المحرِّر وكان من الممكن تصميمها وتثبيتها على جهازك المستهدَف، ولكن واجهت أخطاء في وقت التشغيل، عليك فحص السجلات التي تم إنشاؤها على الجهاز والتحقيق فيها.

يوضّح هذا القسم كيفية التحقيق في سجلّاتك بحثًا عن الأخطاء المحتملة وأحد الأخطاء التي لا تحدث إلا في وقت التشغيل على الجهاز أو المحاكي.

Android

مُحاكي

  • افحص السجلّات المعروضة في وحدة تحكّم "المحاكي" أو اطّلِع على نافذة Logcat.

الجهاز

تعرَّف على adb وadb logcat وكيفية استخدامهما.

  • على الرغم من أنّه يمكنك استخدام الأدوات المختلفة في بيئة سطر الأوامر لفلترة النتائج، يمكنك بدلاً من ذلك النظر في خيارات Logcat.
  • هناك طريقة بسيطة لبدء جلسة ADB باستخدام قائمة فارغة وهي:

    adb logcat -c && adb logcat <OPTIONS>
    

    حيث OPTIONS هي العلامات التي تمرِّر فيها سطر الأوامر لفلترة النتائج.

استخدام Logcat من خلال "استوديو Android"

عند استخدام Logcat من خلال "استوديو Android"، تتوفّر أدوات بحث إضافية تسهّل عملية إنشاء عمليات بحث مثمرة.

iOS

فحص السجلات

في حال تشغيل جهاز مادي، عليك توصيله بجهاز الكمبيوتر. افحص lldb في Xcode.

مشاكل في Swift

إذا واجهت سجلّات أخطاء تشير إلى swift، يُرجى الرجوع إلى قسم مدير التبعية الخارجية في Unity بشأن هذه السجلّات.

خطوات إضافية

إذا كانت لعبتك لا تزال تتضّمن مشاكل في تجميع بيانات Firebase أو إنشائها أو تشغيلها، تحقَّق من صفحة مشاكل حزمة تطوير البرامج (SDK) لمنصّة Firebase for Unity وفكِّر في إرسال مشكلة جديدة. بالإضافة إلى ذلك، يمكنك الرجوع إلى صفحة دعم Firebase لمعرفة الخيارات الإضافية.