عیب‌یابی فرایند ساخت، نصب، و اجرای بازی

مقدمه

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

علاوه‌بر این سند، برای اطلاعات بیشتر به پرسشگان Firebase برای Unity مراجعه کنید.

مشکلات گردآوری «حالت پخش»

اولین دسته از مشکلات ساخت می‌تواند درحین آزمایش در ویرایشگر قبل‌از تلاش برای شروع ساخت تلفن همراه رخ دهد. این بخش مربوط به همه خطاهای Firebase است که قبل و درطول «حالت پخش» رخ می‌دهد.

وقتی Unity شروع می‌شود یا تغییراتی در وابستگی‌ها، کد، یا دارایی‌های دیگر تشخیص می‌دهد، سعی می‌کند پروژه را بازسازی کند. اگر پروژه در آن زمان نتواند کامپایل کند، ویرایشگر خطاهای کامپایل را در کنسول ثبت می‌کند و اگر بخواهید وارد «حالت پخش» شوید، یک بالاپَر خطا در برگه صحنه 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. «کیت توسعه نرم‌افزار Firebase Unity» را به‌عنوان .unitypackages اضافه کنید یا
      2. یکی از گزینه‌های جایگزین در گزینه‌های نصب اضافی Unity را بررسی و اجرا کنید.
    2. مطمئن شوید که همه محصولات Firebase در پروژه شما و EDM4U:
      • در نسخه یکسانی هستند
      • یا منحصراً به‌عنوان .unitypackage نصب شده باشند یا منحصراً ازطریق «مدیر بسته Unity» نصب شده باشند.
  3. اگر «کیت توسعه نرم‌افزار Firebase Unity» را قبل‌از نسخه «۱۰.۰.۰» به‌عنوان .unitypackage وارد کرده‌اید، بایگانی فشرده «کیت توسعه نرم‌افزار Firebase Unity» حاوی بسته‌هایی برای پشتیبانی از .NET 3.x و .NET 4.x است. مطمئن شوید که فقط سطح سازگار .NET Framework را در پروژه خود اضافه کرده‌اید:

    1. سازگاری بین نسخه‌های «ویرایشگر Unity» و «سطوح چارچوب .NET» در افزودن Firebase به پروژه Unity مورد بحث قرار می‌گیرد.
    2. اگر به‌طور تصادفی بسته‌های Firebase را در سطح اشتباه .NET Framework وارد کرده‌اید یا نیاز دارید از .unitypackages به یکی از گزینه‌های نصب اضافی Unity تغییر دهید، بهترین راه این است که همه بسته‌های Firebase را ازطریق روش‌های ذکرشده در این بخش انتقال حذف کنید و سپس همه بسته‌های Firebase را دوباره وارد کنید.
  4. بررسی کنید که ویرایشگر درحال بازسازی پروژه شما است و تلاش‌های شما برای پخش نشان‌دهنده جدیدترین وضعیت پروژه شما است:

    1. به‌طور پیش‌فرض، ویرایشگر Unity طوری تنظیم شده است که هرگاه تغییرات دارایی یا پیکربندی شناسایی شود، بازسازی کند.
    2. ممکن است این عملکرد غیرفعال شده باشد و «ویرایشگر Unity» روی بازآوری/بازکامپایل دستی تنظیم شده باشد. این موضوع را بررسی کنید و اگر این‌طور است، بازآوری دستی انجام دهید.

خطاهای زمان اجرای «حالت پخش»

اگر بازی شما شروع می‌شود، اما درحین اجرا با Firebase مشکل دارد، موارد زیر را امتحان کنید:

مطمئن شوید که بسته‌های Firebase را در «امنیت و حریم خصوصی» در Mac OS تأیید می‌کنید

اگر هنگام راه‌اندازی بازی در ویرایشگر در Mac OS، با گفتگویی مواجه شدید که می‌گوید «FirebaseCppApp-<version>.bundle نمی‌تواند باز شود زیرا توسعه‌دهنده قابل‌تأیید نیست»، باید آن فایل دسته‌ای خاص را در منو «امنیت و حریم خصوصی» Mac تأیید کنید.

برای انجام این کار، روی نماد Apple > System Preferences (اولویت‌های سیستم) > Security & Privacy (امنیت و حریم خصوصی) کلیک کنید

