[ios] एक्सकोड / आईओएस: यह निर्धारित करने के लिए कि क्या DEBUG / रिलीज निर्माण में कोड चल रहा है या नहीं?



3 Answers

ऐप्पल में पहले से ही डीबग बिल्ड में DEBUG फ्लैग शामिल है, इसलिए आपको अपना खुद का परिभाषित करने की आवश्यकता नहीं है।

आप DEBUG मोड में नहीं होने पर NSLog को एक नल ऑपरेशन को फिर से परिभाषित करने पर विचार करना चाहेंगे, इस तरह आपका कोड अधिक पोर्टेबल होगा और आप नियमित NSLog कथन का उपयोग कर सकते हैं:

//put this in prefix.pch

#ifndef DEBUG
#undef NSLog
#define NSLog(args, ...)
#endif
Question

मैं एक ऐप बना रहा हूं जो संवेदनशील क्रेडिट कार्ड डेटा को संसाधित करता है।

यदि मेरा कोड डीबग मोड में चल रहा है, तो मैं इस डेटा को कंसोल पर लॉग करना चाहता हूं और कुछ फ़ाइल डंप कराना चाहता हूं।

हालांकि अंतिम ऐपस्टोर संस्करण (यानी जब यह रिलीज मोड में चल रहा है) पर यह आवश्यक है कि यह सब अक्षम है (सुरक्षा खतरे)!

मैं अपने प्रश्न का उत्तर देने की कोशिश करूंगा जितना मैं कर सकता हूं; तो सवाल बन जाता है 'क्या यह समाधान पथ करने का सही या सबसे अच्छा तरीका है?'

// add `IS_DEBUG=1` to your debug build preprocessor settings  

#if( IS_DEBUG )  
#define MYLog(args...) NSLog(args)  
#else  
#define MYLog(args...)  
#endif  



अधिकांश उत्तरों ने कहा कि #ifdef DEBUG कैसे सेट करें और इनमें से कोई भी यह नहीं कह रहा कि डीबग / रिलीज बिल्ड को कैसे निर्धारित किया जाए।

मेरी राय:

  1. योजना संपादित करें -> रन -> कॉन्फ़िगरेशन बनाएं: डीबग / रिलीज़ चुनें। यह सिम्युलेटर और आपके परीक्षण आईफोन की कोड स्थिति को नियंत्रित कर सकता है।

  2. योजना संपादित करें -> संग्रह -> कॉन्फ़िगरेशन बनाएं: डीबग / रिलीज़ चुनें। यह परीक्षण पैकेज ऐप और ऐप स्टोर ऐप की कोड स्थिति को नियंत्रित कर सकता है।




एक्सकोड 7 में, ऐप्पल एलएलवीएम 7.0 - प्रीप्रोकैसिंग के तहत एक फ़ील्ड है, जिसे " प्रीप्रोसेसर मैक्रोज़ प्रीकंपिल्ड में प्रयुक्त नहीं किया जाता है ... " मैंने डीबग के सामने डेबग लगाया और यह नीचे कोड का उपयोग करके मेरे लिए काम करता है:

#ifdef DEBUG
    NSString* const kURL = @"http://debug.com";
#else
    NSString* const kURL = @"http://release.com";
#endif



पता लगाने के लिए बस एक और विचार:

DebugMode.h

#import <Foundation/Foundation.h>

@interface DebugMode: NSObject
    +(BOOL) isDebug;
@end

DebugMode.m

#import "DebugMode.h"

@implementation DebugMode
+(BOOL) isDebug {
#ifdef DEBUG
    return true;
#else
    return false;
#endif
}
@end

हेडर ब्रिज फ़ाइल में जोड़ें:

#include "DebugMode.h"

उपयोग:

DebugMode.isDebug()

प्रोजेक्ट गुणों के अंदर कुछ लिखने की जरूरत नहीं है।




Related