গেম বিল্ড, ইন্সটল এবং রান প্রসেস ডিবাগ করা

ভূমিকা

নিচে ইউনিটির জন্য ফায়ারবেস এসডিকে (Firebase SDK for Unity) ব্যবহার করে ইউনিটি গেমের কম্পাইল এবং বিল্ড প্রক্রিয়া ডিবাগ করার একটি নির্দেশিকা দেওয়া হলো। একটি নতুন প্ল্যাটফর্মের জন্য বা কোনো আপডেটের পরে আপনার গেম কনফিগার ও বিল্ড করার সময় আপনি যে সাধারণ সমস্যাগুলোর সম্মুখীন হতে পারেন, সেগুলোর অনেকগুলো কীভাবে অনুসন্ধান ও সমাধান করবেন, তা এতে বর্ণনা করা হয়েছে। প্রক্রিয়াটিতে ত্রুটিগুলো কখন ঘটতে পারে, সেই ক্রমানুসারে এটি সাজানো হয়েছে। এগুলো ক্রমানুসারে দেখুন এবং প্রতিটি সমাধান হয়ে গেলে পরবর্তী ধাপে এগিয়ে যান।

এই ডকুমেন্টটি ছাড়াও, আরও তথ্যের জন্য Firebase for Unity FAQ দেখুন।

প্লে মোড সংকলন সমস্যা

মোবাইল বিল্ড শুরু করার আগে এডিটরে পরীক্ষা করার সময় প্রথম শ্রেণীর বিল্ড সমস্যা দেখা দিতে পারে। এই বিভাগে প্লে মোডের আগে এবং চলাকালীন ঘটা সমস্ত ফায়ারবেস ত্রুটি নিয়ে আলোচনা করা হয়েছে।

যখন ইউনিটি চালু হয় বা ডিপেন্ডেন্সি, কোড বা অন্যান্য অ্যাসেটে কোনো পরিবর্তন শনাক্ত করে, তখন এটি প্রজেক্টটি রিবিল্ড করার চেষ্টা করে। সেই সময়ে যদি প্রজেক্টটি কম্পাইল করা সম্ভব না হয়, তাহলে এডিটর কনসোলে কম্পাইলেশন এররগুলো লগ করবে এবং আপনি যদি প্লে মোডে প্রবেশ করার চেষ্টা করেন, তাহলে ইউনিটির সিন ট্যাবে একটি এরর পপআপ পাবেন, যেখানে লেখা থাকবে: "প্লে 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. কোডে যেখানে আপনি ফায়ারবেস ক্লাস বা মেথড ব্যবহার করছেন, সেখানে প্রয়োজনীয় নির্দিষ্ট ফায়ারবেস প্রোডাক্টগুলোর জন্য সঠিক ইউজিং ডিরেক্টিভ using করে সেগুলোকে সহজলভ্য করে তুলুন।

    1. MechaHamster: Level Up With Firebase Edition থেকে উদাহরণ:
      1. using Firebase.RemoteConfig;
      2. using Firebase.Crashlytics;
  2. যাচাই করুন যে আপনি যথাযথ ফায়ারবেস প্যাকেজগুলি ইম্পোর্ট করেছেন:

    1. উপযুক্ত প্যাকেজগুলি ইম্পোর্ট করতে হয়:
      1. Firebase Unity SDK-কে .unitypackage হিসেবে যোগ করুন অথবা
      2. অতিরিক্ত ইউনিটি ইনস্টলেশন অপশনগুলোতে থাকা বিকল্পগুলোর মধ্যে একটি খতিয়ে দেখুন এবং প্রয়োগ করুন।
    2. আপনার প্রোজেক্ট এবং EDM4U- তে থাকা প্রতিটি Firebase প্রোডাক্ট নিশ্চিত করুন:
      • একই সংস্করণে আছে
      • হয় শুধুমাত্র .unitypackage হিসেবে অথবা শুধুমাত্র ইউনিটি প্যাকেজ ম্যানেজারের মাধ্যমে ইনস্টল করা হয়েছিল।
  3. আপনি যদি "10.0.0" সংস্করণের আগের Firebase Unity SDK .unitypackage হিসেবে ইম্পোর্ট করে থাকেন, তাহলে Firebase Unity SDK জিপ আর্কাইভে .NET 3.x এবং .NET 4.x উভয়ের সাপোর্টের জন্য প্যাকেজ রয়েছে। নিশ্চিত করুন যে আপনি আপনার প্রোজেক্টে শুধুমাত্র সামঞ্জস্যপূর্ণ .NET Framework লেভেলটি অন্তর্ভুক্ত করেছেন:

    1. ইউনিটি এডিটর এবং .NET ফ্রেমওয়ার্কস লেভেল-এর বিভিন্ন সংস্করণের মধ্যে সামঞ্জস্যতা নিয়ে "আপনার ইউনিটি প্রজেক্টে ফায়ারবেস যোগ করুন" অংশে আলোচনা করা হয়েছে।
    2. যদি আপনি ভুলবশত আপনার Firebase প্যাকেজগুলো ভুল .NET Framework লেভেলে ইম্পোর্ট করে থাকেন অথবা .unitypackage প্যাকেজ ব্যবহার করা থেকে Unity-র অতিরিক্ত ইনস্টলেশন বিকল্পগুলোর কোনো একটিতে পরিবর্তন করতে চান, তাহলে সবচেয়ে সহজ উপায় হলো এই মাইগ্রেশন বিভাগে উল্লিখিত পদ্ধতিগুলো অনুসরণ করে প্রতিটি Firebase প্যাকেজ মুছে ফেলা এবং তারপর আবার সব Firebase প্যাকেজ ইম্পোর্ট করা।
  4. যাচাই করুন যে আপনার এডিটর আপনার প্রজেক্টটি পুনর্গঠন করছে এবং আপনার প্লে করার প্রচেষ্টাগুলো আপনার প্রজেক্টের সর্বশেষ অবস্থা প্রতিফলিত করছে:

    1. ডিফল্টরূপে, কোনো অ্যাসেট বা কনফিগারেশন পরিবর্তন শনাক্ত হলেই ইউনিটি এডিটর রিবিল্ড করার জন্য সেট করা থাকে।
    2. সম্ভবত এই কার্যকারিতাটি নিষ্ক্রিয় করা হয়েছে এবং ইউনিটি এডিটরটি ম্যানুয়াল রিফ্রেশ/রিকম্পাইল- এ সেট করা আছে। বিষয়টি খতিয়ে দেখুন এবং এমনটা হলে ম্যানুয়াল রিফ্রেশ করে দেখুন।

