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

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

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

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

प्ले मोड कंपाइलेशन से जुड़ी समस्याएं

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

जब Unity शुरू होता है या डिपेंडेंसी, कोड या अन्य ऐसेट में बदलावों का पता लगाता है, तो वह प्रोजेक्ट को फिर से बनाने की कोशिश करेगा. अगर उस समय प्रोजेक्ट कंपाइल नहीं हो पाता है, तो एडिटर, कंपाइलेशन से जुड़ी गड़बड़ियों को कंसोल में लॉग करेगा. साथ ही, अगर आपने Play मोड में जाने की कोशिश की, तो आपको Unity के Scene टैब में गड़बड़ी का एक पॉप-अप मिलेगा. इसमें 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. Firebase Unity SDK को .unitypackages के तौर पर जोड़ें या
      2. Unity इंस्टॉल करने के अन्य विकल्प में से कोई एक विकल्प चुनें और उसे आज़माएं.
    2. पक्का करें कि आपके प्रोजेक्ट में मौजूद हर Firebase प्रॉडक्ट और EDM4U:
      • एक ही वर्शन पर हों
      • उन्हें सिर्फ़ .unitypackage के तौर पर इंस्टॉल किया गया हो या सिर्फ़ Unity Package Manager के ज़रिए इंस्टॉल किया गया हो.
  3. अगर आपने Firebase Unity SDK टूल के "10.0.0" से पहले के वर्शन को .unitypackage के तौर पर इंपोर्ट किया है, तो Firebase Unity SDK टूल के ZIP फ़ॉर्मैट वाले संग्रह में .NET 3.x और .NET 4.x, दोनों के लिए पैकेज शामिल होते हैं. पक्का करें कि आपने अपने प्रोजेक्ट में सिर्फ़ .NET फ़्रेमवर्क का ऐसा लेवल शामिल किया हो जो काम करता हो:

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

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

प्ले मोड में रनटाइम से जुड़ी गड़बड़ियां

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

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

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

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

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

Allow Anyway लेबल वाले बटन पर क्लिक करें.

c35166e224cce720.png

Unity पर वापस जाएं और फिर से Play दबाएं.

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

5ad9ddb0d3a52892.png

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

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

  1. पक्का करें कि आपकी बिल्ड सेटिंग, File > Build Settings में आपके टारगेट (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 पर निर्भर हो सकते हैं. इन प्लग इन में, EDM4U को उनके .unitypackages या Unity Package Manager (UPM) पैकेज में शामिल किया जा सकता है. पक्का करें कि आपके प्रोजेक्ट में EDM4U की सिर्फ़ एक कॉपी हो. अगर कोई UPM पैकेज EDM4U पर निर्भर है, तो EDM4U के सिर्फ़ UPM वर्शन रखना सबसे सही है. ये वर्शन, 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 पैकेज को हटा दें.

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

अगर आपका गेम एडिटर में काम करता है (आपकी पसंद के सही बिल्ड टारगेट के लिए कॉन्फ़िगर किया गया है), तो इसके बाद पुष्टि करें कि External Dependency Manager for 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 फ़ाइल में रेफ़रंस किए गए तरीकों की कुल संख्या कम हो सकती है. * यह विकल्प, Player Settings > Android > Publishing Settings > Minify में जाकर देखा जा सकता है. * Unity के अलग-अलग वर्शन में विकल्प अलग-अलग हो सकते हैं. इसलिए, Unity का आधिकारिक दस्तावेज़ देखें.

मल्टीडेक्स की सुविधा चालू करना

अगर काट-छांट की सुविधा चालू करने के बाद भी, रेफ़रंस किए गए तरीकों की संख्या तय सीमा से ज़्यादा है, तो multidex को चालू किया जा सकता है. Unity में ऐसा करने के कई तरीके हैं:

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

इस बारे में ज़्यादा जानकारी पाने के लिए, मल्टीडेक्स इस्तेमाल करने के लिए गाइड पर जाएं.

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

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

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

Android

सिम्युलेटर

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

डिवाइस

adb और adb logcat के बारे में जानें. साथ ही, इन्हें इस्तेमाल करने का तरीका जानें.

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

    adb logcat -c && adb logcat <OPTIONS>

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

Android Studio के ज़रिए Logcat का इस्तेमाल करना

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

iOS

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

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

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

अगर आपको Swift से जुड़ी गड़बड़ी के लॉग मिलते हैं, तो उनके बारे में External Dependency Manager for Unity सेक्शन देखें.

आगे के चरण

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