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

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

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

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

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

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

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

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

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

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

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

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

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

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

सुरक्षा मेन्यू में, पेज के बीच में एक सेक्शन होता है. इसमें लिखा होता है कि ""FirebaseCppApp-<version>.bundle" was blocked from use because it is not from an identified developer."

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

c35166e224cce720.png

Unity पर वापस जाएं और Play पर फिर से क्लिक करें.

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

5ad9ddb0d3a52892.png

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

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

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

पक्का करें कि आपके प्रोजेक्ट में मौजूद हर 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 को फिर से इंस्टॉल करें. इस बार, सभी SDK के एक ही वर्शन का इस्तेमाल करें. सबसे आसान तरीका यह है कि माइग्रेशन के इस सेक्शन में बताए गए तरीकों से, Firebase के हर पैकेज को हटाएं.

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

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

EDM4U के GitHub रिपॉज़िटरी में, प्रोसेस के इस हिस्से के लिए चरण-दर-चरण गाइड दी गई है. आपको आगे बढ़ने से पहले, इसकी समीक्षा करनी चाहिए और इसका पालन करना चाहिए.

'सिंगल डेक्स' से जुड़ी समस्याएं और कोड को छोटा करना (ज़रूरी है अगर Cloud Firestore का इस्तेमाल किया जा रहा है)

Android ऐप्लिकेशन बनाते समय, आपको सिंगल डेक्स फ़ाइल से जुड़ी बिल्ड की गड़बड़ी आ सकती है. गड़बड़ी का मैसेज, इस तरह का दिखता है. यह तब दिखता है, जब आपका प्रोजेक्ट, Gradle बिल्ड सिस्टम का इस्तेमाल करने के लिए कॉन्फ़िगर किया गया हो:

Cannot fit requested classes in a single dex file.

.dex फ़ाइलों का इस्तेमाल, Android ऐप्लिकेशन के लिए क्लास की परिभाषाओं और उनसे जुड़े डेटा को सेव करने के लिए किया जाता है. सिंगल डेक्स फ़ाइल में, 65,536 तरीकों का रेफ़रंस दिया जा सकता है. अगर आपके प्रोजेक्ट में मौजूद Android की सभी लाइब्रेरी में तरीकों की कुल संख्या इस सीमा से ज़्यादा है, तो बिल्ड नहीं हो पाएगा.

यहां दिए गए दोनों चरण क्रम से लागू किए जा सकते हैं. अगर कोड को छोटा करने से समस्या ठीक नहीं होती है, तो ही मल्टीडेक्स की सुविधा चालू करें.

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

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

अगले चरण

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