প্লে মোড রানটাইম ত্রুটি

যদি আপনার গেমটি চালু হওয়ার পর চলার সময় Firebase-এর সাথে কোনো সমস্যায় পড়ে, তাহলে নিম্নলিখিতগুলি চেষ্টা করুন:

Mac OS-এর "Security & Privacy"-তে Firebase বান্ডেলগুলো অনুমোদন করা নিশ্চিত করুন।

ম্যাক ওএস-এর এডিটরে আপনার গেমটি চালু করার সময় যদি এই লেখা সহ একটি ডায়ালগ বক্স আসে যে, "FirebaseCppApp-<version>.bundle Cannot be opened because the developer cannot be verified.", তাহলে আপনাকে অবশ্যই ম্যাক-এর Security & Privacy মেনু থেকে সেই নির্দিষ্ট বান্ডেল ফাইলটি অনুমোদন করতে হবে।

এটি করতে, অ্যাপল আইকন > সিস্টেম প্রেফারেন্সেস > সিকিউরিটি অ্যান্ড প্রাইভেসি-তে ক্লিক করুন।

নিরাপত্তা মেনুতে, পৃষ্ঠার প্রায় মাঝামাঝি অংশে একটি বিভাগ রয়েছে যেখানে লেখা আছে, ""FirebaseCppApp-<version>.bundle" ব্যবহার থেকে ব্লক করা হয়েছে কারণ এটি কোনো চিহ্নিত ডেভেলপারের তৈরি নয়।"

যাইহোক অনুমতি দিন ( Allow Anyway) লেখা বোতামটিতে ক্লিক করুন।

c35166e224cce720.png

ইউনিটিতে ফিরে যান এবং আবার প্লে চাপুন।

এরপর আপনি প্রথমটির মতো একটি সতর্কবার্তা দেখতে পাবেন:

5ad9ddb0d3a52892.png

ওপেন চাপুন এবং আপনার প্রোগ্রামটি চলতে পারবে; আপনাকে এই নির্দিষ্ট ফাইলটি সম্পর্কে আর জিজ্ঞাসা করা হবে না।

