गेम बनाने, इंस्टॉल करने, और चलाने की प्रोसेस को डीबग करना

शुरुआती जानकारी

यहां Unity के लिए Firebase SDK टूल का इस्तेमाल करके, Unity गेम को कंपाइल और बिल्ड करने की प्रोसेस को डीबग करने के बारे में बताया गया है. इसमें, गेम को नए प्लैटफ़ॉर्म के लिए कॉन्फ़िगर करते समय या अपडेट के बाद, कई सामान्य समस्याओं की जांच करने और उन्हें हल करने का तरीका बताया गया है. इसे इस क्रम में व्यवस्थित किया गया है कि ये गड़बड़ियां प्रोसेस में कब हो सकती हैं. इन सुझावों को क्रम से अपनाएं और हर सुझाव को लागू करने के बाद ही आगे बढ़ें.

इस दस्तावेज़ के अलावा, ज़्यादा जानकारी के लिए Unity के लिए Firebase के बारे में अक्सर पूछे जाने वाले सवाल देखें.

Play Mode में कॉम्पाइल करने से जुड़ी समस्याएं

मोबाइल बिल्ड शुरू करने से पहले, एडिटर में टेस्टिंग के दौरान बिल्ड से जुड़ी पहली क्लास की समस्याएं आ सकती हैं. इस सेक्शन में, Play Mode से पहले और उसके दौरान होने वाली सभी Firebase गड़बड़ियों के बारे में बताया गया है.

जब Unity, डिपेंडेंसी, कोड या अन्य एसेट में बदलावों का पता लगाता है या उन्हें शुरू करता है, तो वह प्रोजेक्ट को फिर से बनाने की कोशिश करेगा. अगर प्रोजेक्ट उस समय कंपाइल नहीं हो पाता है, तो एडिटर कंसोल में कंपाइलेशन से जुड़ी गड़बड़ियों को लॉग करेगा. साथ ही, अगर Play Mode में जाने की कोशिश की जाती है, तो आपको 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 क्लास या तरीकों का इस्तेमाल किया जा रहा हो, तो पक्का करें कि उन्हें उपलब्ध कराने के लिए, Firebase के खास प्रॉडक्ट के लिए सही using डायरेक्टिव का इस्तेमाल किया जा रहा हो.

    1. MechaHamster: Level Up with Firebase वर्शन के उदाहरण:
      1. using Firebase.RemoteConfig;
      2. using Firebase.Crashlytics;
  2. पुष्टि करें कि आपने सही Firebase पैकेज इंपोर्ट किए हैं:

    1. सही पैकेज इंपोर्ट करने के लिए, इनमें से कोई एक तरीका अपनाएं:
      1. Firebase Unity SDK को .unitypackage के तौर पर जोड़ें या
      2. Unity इंस्टॉल करने के अन्य विकल्प में जाकर, इनमें से कोई एक विकल्प आज़माएं.
    2. पक्का करें कि आपके प्रोजेक्ट और EDM4U में मौजूद हर Firebase प्रॉडक्ट:
      • एक ही वर्शन पर हों
      • इन्हें सिर्फ़ .unitypackage के तौर पर या सिर्फ़ Unity Package Manager की मदद से इंस्टॉल किया गया हो.
  3. अगर आपने .unitypackage के तौर पर, "10.0.0" से पहले के वर्शन का Firebase Unity SDK टूल इंपोर्ट किया है, तो Firebase Unity SDK टूल के ज़िप संग्रह में .NET 3.x और .NET 4.x, दोनों के लिए पैकेज मौजूद होते हैं. पक्का करें कि आपने अपने प्रोजेक्ट में, सिर्फ़ काम करने वाला .NET Framework लेवल शामिल किया हो:

    1. Unity Editor और .NET फ़्रेमवर्क के लेवल के साथ काम करने की सुविधा के बारे में, Firebase को अपने यूनिटी प्रोजेक्ट में जोड़ने का तरीका लेख पढ़ें.
    2. अगर आपने गलती से अपने Firebase पैकेज को गलत .NET फ़्रेमवर्क लेवल पर इंपोर्ट कर लिया है या .unitypackage का इस्तेमाल करके अतिरिक्त यूनिटी इंस्टॉल करने के विकल्पों में से किसी एक पर स्विच करना चाहते हैं, तो इस माइग्रेशन सेक्शन में बताए गए तरीकों से हर Firebase पैकेज को हटाना होगा. इसके बाद, सभी Firebase पैकेज को फिर से इंपोर्ट करना होगा.
  4. देखें कि आपका एडिटर आपके प्रोजेक्ट को फिर से बना रहा है या नहीं. साथ ही, यह भी देखें कि प्रोजेक्ट को चलाने पर, आपको उसकी सबसे नई स्थिति दिख रही है या नहीं:

    1. डिफ़ॉल्ट रूप से, Unity Editor को एसेट या कॉन्फ़िगरेशन में बदलाव होने पर, फिर से बनाने के लिए सेट किया जाता है.
    2. ऐसा हो सकता है कि यह सुविधा बंद कर दी गई हो और Unity Editor को मैन्युअल रीफ़्रेश/फिर से कंपाइल करें पर सेट कर दिया गया हो. इसकी जांच करें और अगर ऐसा है, तो मैन्युअल तरीके से रीफ़्रेश करने की कोशिश करें.

