परिचय
यूनिटी के लिए फायरबेस एसडीके का उपयोग करके यूनिटी गेम्स के लिए संकलन और निर्माण प्रक्रिया को डीबग करने के लिए निम्नलिखित एक गाइड है। यह वर्णन करता है कि नए प्लेटफ़ॉर्म के लिए या अपडेट के बाद अपने गेम को कॉन्फ़िगर और बनाते समय आपके सामने आने वाली कई सामान्य समस्याओं की जांच और समाधान कैसे करें। इसे इस क्रम में व्यवस्थित किया जाता है कि प्रक्रिया में ये त्रुटियाँ कब हो सकती हैं। क्रम से उनसे परामर्श करें और प्रत्येक का समाधान होने पर आगे बढ़ें।
इस दस्तावेज़ के अलावा, अधिक जानकारी के लिए फायरबेस फॉर यूनिटी FAQ से परामर्श लें।
प्ले मोड संकलन समस्याएँ
मोबाइल बिल्ड शुरू करने का प्रयास करने से पहले संपादक में परीक्षण करते समय बिल्ड समस्याओं की पहली श्रेणी उत्पन्न हो सकती है। यह अनुभाग प्ले मोड से पहले और उसके दौरान होने वाली सभी फायरबेस त्रुटियों से संबंधित है।
जब यूनिटी शुरू होती है या निर्भरता, कोड या अन्य परिसंपत्तियों में परिवर्तन का पता लगाती है, तो यह परियोजना को फिर से बनाने का प्रयास करेगी। यदि प्रोजेक्ट उस समय संकलित करने में असमर्थ है, तो संपादक कंसोल में संकलन त्रुटियों को लॉग करेगा और यदि आप प्ले मोड में प्रवेश करने का प्रयास करते हैं, तो आपको यूनिटी के दृश्य टैब में एक त्रुटि पॉपअप प्राप्त होगा जिसमें लिखा होगा कि All compiler errors have to be fixed before you can enter playmode!
.
फ़ायरबेस-संबंधी संकलन समस्याओं को डीबग करना
गुम प्रकार, वर्ग, विधियाँ और सदस्य
कई फ़ायरबेस समस्याएँ संपादक और कंपाइलर द्वारा आवश्यक प्रकारों, कक्षाओं, विधियों और सदस्यों को खोजने में असमर्थता के कारण उत्पन्न होती हैं। इसके सामान्य लक्षण निम्नलिखित प्रकार के हैं:
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>'
समाधान चरण:
जहां आप कोड में फ़ायरबेस कक्षाओं या विधियों का उपयोग कर रहे हैं, सुनिश्चित करें कि आप आवश्यक फ़ायरबेस उत्पादों के लिए सही
using
निर्देशों के साथ उन्हें उपलब्ध करा रहे हैं।सत्यापित करें कि आपने उपयुक्त फायरबेस पैकेज आयात किए हैं:
- उपयुक्त पैकेज आयात करने के लिए:
- Firebase Unity SDK को
.unitypackage
s या के रूप में जोड़ें - अतिरिक्त एकता स्थापना विकल्पों में से किसी एक विकल्प पर गौर करें और उसका पालन करें।
- Firebase Unity SDK को
- सुनिश्चित करें कि आपके प्रोजेक्ट में प्रत्येक फायरबेस उत्पाद और EDM4U :
- एक ही संस्करण में हैं
- या तो विशेष रूप से
.unitypackage
के रूप में या विशेष रूप से यूनिटी पैकेज मैनेजर के माध्यम से स्थापित किए गए थे।
- उपयुक्त पैकेज आयात करने के लिए:
यदि आपने संस्करण "10.0.0" से पहले फायरबेस यूनिटी एसडीके को
.unitypackage
s के रूप में आयात किया है, तो फायरबेस यूनिटी एसडीके ज़िप संग्रह में .NET 3.x और .NET 4.x दोनों समर्थन के लिए पैकेज शामिल हैं। सुनिश्चित करें कि आपने अपने प्रोजेक्ट में केवल संगत .NET फ्रेमवर्क स्तर को शामिल किया है:- यूनिटी एडिटर और .NET फ्रेमवर्क लेवल के संस्करणों के बीच संगतता पर आपके यूनिटी प्रोजेक्ट में फायरबेस जोड़ें में चर्चा की गई है।
- यदि आपने गलती से अपने फायरबेस पैकेज को गलत .NET फ्रेमवर्क स्तर पर आयात कर लिया है या
.unitypackage
s का उपयोग करने से अतिरिक्त यूनिटी इंस्टॉलेशन विकल्पों में से एक पर स्विच करने की आवश्यकता है, तो सबसे साफ तरीका इस माइग्रेशन अनुभाग में उल्लिखित विधियों के माध्यम से प्रत्येक फायरबेस पैकेज को हटाना है और फिर सभी फायरबेस पैकेजों को दोबारा आयात करें।
जांचें कि आपका संपादक आपके प्रोजेक्ट का पुनर्निर्माण कर रहा है और आपके खेलने के प्रयास आपके प्रोजेक्ट की नवीनतम स्थिति को दर्शाते हैं:
- डिफ़ॉल्ट रूप से, जब भी संपत्ति या कॉन्फ़िगरेशन परिवर्तन का पता चलता है तो यूनिटी संपादक को पुनर्निर्माण के लिए सेट किया जाता है।
- यह संभव है कि यह कार्यक्षमता अक्षम कर दी गई हो और यूनिटी एडिटर मैन्युअल रीफ्रेश/रीकंपाइल पर सेट हो। इसकी जांच करें और यदि ऐसा है तो मैन्युअल रीफ्रेश का प्रयास करें।
प्ले मोड रनटाइम त्रुटियाँ
यदि आपका गेम शुरू होता है, लेकिन चलते समय फायरबेस में समस्या आती है, तो निम्नलिखित प्रयास करें:
सुनिश्चित करें कि आप मैक ओएस पर "सुरक्षा और गोपनीयता" में फायरबेस बंडलों को मंजूरी देते हैं
यदि, मैक ओएस पर संपादक में अपना गेम शुरू करने पर, आपको एक संवाद प्रस्तुत किया जाता है जो कहता है, "FirebaseCppApp-<संस्करण>.बंडल को खोला नहीं जा सकता क्योंकि डेवलपर को सत्यापित नहीं किया जा सकता है।", आपको उस विशिष्ट बंडल फ़ाइल को स्वीकृत करना होगा मैक का सुरक्षा और गोपनीयता मेनू।
ऐसा करने के लिए, Apple आइकन > सिस्टम प्राथमिकताएँ > सुरक्षा और गोपनीयता पर क्लिक करें
सुरक्षा मेनू में, पृष्ठ के लगभग आधे नीचे, एक अनुभाग है जो कहता है ""FirebaseCppApp-<version>.bundle" को उपयोग से अवरुद्ध कर दिया गया था क्योंकि यह किसी पहचाने गए डेवलपर का नहीं है।"
वैसे भी अनुमति दें लेबल वाले बटन पर क्लिक करें।
यूनिटी पर वापस जाएँ और फिर से प्ले दबाएँ।
फिर आपको पहली चेतावनी के समान एक चेतावनी दिखाई देगी:
ओपन दबाएँ और आपका प्रोग्राम आगे बढ़ सकेगा; आपसे इस विशेष फ़ाइल के बारे में दोबारा नहीं पूछा जाएगा।
सुनिश्चित करें कि आपके प्रोजेक्ट में वैध कॉन्फ़िगरेशन फ़ाइलें शामिल हैं और उनका उपयोग किया जा रहा है
- सुनिश्चित करें कि आपकी बिल्ड सेटिंग्स फ़ाइल > बिल्ड सेटिंग्स में आपके इच्छित लक्ष्य (आईओएस या एंड्रॉइड) के लिए सेट हैं। अधिक संपूर्ण चर्चा के लिए, यूनिटी बिल्ड सेटिंग्स डॉक्यूमेंटेशन पढ़ें।
- अपने ऐप के लिए कॉन्फ़िगरेशन फ़ाइल डाउनलोड करें (एंड्रॉइड के लिए
google-services.json
या iOS के लिएGoogleService-Info.plist
) और प्रोजेक्ट सेटिंग्स> आपके ऐप्स में फायरबेस कंसोल से लक्ष्य बनाएं: यदि आपके पास पहले से ही ये फ़ाइलें हैं, तो उन्हें अपने प्रोजेक्ट में हटा दें और उन्हें नवीनतम संस्करण से बदलें, यह सुनिश्चित करते हुए कि उनकी वर्तनी ठीक उसी तरह लिखी गई है जैसा ऊपर दिखाया गया है बिना "(1)" या फ़ाइल नामों से जुड़े अन्य नंबरों के। - यदि कंसोल में
Assets/StreamingAssets/
में फ़ाइलों के संबंध में एक संदेश है, तो सुनिश्चित करें कि कोई कंसोल संदेश यह नहीं कह रहा है कि यूनिटी वहां फ़ाइलों को संपादित करने में असमर्थ थी - सुनिश्चित करें कि
Assets/StreamingAssets/google-services-desktop.json
जेनरेट हो गया है और डाउनलोड की गई कॉन्फ़िगरेशन फ़ाइल से मेल खाता है।- यदि यह स्वचालित रूप से उत्पन्न नहीं होता है और
StreamingAssets/
मौजूद नहीं है, तोAssets
निर्देशिका में मैन्युअल रूप से निर्देशिका बनाएं। - जांचें कि क्या यूनिटी ने अब
google-services-desktop.json
जेनरेट कर लिया है।
- यदि यह स्वचालित रूप से उत्पन्न नहीं होता है और
सुनिश्चित करें कि प्रत्येक फायरबेस उत्पाद और EDM4U विशेष रूप से .unitypackage
या Unity पैकेज मैनेजर के माध्यम से स्थापित किए गए थे
- यह सुनिश्चित करने के लिए कि फायरबेस एसडीके और ईडीएम4यू विशेष रूप से एक या अन्य विधि के माध्यम से स्थापित किए गए थे,
Assets/
फ़ोल्डर और यूनिटी पैकेज मैनेजर दोनों की जाँच करें। - कुछ Google-विकसित प्लगइन्स , जैसे Google Play, और तृतीय-पक्ष प्लगइन्स EDM4U पर निर्भर हो सकते हैं। उन प्लगइन्स में उनके
.unitypackage
s या यूनिटी पैकेज मैनेजर (UPM) पैकेज में EDM4U शामिल हो सकता है। सुनिश्चित करें कि आपके प्रोजेक्ट में EDM4U की केवल एक प्रति है। यदि कोई UPM पैकेज EDM4U पर निर्भर करता है, तो EDM4U के केवल UPM संस्करण रखना सबसे अच्छा है, जो Google API for Unity Archive पृष्ठ पर पाया जा सकता है।
सुनिश्चित करें कि आपके प्रोजेक्ट में प्रत्येक फायरबेस उत्पाद एक ही संस्करण पर है।
- यदि Firebase SDKs
.unitypackage
के माध्यम से स्थापित किए गए थे, तो जांचें कि क्याAssets/Firebase/Plugins/x86_64/
के अंतर्गत सभीFirebaseCppApp
लाइब्रेरी एक ही संस्करण में हैं। - यदि फायरबेस एसडीके यूनिटी पैकेज मैनेजर (यूपीएम) के माध्यम से स्थापित किए गए थे, तो विंडोज > पैकेज मैनेजर खोलें, "फायरबेस" खोजें और सुनिश्चित करें कि सभी फायरबेस पैकेज एक ही संस्करण में हैं।
- यदि आपके प्रोजेक्ट में फायरबेस एसडीके के विभिन्न संस्करण हैं, तो हम अनुशंसा करते हैं कि आप सभी फायरबेस एसडीके को फिर से स्थापित करने से पहले सभी फायरबेस एसडीके को पूरी तरह से हटा दें, इस बार समान संस्करणों के साथ। इस माइग्रेशन अनुभाग में उल्लिखित विधियों के माध्यम से प्रत्येक फायरबेस पैकेज को हटाना सबसे साफ तरीका है।
रिज़ॉल्वर और लक्ष्य डिवाइस निर्माण त्रुटियाँ
यदि आपका गेम संपादक में काम करता है (आपके चयन के उपयुक्त बिल्ड लक्ष्य के लिए कॉन्फ़िगर किया गया है), तो अगला सत्यापित करें कि यूनिटी के लिए बाहरी निर्भरता प्रबंधक (EDM4U) ठीक से कॉन्फ़िगर किया गया है और काम कर रहा है।
EDM4U GitHub रिपॉजिटरी में प्रक्रिया के इस भाग के लिए चरण-दर-चरण मार्गदर्शिका शामिल है जिसकी आपको आगे बढ़ने से पहले समीक्षा करनी चाहिए और उसका पालन करना चाहिए।
'सिंगल डेक्स' मुद्दे और लघुकरण (क्लाउड फायरस्टोर का उपयोग करने पर अनिवार्य )
एंड्रॉइड ऐप बनाते समय, आपको एकल डेक्स फ़ाइल से संबंधित बिल्ड विफलता का सामना करना पड़ सकता है। त्रुटि संदेश निम्न जैसा दिखता है (यदि आपका प्रोजेक्ट ग्रैडल बिल्ड सिस्टम का उपयोग करने के लिए कॉन्फ़िगर किया गया है):
Cannot fit requested classes in a single dex file.
.dex
फ़ाइलों का उपयोग एंड्रॉइड अनुप्रयोगों के लिए वर्ग परिभाषाओं और उनके संबंधित सहायक डेटा का एक सेट रखने के लिए किया जाता है। एक एकल डेक्स फ़ाइल 65,536 विधियों के संदर्भ तक सीमित है; यदि आपके प्रोजेक्ट में सभी Android लाइब्रेरीज़ से विधियों की कुल संख्या इस सीमा से अधिक हो जाती है, तो बिल्ड विफल हो जाएगा।
निम्नलिखित दो चरणों को क्रमिक रूप से लागू किया जा सकता है; मल्टीडेक्स को केवल तभी सक्षम करें जब लघुकरण से समस्या का समाधान न हो।
लघुकरण सक्षम करें
यूनिटी ने अप्रयुक्त कोड को हटाने के लिए 2017.2 में मिनिमिफिकेशन की शुरुआत की, जो एकल डेक्स फ़ाइल में संदर्भित तरीकों की कुल संख्या को कम कर सकता है। * विकल्प प्लेयर सेटिंग्स > एंड्रॉइड > पब्लिशिंग सेटिंग्स > मिनिफाई में पाया जा सकता है। * यूनिटी के विभिन्न संस्करणों में विकल्प भिन्न हो सकते हैं इसलिए आधिकारिक यूनिटी दस्तावेज़ देखें।
मल्टीडेक्स सक्षम करें
यदि, लघुकरण सक्षम करने के बाद, संदर्भित विधियों की संख्या अभी भी सीमा से अधिक है, तो दूसरा विकल्प multidex
सक्षम करना है। यूनिटी में इसे हासिल करने के कई तरीके हैं:
- यदि प्लेयर सेटिंग्स के अंतर्गत कस्टम ग्रेडल टेम्पलेट सक्षम है, तो
mainTemplate.gradle
को संशोधित करें। - यदि आप निर्यातित प्रोजेक्ट बनाने के लिए एंड्रॉइड स्टूडियो का उपयोग करते हैं, तो मॉड्यूल-स्तरीय बिल्ड.ग्रेडल फ़ाइल को संशोधित करें।
अधिक विवरण मल्टीडेक्स उपयोगकर्ता गाइड में पाया जा सकता है।
लक्ष्य डिवाइस रनटाइम त्रुटियों को समझना और ठीक करना
यदि आपका गेम संपादक में काम करता है और आपके लक्षित डिवाइस के लिए बनाया और इंस्टॉल किया जा सकता है, लेकिन आपको रनटाइम त्रुटियां मिलती हैं, तो डिवाइस पर उत्पन्न लॉग का निरीक्षण और जांच करें ।
यह अनुभाग विस्तार से बताता है कि संभावित त्रुटियों के लिए अपने लॉग की जांच कैसे करें और एक ऐसी त्रुटि जो केवल डिवाइस या सिम्युलेटर पर रनटाइम पर होती है।
एंड्रॉयड
सिम्युलेटर
- अपने एमुलेटर के कंसोल में प्रदर्शित लॉग का निरीक्षण करें या लॉगकैट विंडो देखें।
उपकरण
एडीबी और एडीबी लॉगकैट से खुद को परिचित करें और उनका उपयोग कैसे करें।
- जबकि आप आउटपुट को फ़िल्टर करने के लिए अपने कमांड लाइन वातावरण के विभिन्न टूल का उपयोग कर सकते हैं, वैकल्पिक रूप से लॉगकैट के विकल्पों पर विचार करें।
साफ़ स्लेट के साथ एडीबी सत्र शुरू करने का एक सरल तरीका है:
adb logcat -c && adb logcat <OPTIONS>
जहां
OPTIONS
वे झंडे हैं जिन्हें आप आउटपुट फ़िल्टर करने के लिए कमांड लाइन पास करते हैं।
एंड्रॉइड स्टूडियो के माध्यम से लॉगकैट का उपयोग करना
एंड्रॉइड स्टूडियो के माध्यम से लॉगकैट का उपयोग करते समय अतिरिक्त खोज उपकरण उपलब्ध होते हैं जो उत्पादक खोजों को सरल बनाते हैं।
आईओएस
लॉग का निरीक्षण करना
यदि कोई भौतिक उपकरण चला रहे हैं, तो उसे अपने कंप्यूटर से संलग्न करें। Xcode में lldb का निरीक्षण करें।
त्वरित मुद्दे
यदि आपको स्विफ्ट का उल्लेख करने वाले त्रुटि लॉग मिलते हैं, तो उनके संबंध में एक्सटर्नल डिपेंडेंसी मैनेजर फॉर यूनिटी अनुभाग से परामर्श लें।
अगले कदम
यदि आपके गेम में अभी भी फायरबेस से संबंधित संकलन, निर्माण या चलाने की समस्याएं हैं, तो यूनिटी मुद्दों के लिए फायरबेस एसडीके पृष्ठ की जांच करें और एक नया मुद्दा दर्ज करने पर विचार करें। इसके अतिरिक्त, अतिरिक्त विकल्पों के बारे में जानने के लिए फायरबेस सहायता पृष्ठ देखें।