নিশ্চিত করুন আপনার প্রজেক্টে বৈধ কনফিগারেশন ফাইল রয়েছে এবং সেগুলো ব্যবহৃত হচ্ছে।

  1. ফাইল > বিল্ড সেটিংস- এ আপনার বিল্ড সেটিংস আপনি যে টার্গেটের (iOS বা Android) জন্য ব্যবহার করতে চান, তার জন্য সঠিকভাবে সেট করা আছে কিনা তা নিশ্চিত করুন। আরও বিস্তারিত আলোচনার জন্য, ইউনিটি বিল্ড সেটিংস ডকুমেন্টেশন পড়ুন।
  2. আপনার অ্যাপের জন্য কনফিগ ফাইল (অ্যান্ড্রয়েডের জন্য google-services.json অথবা iOS-এর জন্য GoogleService-Info.plist ) এবং বিল্ড টার্গেট Firebase কনসোলের Project Settings > Your Apps থেকে ডাউনলোড করুন: যদি আপনার প্রজেক্টে এই ফাইলগুলো আগে থেকেই থাকে, তাহলে সেগুলো ডিলিট করে দিন এবং সর্বশেষ ভার্সন দিয়ে প্রতিস্থাপন করুন। খেয়াল রাখবেন যেন ফাইলের নামের সাথে "(1)" বা অন্য কোনো সংখ্যা যুক্ত না থাকে এবং বানানটি উপরে দেখানো অনুযায়ী হুবহু লেখা হয়।
  3. যদি কনসোলে Assets/StreamingAssets/ ফোল্ডারের ফাইল সংক্রান্ত কোনো বার্তা থাকে, তাহলে নিশ্চিত করুন যে সেখানে এমন কোনো বার্তা নেই যেখানে বলা হচ্ছে যে ইউনিটি সেখানকার ফাইলগুলো সম্পাদনা করতে পারেনি।
  4. নিশ্চিত করুন যে Assets/StreamingAssets/google-services-desktop.json ফাইলটি তৈরি হয়েছে এবং ডাউনলোড করা কনফিগারেশন ফাইলের সাথে মিলছে।
    • যদি এটি স্বয়ংক্রিয়ভাবে তৈরি না হয় এবং StreamingAssets/ ডিরেক্টরিটি বিদ্যমান না থাকে, তাহলে Assets ডিরেক্টরির মধ্যে ম্যানুয়ালি ডিরেক্টরিটি তৈরি করুন।
    • ইউনিটি এখন google-services-desktop.json তৈরি করেছে কিনা তা পরীক্ষা করুন।

নিশ্চিত করুন যে প্রতিটি Firebase প্রোডাক্ট এবং EDM4U শুধুমাত্র .unitypackage অথবা Unity Package Manager-এর মাধ্যমেই ইনস্টল করা হয়েছে।

  1. Assets/ ফোল্ডার এবং Unity Package Manager উভয়ই পরীক্ষা করে নিশ্চিত করুন যে Firebase SDK এবং EDM4U শুধুমাত্র কোনো একটি পদ্ধতির মাধ্যমেই ইনস্টল করা হয়েছে।
  2. গুগল-নির্মিত কিছু প্লাগইন , যেমন গুগল প্লে, এবং থার্ড-পার্টি প্লাগইনগুলো EDM4U-এর উপর নির্ভরশীল হতে পারে। এই প্লাগইনগুলো তাদের .unitypackage অথবা ইউনিটি প্যাকেজ ম্যানেজার (UPM) প্যাকেজে EDM4U অন্তর্ভুক্ত করতে পারে। নিশ্চিত করুন যে আপনার প্রোজেক্টে EDM4U-এর কেবল একটিই কপি আছে। যদি কোনো UPM প্যাকেজ EDM4U-এর উপর নির্ভরশীল হয়, তবে শুধুমাত্র EDM4U-এর UPM সংস্করণগুলো রাখাই শ্রেয়, যা Google APIs for Unity Archive পেজে পাওয়া যাবে।

