اشکال زدایی فرآیند ساخت، نصب و اجرای بازی

مقدمه

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

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

مشکلات کامپایل حالت پخش

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

وقتی یونیتی شروع به کار می‌کند یا تغییراتی را در وابستگی‌ها، کد یا سایر دارایی‌ها تشخیص می‌دهد، سعی می‌کند پروژه را بازسازی کند. اگر پروژه در آن زمان قادر به کامپایل نباشد، ویرایشگر خطاهای کامپایل را در کنسول ثبت می‌کند و اگر سعی کنید وارد حالت پخش شوید، یک پنجره خطا در تب صحنه یونیتی دریافت خواهید کرد که می‌گوید All compiler errors have to be fixed before you can enter playmode! »

انواع، کلاس‌ها، متدها و اعضای از دست رفته

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

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: ارتقاء سطح با نسخه Firebase :
      1. using Firebase.RemoteConfig;
      2. using Firebase.Crashlytics;
  2. تأیید کنید که بسته‌های Firebase مناسب را وارد کرده‌اید:

    1. برای وارد کردن بسته‌های مناسب:
      1. Firebase Unity SDK را به عنوان .unitypackage s یا اضافه کنید
      2. یکی از گزینه‌های موجود در گزینه‌های نصب اضافی Unity را بررسی و اجرا کنید.
    2. مطمئن شوید که هر محصول Firebase در پروژه و EDM4U شما:
      • در یک نسخه هستند
      • یا منحصراً به عنوان .unitypackage s ‎ یا منحصراً از طریق Unity Package Manager نصب شده‌اند.
  3. اگر Firebase Unity SDK را قبل از نسخه "10.0.0" به عنوان .unitypackage وارد کرده‌اید، بایگانی فشرده Firebase Unity SDK شامل بسته‌هایی برای پشتیبانی از .NET 3.x و .NET 4.x است. مطمئن شوید که فقط سطح سازگار با .NET Framework را در پروژه خود گنجانده‌اید:

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

    1. به طور پیش‌فرض، ویرایشگر Unity طوری تنظیم شده است که هر زمان تغییرات در دارایی‌ها یا پیکربندی‌ها شناسایی شد، دوباره ساخته شود.
    2. ممکن است این قابلیت غیرفعال شده باشد و ویرایشگر یونیتی روی به‌روزرسانی/کامپایل مجدد دستی تنظیم شده باشد. این مورد را بررسی کنید و در صورت وجود چنین موردی، به‌روزرسانی دستی را امتحان کنید.

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

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

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

اگر هنگام اجرای بازی خود در ویرایشگر در سیستم عامل مک، با پیامی با مضمون «FirebaseCppApp-<version>.bundle Cannot be opened because the developer cannot be verified» مواجه شدید، باید آن فایل بسته‌ی خاص را در منوی امنیت و حریم خصوصی مک تأیید کنید.

برای انجام این کار، روی نماد اپل > تنظیمات سیستم > امنیت و حریم خصوصی کلیک کنید.

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

روی دکمه‌ای با عنوان « به هر حال اجازه بده» کلیک کنید.

c35166e224cce720.png

به یونیتی برگردید و دوباره دکمه‌ی Play را بزنید.

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

5ad9ddb0d3a52892.png

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

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

  1. مطمئن شوید که تنظیمات ساخت شما برای هدفی که در نظر دارید (iOS یا اندروید) در File > Build Settings تنظیم شده است. برای بحث کامل‌تر، مستندات تنظیمات ساخت Unity را مطالعه کنید.
  2. فایل پیکربندی برنامه خود ( google-services.json برای اندروید یا GoogleService-Info.plist برای iOS) را دانلود کنید و از کنسول Firebase در تنظیمات پروژه > برنامه‌های خود، هدف را بسازید: اگر از قبل این فایل‌ها را دارید، آن‌ها را در پروژه خود حذف کرده و با جدیدترین نسخه جایگزین کنید، مطمئن شوید که دقیقاً همانطور که در بالا نشان داده شده است، بدون "(1)" یا اعداد دیگر به نام فایل‌ها پیوست شده‌اند.
  3. اگر کنسول حاوی پیامی در مورد فایل‌های موجود در Assets/StreamingAssets/ است، مطمئن شوید که هیچ پیام کنسولی مبنی بر عدم توانایی یونیتی در ویرایش فایل‌های موجود در آنجا وجود ندارد.
  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 را بررسی کنید تا مطمئن شوید که Firebase SDKها و EDM4U منحصراً از طریق یکی از این دو روش نصب شده‌اند.
  2. برخی از افزونه‌های توسعه‌یافته توسط گوگل ، مانند گوگل پلی، و افزونه‌های شخص ثالث ممکن است به EDM4U وابسته باشند. این افزونه‌ها ممکن است شامل EDM4U در بسته‌های .unitypackage یا Unity Package Manager (UPM) خود باشند. مطمئن شوید که فقط یک نسخه از EDM4U در پروژه شما وجود دارد. اگر بسته‌های UPM به EDM4U وابسته هستند، بهتر است فقط نسخه‌های UPM از EDM4U را نگه دارید که می‌توانید آن‌ها را در صفحه بایگانی APIهای گوگل برای Unity پیدا کنید.

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

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

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

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

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

مشکلات «Single Dex» و کوچک‌سازی (در صورت استفاده از Cloud Firestore اجباری است )

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

Cannot fit requested classes in a single dex file.

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

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

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

یونیتی در سال ۲۰۱۷.۲ قابلیت Minification را معرفی کرد تا کدهای بلااستفاده را حذف کند، که می‌تواند تعداد کل متدهای ارجاع‌شده در یک فایل dex را کاهش دهد. * این گزینه را می‌توانید در تنظیمات پخش‌کننده > اندروید > تنظیمات انتشار > Minify پیدا کنید. * این گزینه‌ها ممکن است در نسخه‌های مختلف یونیتی متفاوت باشند، بنابراین به مستندات رسمی یونیتی مراجعه کنید.

فعال کردن Multidex

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

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

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

درک و رفع خطاهای زمان اجرای دستگاه هدف

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

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

اندروید

شبیه‌ساز

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

دستگاه

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

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

    adb logcat -c && adb logcat <OPTIONS>

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

استفاده از Logcat از طریق اندروید استودیو

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

آی‌او‌اس

بررسی لاگ‌ها

اگر دستگاه فیزیکی در حال اجرا است، آن را به رایانه خود وصل کنید. lldb را در Xcode بررسی کنید.

مشکلات سوئیفت

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

مراحل بعدی

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