2012-01-21 10 views
10

जारी करते समय NSLogs को हटा देना चाहिए क्या यह किसी शिपिंग ऐप में NSLog गिंग करने की सलाह दी जाती है? मुझे पता है कि मुझे भारी इस्तेमाल होने वाली लूप में नहीं होना चाहिए। या बहुत verbosely लॉग नहीं है। लेकिन मुझे यकीन नहीं है कि ऐसा करने के लिए यह एक अच्छा अभ्यास है या नहीं।क्या मुझे अपना ऐप

रिलीज से पहले सभी NSLog एस को हटाने से भी एक अच्छा अभ्यास नहीं लगता है।

उत्तर

11

मुझे लगता है कि यह उपयोगकर्ता के डिवाइस लॉग को स्पैम करने का एक अच्छा अभ्यास है।

#ifdef DEBUG 
#define DebugLog(fmt, ...) NSLog(fmt, __VA_ARGS__) 
#else 
#define DebugLog(fmt, ...) 
#endif 

सभी लॉग संदेश जो विकास के लिए मेरे पास दिलचस्प हैं के लिए, मैं DebugLog का उपयोग करें:

इस के लिए, मैं एक मैक्रो, DebugLog है, कि डिबगिंग के लिए केवल सक्रिय बनाता है। लॉग इन होने वाले सभी त्रुटि संदेशों के लिए मैं बिना शर्त NSLog का उपयोग करता हूं। इस तरह वितरण वितरण उपयोगकर्ता के कंसोल लॉग को अव्यवस्थित नहीं करता है। केवल महत्वपूर्ण संदेश लॉग हो जाते हैं।

+2

बिल्कुल। इसके अलावा, आईओएस उपकरणों पर सिस्टम लॉग हास्यास्पद रूप से अल्पकालिक है, इसलिए वास्तविक जीवन में यह सिर्फ बेकार है। आईओएस में 'एनएसएलओजी() 'सिर्फ एक _local_ डीबग उपकरण है। – Costique

4

यह उन कोडिंग दर्शन प्रश्नों में से एक है, लेकिन मेरे उत्पादन क्षुधा में मैं asl उपयोग करें और यह कॉन्फ़िगर बंद डिफ़ॉल्ट रूप से हो सकता है, लेकिन प्रवेश के विभिन्न स्तरों सक्रिय करने का विकल्प छोड़ (Info.plist में एक प्रविष्टि के माध्यम से)। मैं आपसे सहमत हूं कि एक शिपिंग ऐप में NSLog एस बहुत खराब दिखता है।

+0

फिर भी NSLog उत्पाद में कोई एप्लिकेशन troubleshot के लिए एक तरीका हो should't आयन। त्रुटियों और क्रैश जैसे कि न्यूरेलिक और कुछ अन्य लोगों की रिपोर्टिंग के लिए कई टूल हैं जो उपयोग करने के लिए भी स्वतंत्र हैं। – user2387149

1

लॉगिंग हमेशा महत्वपूर्ण होती है जब उस लाइव एप्लिकेशन का समर्थन करने के लिए कोई विशेष सहायता टीम मौजूद होती है, उस स्थिति में वे जांच सकते हैं कि क्या होता है और यदि कोई चीज़ कोड से संबंधित नहीं है और यदि यह कोर कोड है तो वे समस्या को ठीक कर सकते हैं मुद्दा तो वे देव टीम को पास कर सकते हैं।

लेकिन यदि एप्लिकेशन गेम की तरह कुछ है, तो लॉग कोई फर्क नहीं पड़ता। ऐप जारी करने से पहले आप उन्हें हटा सकते हैं।

1

यह निर्भर करता है। यदि आप अपने आवेदन में क्रैश रिपोर्टिंग सुविधा का उपयोग नहीं कर रहे हैं, तो आम तौर पर कुछ एनएसएलओजी स्टेटमेंट्स रखने के लिए एक अच्छा विचार है जो गंभीर त्रुटियों को लॉग करते हैं, ताकि एक जानकार उपयोगकर्ता उन्हें वापस रिपोर्ट कर सके और ऐप के साथ समस्याओं को ठीक करने में आपकी सहायता कर सके। रिहाई। यह निश्चित रूप से एक अच्छा विचार नहीं है कि आपकी रिलीज में NSLog कॉल बहुत अधिक गूढ़ डीबग करें।

0

आप अपने NSLog केवल काम करने के लिए जब अपने डीबग कर रहे हैं चाहते हैं और आप अपने कोड में कोई परिवर्तन का सबसे अच्छा तरीका अपने .pch फ़ाइल पर यह करने के लिए है करने के लिए नहीं करना चाहते हैं:

#ifndef DEBUG 
#define NSLog(x...) 
#endif 

विवरण और समस्या निवारण:

इसका मतलब यह है कि अगर डीबग परिभाषित नहीं है यह "ओवरराइड" होगा सभी NSLogs कुछ भी नहीं करना, इस स्ट्रिंग की जगह पूरे कोड में ऐसा कोई NSLog संकलन से पहले जगह लेता होगा बचें, गलती से उत्पादन पर कोई एनएसएलओजी नहीं छोड़ा जाएगा, इससे उत्पादन ऐप्स पर एनएसएलॉग को हटाने की भूल में मानव त्रुटि को समाप्त कर दिया जाएगा।

डीबीयूजी सामान्य रूप से सभी एक्सकोड परियोजनाओं में डिफ़ॉल्ट रूप से डीबग मोड में परिभाषित किया जाता है।आप पता कर सकते हैं अगर यह पर परिभाषित किया गया है:

Build Settings -> 
Apple LLV #.# - Preprocessing -> 
Preprocessor Macros -> Debug 

अगर यह वहाँ

DEBUG=1 

भी जोड़ नहीं है, तो आप एक PCH फ़ाइल नहीं है या यहां तक ​​तार नहीं है क्या आप के लिए मिला कर (क्योंकि यह स्वतः xcode 5 में जोड़ा गया लेकिन अब नई परियोजना टेम्पलेट्स पर डिफ़ॉल्ट रूप से xcode 6 में और ऊपर जोड़ा जाता है)

Why isn't ProjectName-Prefix.pch created automatically in Xcode 6?

+0

अन्य डेवलपर्स के साथ काम करते समय यह सही है क्योंकि आम तौर पर हर कोई एनएसएलओजी का उपयोग करता है, और यदि आप एक और मैक्रो को परिभाषित करना चाहते हैं जैसे कि "डीबग्लॉग()" डेवलपर्स इसका उपयोग करना भूल जाते हैं और इसलिए लॉग प्रिंटिंग के साथ एक ऐप शिपिंग कर सकते हैं। यह मानव त्रुटि को समाप्त करता है। – user2387149

संबंधित मुद्दे