در منو امنیت، تقریباً در نیمه پایین صفحه، بخشی وجود دارد که می‌گوید «استفاده از «FirebaseCppApp-<version>.bundle» مسدود شد زیرا از توسعه‌دهنده شناسایی‌شده‌ای نیست.»

روی دکمه برچسب‌گذاری‌شده به‌هرحال مجاز شود کلیک کنید.

c35166e224cce720.png

به Unity برگردید و دوباره پخش را فشار دهید.

سپس هشداری مشابه هشدار اول خواهید دید:

5ad9ddb0d3a52892.png

روی باز کردن فشار دهید تا برنامه‌تان بتواند ادامه دهد؛ دیگر درباره این فایل خاص از شما سؤالی پرسیده نخواهد شد.

مطمئن شوید پروژه شما حاوی فایل‌های پیکربندی معتبر است و از آن‌ها استفاده می‌کند

  1. مطمئن شوید تنظیمات ساخت شما برای هدف موردنظرتان (iOS یا Android) در File > Build Settings تنظیم شده باشد. برای بحث کامل‌تر، اسناد تنظیمات ساخت Unity را بخوانید.
  2. فایل پیکربندی برنامه خود را (google-services.json برای Android یا GoogleService-Info.plist برای iOS) و هدف ساخت را از کنسول Firebase در تنظیمات پروژه > برنامه‌های شما بارگیری کنید: اگر ازقبل این فایل‌ها را دارید، آن‌ها را در پروژه‌تان حذف کنید و با جدیدترین نسخه جایگزین کنید و مطمئن شوید که دقیقاً همان‌گونه که در بالا نمایش داده شده است نوشته شده باشند و «(۱)» یا اعداد دیگری به نام فایل‌ها اضافه نشده باشد.
  3. اگر کنسول حاوی پیامی درباره فایل‌های موجود در Assets/StreamingAssets/ است، مطمئن شوید که پیام کنسولی وجود ندارد که بگوید Unity نتوانسته است فایل‌ها را در آنجا ویرایش کند
  4. مطمئن شوید Assets/StreamingAssets/google-services-desktop.json تولید شده باشد و با فایل پیکربندی بارگیری‌شده مطابقت داشته باشد.
    • اگر به‌طور خودکار تولید نمی‌شود و StreamingAssets/ وجود ندارد، این پوشه را به‌صورت دستی در پوشه Assets ایجاد کنید.
    • بررسی کنید که آیا Unity اکنون google-services-desktop.json را تولید کرده است یا نه.

مطمئن شوید که همه محصولات Firebase و EDM4U منحصراً ازطریق .unitypackage یا «مدیر بسته Unity» نصب شده باشند

  1. هم پوشه Assets/ و هم «مدیر بسته Unity» را بررسی کنید تا مطمئن شوید «کیت‌های توسعه نرم‌افزار Firebase» و EDM4U منحصراً ازطریق یکی از این دو روش نصب شده باشند.
  2. برخی‌از افزایه‌های توسعه‌یافته Google، مانند Google Play، و افزایه‌های طرف سوم ممکن است به EDM4U وابسته باشند. آن افزونه‌ها ممکن است EDM4U را در بسته‌های .unitypackages یا Unity Package Manager (UPM) داشته باشند. مطمئن شوید که فقط یک نسخه از EDM4U در پروژه شما وجود دارد. اگر هریک از بسته‌های UPM به EDM4U وابسته است، بهتر است فقط نسخه‌های UPM از EDM4U را نگه دارید که می‌توانید آن‌ها را در صفحه «بایگانی Google APIs for Unity» پیدا کنید.