আপনার প্রোজেক্টের প্রতিটি ফায়ারবেস প্রোডাক্ট যেন একই ভার্সনে থাকে, তা নিশ্চিত করুন।

  1. যদি Firebase SDK-গুলো .unitypackage এর মাধ্যমে ইনস্টল করা হয়ে থাকে, তাহলে Assets/Firebase/Plugins/x86_64/ অধীনে থাকা সমস্ত FirebaseCppApp লাইব্রেরি একই ভার্সনের কিনা তা পরীক্ষা করুন।
  2. যদি ইউনিটি প্যাকেজ ম্যানেজার (UPM) এর মাধ্যমে ফায়ারবেস এসডিকে ইনস্টল করা হয়ে থাকে, তাহলে উইন্ডোজ > প্যাকেজ ম্যানেজার খুলুন, 'ফায়ারবেস' অনুসন্ধান করুন এবং নিশ্চিত করুন যে সমস্ত ফায়ারবেস প্যাকেজ একই সংস্করণে রয়েছে।
  3. আপনার প্রজেক্টে যদি ফায়ারবেস এসডিকে-এর বিভিন্ন সংস্করণ থাকে, তাহলে আমরা সুপারিশ করি যে আপনি সমস্ত ফায়ারবেস এসডিকে সম্পূর্ণরূপে মুছে ফেলুন এবং তারপর একই সংস্করণগুলো দিয়ে আবার ইনস্টল করুন। সবচেয়ে পরিষ্কার উপায় হলো এই মাইগ্রেশন বিভাগে উল্লিখিত পদ্ধতিগুলো অনুসরণ করে প্রতিটি ফায়ারবেস প্যাকেজ মুছে ফেলা।

রিজলভার এবং টার্গেট ডিভাইসের বিল্ড ত্রুটি

যদি আপনার গেমটি এডিটরে (আপনার পছন্দের উপযুক্ত বিল্ড টার্গেট অনুযায়ী কনফিগার করা) কাজ করে, তাহলে এরপর যাচাই করুন যে ইউনিটির জন্য এক্সটার্নাল ডিপেন্ডেন্সি ম্যানেজার (EDM4U) সঠিকভাবে কনফিগার করা এবং কার্যকর আছে।

এগিয়ে যাওয়ার আগে, EDM4U গিটহাব রিপোজিটরিতে এই প্রক্রিয়ার এই অংশের জন্য একটি ধাপে ধাপে নির্দেশিকা রয়েছে যা আপনার পর্যালোচনা করে অনুসরণ করা উচিত।

'সিঙ্গেল ডেক্স' সংক্রান্ত সমস্যা ও মিনিফিকেশন (ক্লাউড ফায়ারস্টোর ব্যবহার করলে বাধ্যতামূলক )

একটি অ্যান্ড্রয়েড অ্যাপ তৈরি করার সময়, একটিমাত্র ডেক্স (dex) ফাইল থাকার কারণে আপনি বিল্ড ফেইলারের সম্মুখীন হতে পারেন। এরর মেসেজটি দেখতে নিচের মতো হয় (যদি আপনার প্রজেক্টটি গ্রেডল (Gradle) বিল্ড সিস্টেম ব্যবহার করার জন্য কনফিগার করা থাকে):

Cannot fit requested classes in a single dex file.

অ্যান্ড্রয়েড অ্যাপ্লিকেশনের জন্য একগুচ্ছ ক্লাস ডেফিনিশন এবং সেগুলোর সাথে সম্পর্কিত আনুষঙ্গিক ডেটা ধারণ করতে .dex ফাইল ব্যবহার করা হয়। একটিমাত্র .dex ফাইলে সর্বোচ্চ ৬৫,৫৩৬টি মেথড রেফারেন্স করা যায়; আপনার প্রোজেক্টের সমস্ত অ্যান্ড্রয়েড লাইব্রেরির মোট মেথডের সংখ্যা এই সীমা অতিক্রম করলে বিল্ড ব্যর্থ হবে।

নিম্নলিখিত দুটি ধাপ পর্যায়ক্রমে প্রয়োগ করা যেতে পারে; মিনিফিকেশনের পরেও যদি সমস্যার সমাধান না হয়, তবেই মাল্টিডেক্স সক্রিয় করুন।

মিনিফিকেশন সক্ষম করুন

ইউনিটি ২০১৭.২ সংস্করণে অব্যবহৃত কোড বাদ দেওয়ার জন্য মিনিফিকেশন (Minification) চালু করেছে, যা একটি একক ডেক্স (dex) ফাইলে রেফারেন্স করা মেথডের মোট সংখ্যা কমাতে পারে। * এই অপশনটি প্লেয়ার সেটিংস > অ্যান্ড্রয়েড > পাবলিশিং সেটিংস > মিনিফাই (Player Settings > Android > Publishing Settings > Minify) -এ পাওয়া যাবে। * ইউনিটির বিভিন্ন সংস্করণে অপশনগুলো ভিন্ন হতে পারে, তাই অফিসিয়াল ইউনিটি ডকুমেন্টেশন দেখুন।

