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

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

यहां 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 Edition से उदाहरण:
      1. using Firebase.RemoteConfig;
      2. using Firebase.Crashlytics;
  2. पुष्टि करें कि आपने सही Firebase पैकेज इंपोर्ट किए हैं:

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

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

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

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

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

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

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

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

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

c35166e224cce720.png

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

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

5ad9ddb0d3a52892.png

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

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

  1. पक्का करें कि फ़ाइल > बिल्ड सेटिंग में, आपकी बिल्ड सेटिंग आपके टारगेट (iOS या Android) के लिए सेट हों. ज़्यादा जानकारी के लिए, Unity के लिए बने ऐप्लिकेशन की सेटिंग का दस्तावेज़ पढ़ें.
  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 के सिर्फ़ यूपीएम वर्शन का इस्तेमाल करना सबसे अच्छा है. ये वर्शन, Unity के लिए Google API के संग्रह वाले पेज पर मिल सकते हैं.

पक्का करें कि आपके प्रोजेक्ट में मौजूद हर 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 के सहायता पेज पर जाएं.