Play मोड के रनटाइम से जुड़ी गड़बड़ियां

अगर आपका गेम शुरू हो जाता है, लेकिन चलने के दौरान Firebase से जुड़ी समस्याएं आती हैं, तो ये तरीके आज़माएं:

पक्का करें कि आपने Mac OS पर "सुरक्षा और निजता" में Firebase बंडल को मंज़ूरी दी हो

अगर Mac OS पर एडिटर में गेम शुरू करने पर, आपको यह डायलॉग दिखता है, "FirebaseCppApp-<version>.bundle को नहीं खोला जा सकता, क्योंकि डेवलपर की पुष्टि नहीं की जा सकी.", तो आपको Mac के सुरक्षा और निजता मेन्यू में जाकर, उस खास बंडल फ़ाइल को अनुमति देनी होगी.

ऐसा करने के लिए, Apple आइकॉन > सिस्टम सेटिंग > सुरक्षा और निजता पर क्लिक करें

सुरक्षा मेन्यू में, पेज के आधे हिस्से में, एक सेक्शन होता है. इसमें बताया जाता है कि "FirebaseCppApp-<version>.bundle" को इस्तेमाल करने से ब्लॉक किया गया है, क्योंकि यह किसी ऐसे डेवलपर ने नहीं बनाया है जिसे पहचाना जा सका है."

फिर भी अनुमति दें लेबल वाले बटन पर क्लिक करें.

c35166e224cce720.png

Unity पर वापस जाएं और फिर से चलाएं बटन दबाएं.

इसके बाद, आपको पहली चेतावनी जैसी ही चेतावनी दिखेगी:

5ad9ddb0d3a52892.png

खोलें दबाएं. इसके बाद, आपका प्रोग्राम आगे बढ़ जाएगा. साथ ही, आपसे इस फ़ाइल के बारे में फिर से नहीं पूछा जाएगा.

पक्का करें कि आपके प्रोजेक्ट में मान्य कॉन्फ़िगरेशन फ़ाइलें मौजूद हों और उनका इस्तेमाल किया जा रहा हो

  1. पक्का करें कि फ़ाइल > बिल्ड सेटिंग में, आपकी बिल्ड सेटिंग आपके टारगेट (iOS या Android) के लिए सेट हों. पूरी जानकारी पाने के लिए, Unity Build की सेटिंग से जुड़ा दस्तावेज़ पढ़ें.
  2. अपने ऐप्लिकेशन के लिए कॉन्फ़िगरेशन फ़ाइल (Android के लिए google-services.json या iOS के लिए GoogleService-Info.plist) डाउनलोड करें और प्रोजेक्ट सेटिंग > आपके ऐप्लिकेशन में 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, दोनों की जांच करके पक्का करें कि Firebase SDK टूल और EDM4U, किसी एक तरीके से इंस्टॉल किए गए हों.
  2. Google के बनाए गए कुछ प्लगिन, जैसे कि Google Play और तीसरे पक्ष के प्लगिन, EDM4U पर निर्भर हो सकते हैं. ऐसे प्लग इन, अपने .unitypackages या Unity Package Manager (UPM) पैकेज में EDM4U शामिल कर सकते हैं. पक्का करें कि आपके प्रोजेक्ट में EDM4U की सिर्फ़ एक कॉपी हो. अगर कोई भी यूपीएम पैकेज, EDM4U पर निर्भर करता है, तो सिर्फ़ EDM4U के यूपीएम वर्शन रखना बेहतर है. इन्हें Google API for Unity संग्रह पेज पर देखा जा सकता है.

पक्का करें कि आपके प्रोजेक्ट में मौजूद हर Firebase प्रॉडक्ट का वर्शन एक ही हो.

  1. अगर Firebase SDK टूल .unitypackage के ज़रिए इंस्टॉल किए गए थे, तो देखें कि Assets/Firebase/Plugins/x86_64/ में मौजूद सभी FirebaseCppApp लाइब्रेरी एक ही वर्शन में हैं या नहीं.
  2. अगर Firebase SDK टूल, Unity Package Manager (UPM) की मदद से इंस्टॉल किए गए थे, तो Windows > Package Manager खोलें. इसके बाद, "Firebase" खोजें और पक्का करें कि सभी Firebase पैकेज एक ही वर्शन के हों.
  3. अगर आपके प्रोजेक्ट में Firebase SDK टूल के अलग-अलग वर्शन हैं, तो हमारा सुझाव है कि आप सभी Firebase SDK टूल को पूरी तरह से हटा दें. इसके बाद, सभी Firebase SDK टूल को फिर से इंस्टॉल करें. इस बार, एक ही वर्शन के साथ इंस्टॉल करें. इस माइग्रेशन सेक्शन में बताए गए तरीकों से, हर Firebase पैकेज को हटाना सबसे आसान तरीका है.