مطمئن شوید که همه محصولات Firebase در پروژه شما در یک نسخه باشند.

  1. اگر «کیت‌های توسعه نرم‌افزار Firebase» ازطریق .unitypackage نصب شده است، بررسی کنید که همه کتابخانه‌های FirebaseCppApp در Assets/Firebase/Plugins/x86_64/ در یک نسخه باشند.
  2. اگر «کیت‌های توسعه نرم‌افزار Firebase» ازطریق «مدیر بسته Unity» ‏ (UPM) نصب شده‌اند، Windows > مدیر بسته را باز کنید، «Firebase» را جستجو کنید، و مطمئن شوید همه بسته‌های Firebase در یک نسخه باشند.
  3. اگر پروژه شما حاوی نسخه‌های مختلف «کیت‌های توسعه نرم‌افزار Firebase» است، توصیه می‌کنیم قبل‌از نصب مجدد همه «کیت‌های توسعه نرم‌افزار Firebase»، همه «کیت‌های توسعه نرم‌افزار Firebase» را به‌طور کامل بردارید، این بار با نسخه‌های یکسان. پاک‌ترین راه این است که همه بسته‌های Firebase را ازطریق روش‌های ذکرشده در این بخش انتقال بردارید.

خطاهای ساخت دستگاه هدف و حل‌کننده

اگر بازی شما در ویرایشگر کار می‌کند (برای هدف ساخت مناسب انتخابی شما پیکربندی شده است)، در مرحله بعد، بررسی کنید که مدیر وابستگی خارجی برای Unity (EDM4U) به‌درستی پیکربندی و کار می‌کند.

مخزن GitHub مربوط به EDM4U حاوی راهنمای گام‌به‌گام برای این بخش از فرایند است که باید قبل‌از ادامه دادن آن را مرور و دنبال کنید.

مشکلات «تک‌فایل Dex» و کوچک‌سازی (اگر از Cloud Firestore استفاده می‌کنید، الزامی است)

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

Cannot fit requested classes in a single dex file.

فایل‌های .dex برای نگهداری مجموعه‌ای از تعریف‌های کلاس و داده‌های کمکی مرتبط برای برنامه‌های Android استفاده می‌شوند. یک فایل dex به ارجاع به ۶۵٬۵۳۶ روش محدود است؛ اگر تعداد کل روش‌ها از همه کتابخانه‌های Android در پروژه شما از این حد فراتر رود، ساخت‌ها ناموفق خواهد بود.

دو مرحله زیر را می‌توان به‌ترتیب اعمال کرد؛ فقط درصورتی multidex را فعال کنید که کوچک‌سازی مشکل را حل نکند.

فعال کردن کوچک‌سازی

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

فعال کردن Multidex

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

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

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

آشنایی با خطاهای زمان اجرای دستگاه هدف و رفع آن‌ها

اگر بازی شما در ویرایشگر کار می‌کند و می‌تواند برای دستگاه هدف شما ساخته و نصب شود، اما با خطاهای زمان اجرا مواجه می‌شوید، گزارش‌های تولیدشده در دستگاه را بررسی کنید.

این بخش توضیح می‌دهد که چگونه گزارش‌هایتان را برای یافتن خطاهای احتمالی بررسی کنید و یکی از این خطاها که فقط در زمان اجرا در دستگاه یا شبیه‌ساز رخ می‌دهد را معرفی می‌کند.

Android

شبیه‌ساز

  • گزارش‌های نمایش‌داده‌شده در کنسول «شبیه‌ساز» را بازرسی کنید یا پنجره Logcat را مشاهده کنید.

دستگاه

با adb و adb logcat و نحوه استفاده از آن‌ها آشنا شوید.

  • اگرچه می‌توانید از ابزارهای مختلف محیط خط فرمان برای فیلتر کردن برونداد استفاده کنید، بهتر است به‌جای آن گزینه‌های logcat را بررسی کنید.
  • روش ساده برای شروع جلسه ADB با صفحه‌ای سفید:

    adb logcat -c && adb logcat <OPTIONS>

    که در آن OPTIONS هر پرچمی است که به خط فرمان منتقل می‌کنید تا برونداد را فیلتر کند.

استفاده از Logcat ازطریق «استودیو Android»

هنگام استفاده از Logcat ازطریق Android Studio، ابزارهای جستجوی اضافی دردسترس است که تولید جستجوهای مفید را ساده‌تر می‌کند.

iOS

درحال بررسی گزارش‌ها

اگر از دستگاه فیزیکی استفاده می‌کنید، آن را به رایانه متصل کنید. lldb را در Xcode بازرسی کنید.

مشکلات Swift

اگر با گزارش‌های خطایی مواجه شدید که از swift نام می‌برد، به بخش مدیر وابستگی خارجی برای Unity درباره آن‌ها مراجعه کنید.

مراحل بعدی

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