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

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

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

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

Play मोड को कंपाइल करने में आने वाली समस्याएं

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

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

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

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

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

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

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

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

इसके लिए, Apple आइकॉन > System Preferences > Security & Privacy पर क्लिक करें

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

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

c35166e224cce720.png

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

फिर आपको पहले दिखाई देने वाली चेतावनी के समान एक चेतावनी दिखाई देगी:

5ad9ddb0d3a52892.png

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

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

  1. पक्का करें कि आपने फ़ाइल > बिल्ड सेटिंग में जाकर, अपनी बिल्ड सेटिंग को टारगेट (iOS या Android) के हिसाब से सेट किया है. पूरी जानकारी पाने के लिए, Unity Build की सेटिंग से जुड़ा दस्तावेज़ पढ़ें.
  2. अपने ऐप्लिकेशन की कॉन्फ़िगरेशन फ़ाइल डाउनलोड करें (Android के लिए google-services.json या iOS के लिए GoogleService-Info.plist) और प्रोजेक्ट सेटिंग > आपके ऐप्लिकेशन में जाकर, Firebase कंसोल से टारगेट बनाएं: अगर आपके पास ये फ़ाइलें पहले से मौजूद हैं, तो उन्हें अपने प्रोजेक्ट में मिटा दें और उनकी जगह सबसे नया वर्शन इस्तेमाल करें. साथ ही, पक्का करें कि उनकी स्पेलिंग ठीक वैसी ही हो जैसी फ़ाइल के नामों के साथ ऊपर दिखाई गई है.
  3. अगर कंसोल में, Assets/StreamingAssets/ में मौजूद फ़ाइलों से जुड़ा कोई मैसेज है, तो पक्का करें कि उसमें ऐसा कोई भी कंसोल मैसेज न हो जिसमें बताया गया हो कि Unity फ़ाइलों में बदलाव नहीं कर सका
  4. पक्का करें कि Assets/StreamingAssets/google-services-desktop.json जनरेट किया गया है और वह डाउनलोड की गई कॉन्फ़िगरेशन फ़ाइल से मेल खाता है.
    • अगर यह अपने-आप जनरेट नहीं होती है और StreamingAssets/ मौजूद नहीं है, तो Assets डायरेक्ट्री में मैन्युअल तरीके से डायरेक्ट्री बनाएं.
    • देखें कि Unity ने अब google-services-desktop.json जनरेट किया है या नहीं.

पक्का करें कि हर Firebase प्रॉडक्ट और EDM4U को खास तौर पर .unitypackage या Unity पैकेज मैनेजर की मदद से इंस्टॉल किया गया हो

  1. Assets/ फ़ोल्डर और Unity पैकेज मैनेजर, दोनों की जांच करें और यह पक्का करें कि Firebase SDK टूल और EDM4U को खास तौर पर, किसी एक तरीके से इंस्टॉल किया गया है.
  2. Google के बनाए गए कुछ प्लगिन, जैसे कि Google Play और तीसरे पक्ष के प्लगिन, EDM4U पर निर्भर हो सकते हैं. ऐसे प्लगिन के .unitypackage या Unity पैकेज मैनेजर (UPM) पैकेज में EDM4U शामिल हो सकता है. पक्का करें कि आपके प्रोजेक्ट में EDM4U की सिर्फ़ एक कॉपी हो. अगर कोई भी यूपीएम पैकेज, EDM4U पर निर्भर करता है, तो सिर्फ़ EDM4U का ही UPM वर्शन रखना बेहतर है. इसे Google API for Unity संग्रह पेज पर देखा जा सकता है.

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

  1. अगर Firebase SDK टूल को .unitypackage की मदद से इंस्टॉल किया गया था, तो देखें कि Assets/Firebase/Plugins/x86_64/ से जुड़ी सभी FirebaseCppApp लाइब्रेरी एक ही वर्शन में हैं या नहीं.
  2. अगर Firebase SDK टूल को यूनिटी पैकेज मैनेजर (यूपीएम) से इंस्टॉल किया गया है, तो Windows > पैकेज मैनेजर खोलें. इसके बाद, "Firebase" खोजें और पक्का करें कि सभी Firebase पैकेज एक ही वर्शन में हों.
  3. अगर आपके प्रोजेक्ट में Firebase SDK टूल के अलग-अलग वर्शन हैं, तो हमारा सुझाव है कि सभी Firebase SDK टूल को फिर से इंस्टॉल करने से पहले, सभी Firebase SDK टूल को पूरी तरह से हटा दें. इस बार, उन सभी 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 में ऐसा करने के कई तरीके हैं:

  • अगर प्लेयर सेटिंग में कस्टम ग्रेडल टेंप्लेट चालू है, तो 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 की जांच करें.

स्विफ़्ट से जुड़ी समस्याएं

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

आगे के चरण

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