रिज़ॉल्वर और टारगेट डिवाइस के बिल्ड में हुई गड़बड़ियां

अगर आपका गेम एडिटर में काम करता है (आपकी पसंद के हिसाब से सही बिल्ड टारगेट के लिए कॉन्फ़िगर किया गया है), तो पुष्टि करें कि Unity के लिए बाहरी डिपेंडेंसी मैनेजर (EDM4U) सही तरीके से कॉन्फ़िगर और काम कर रहा है.

EDM4U GitHub रिपॉज़िटरी में, प्रक्रिया के इस हिस्से के लिए सिलसिलेवार निर्देश मौजूद हैं. आगे बढ़ने से पहले, इन निर्देशों को पढ़ें और फ़ॉलो करें.

'सिंगल डेक्स' से जुड़ी समस्याएं और डेटा को छोटा करना (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 को चालू करने का विकल्प है. Unity में ऐसा करने के कई तरीके हैं:

  • अगर प्लेयर सेटिंग में कस्टम Gradle टेंप्लेट चालू है, तो mainTemplate.gradle में बदलाव करें.
  • अगर एक्सपोर्ट किए गए प्रोजेक्ट को बनाने के लिए Android Studio का इस्तेमाल किया जाता है, तो मॉड्यूल-लेवल की build.gradle फ़ाइल में बदलाव करें.

मल्टीडेक्स उपयोगकर्ता गाइड में ज़्यादा जानकारी मिल सकती है.

टारगेट किए गए डिवाइस के रनटाइम की गड़बड़ियों को समझना और उन्हें ठीक करना

अगर आपका गेम एडिटर में काम करता है और टारगेट डिवाइस के लिए बनाया और इंस्टॉल किया जा सकता है, लेकिन इसके बावजूद आपको रनटाइम की गड़बड़ियों का सामना करना पड़ता है, तो डिवाइस पर जनरेट किए गए लॉग की जांच करें और उनकी जांच करें.

इस सेक्शन में, संभावित गड़बड़ियों और सिर्फ़ डिवाइस या सिम्युलेटर पर रनटाइम के दौरान होने वाली एक ऐसी गड़बड़ी का पता लगाने के लिए, अपने लॉग की जांच करने का तरीका बताया गया है.

Android

सिम्युलेटर

  • अपने एम्युलेटर के कंसोल में दिखाए गए लॉग की जांच करें या Logcat विंडो देखें.

डिवाइस

adb और adb logcat की जानकारी लें और उन्हें इस्तेमाल करने का तरीका भी जानें.

  • आउटपुट को फ़िल्टर करने के लिए, कमांड-लाइन एनवायरमेंट के अलग-अलग टूल का इस्तेमाल किया जा सकता है. इसके अलावा, logcat के विकल्प भी देखे जा सकते हैं.
  • बिना किसी रुकावट के ADB सेशन शुरू करने का आसान तरीका:

    adb logcat -c && adb logcat <OPTIONS>

    जहां OPTIONS वे फ़्लैग होते हैं जिन्हें आउटपुट को फ़िल्टर करने के लिए कमांड लाइन पास की जाती है.

Android Studio की मदद से Logcat का इस्तेमाल करना

Android Studio में Logcat का इस्तेमाल करने पर, खोज के लिए अतिरिक्त टूल उपलब्ध होते हैं. इनकी मदद से, काम की खोजें जनरेट करना आसान हो जाता है.

iOS

लॉग की जांच करना

अगर कोई फ़िज़िकल डिवाइस चलाया जा रहा है, तो उसे अपने कंप्यूटर से अटैच करें. Xcode में lldb की जांच करें.

Swift से जुड़ी समस्याएं

अगर आपको गड़बड़ी के लॉग में swift का ज़िक्र मिलता है, तो इस बारे में Unity के लिए बाहरी डिपेंडेंसी मैनेजर सेक्शन देखें.

आगे के चरण

अगर आपके गेम में अब भी Firebase से जुड़ी, कंपाइल करने, बनाने या चलाने से जुड़ी समस्याएं हैं, तो Unity के लिए Firebase SDK टूल से जुड़ी समस्याओं के पेज पर जाएं और नई समस्या दर्ज करें. इसके अलावा, अन्य विकल्पों के बारे में जानने के लिए, Firebase का सहायता पेज देखें.