মাল্টিডেক্স সক্রিয় করুন

মিনিফিকেশন চালু করার পরেও যদি রেফারেন্স করা মেথডের সংখ্যা সীমা অতিক্রম করে, তাহলে আরেকটি উপায় হলো multidex চালু করা। ইউনিটিতে এটি করার একাধিক উপায় রয়েছে:

  • প্লেয়ার সেটিংস-এর অধীনে কাস্টম গ্রেডল টেমপ্লেট সক্রিয় করা থাকলে, mainTemplate.gradle পরিবর্তন করুন।
  • আপনি যদি অ্যান্ড্রয়েড স্টুডিও ব্যবহার করে এক্সপোর্ট করা প্রজেক্টটি বিল্ড করেন, তাহলে মডিউল-স্তরের build.gradle ফাইলটি পরিবর্তন করুন।

মাল্টিডেক্স ব্যবহারকারী নির্দেশিকাতে আরও বিস্তারিত তথ্য পাওয়া যাবে।

টার্গেট ডিভাইসের রানটাইম ত্রুটি বোঝা এবং সমাধান করা

যদি আপনার গেমটি এডিটরে কাজ করে এবং আপনার টার্গেট ডিভাইসের জন্য বিল্ড ও ইনস্টল করা যায়, কিন্তু তারপরেও রানটাইম এরর দেখা দেয়, তাহলে ডিভাইসটিতে তৈরি হওয়া লগগুলো পরীক্ষা ও তদন্ত করুন

এই অংশে সম্ভাব্য ত্রুটির জন্য আপনার লগগুলি কীভাবে তদন্ত করবেন এবং এমন একটি ত্রুটি যা কেবল ডিভাইস বা সিমুলেটরে রানটাইমে ঘটে, তা বিশদভাবে আলোচনা করা হয়েছে।

অ্যান্ড্রয়েড

সিমুলেটর

  • আপনার এমুলেটরের কনসোলে প্রদর্শিত লগগুলো পরীক্ষা করুন অথবা লগক্যাট উইন্ডোটি দেখুন।

ডিভাইস

adbadb logcat এবং এগুলোর ব্যবহার সম্পর্কে জেনে নিন।

  • যদিও আপনি আপনার কমান্ড লাইন এনভায়রনমেন্টের বিভিন্ন টুল ব্যবহার করে আউটপুট ফিল্টার করতে পারেন, তবে বিকল্প হিসেবে লগক্যাটের অপশনগুলোও খতিয়ে দেখতে পারেন।
  • একেবারে নতুন করে একটি ADB সেশন শুরু করার একটি সহজ উপায় হলো:

    adb logcat -c && adb logcat <OPTIONS>

    যেখানে OPTIONS হলো সেইসব ফ্ল্যাগ যা আপনি আউটপুট ফিল্টার করার জন্য কমান্ড লাইনে পাস করেন।

অ্যান্ড্রয়েড স্টুডিওর মাধ্যমে লগক্যাট ব্যবহার করা

অ্যান্ড্রয়েড স্টুডিওর মাধ্যমে লগক্যাট ব্যবহার করার সময় অতিরিক্ত সার্চ টুল পাওয়া যায় , যা কার্যকরী সার্চ তৈরি করাকে আরও সহজ করে তোলে।

আইওএস

লগ পরিদর্শন

যদি কোনো ফিজিক্যাল ডিভাইস ব্যবহার করেন, তবে সেটি আপনার কম্পিউটারের সাথে সংযুক্ত করুন। Xcode-এ lldb পরীক্ষা করে দেখুন।

দ্রুত সমস্যা

যদি আপনি এরর লগে 'swift'-এর উল্লেখ দেখতে পান, তাহলে সে বিষয়ে ' External Dependency Manager for Unity' অংশটি দেখুন।

পরবর্তী পদক্ষেপ

আপনার গেমে যদি এখনও ফায়ারবেস-সম্পর্কিত কম্পাইল, বিল্ড বা রান সমস্যা থাকে, তাহলে ইউনিটির জন্য ফায়ারবেস এসডিকে (Firebase SDK for Unity) ইস্যু পেজটি দেখুন এবং একটি নতুন ইস্যু ফাইল করার কথা বিবেচনা করুন। এছাড়াও, অতিরিক্ত বিকল্পগুলো সম্পর্কে জানতে ফায়ারবেস সাপোর্ট পেজটি দেখুন।