2009-09-10 19 views
5

में अलग कोड/कॉन्फ़िगरेशन मैं उद्देश्य सी में एक कोको ऐप लिख रहा हूं जो एक webservice के साथ संचार कर रहा है और मैं इसे डीबग मोड में और वास्तविक webservice में एक सैंडबॉक्स से कनेक्ट करना चाहता हूं रिलीज मोड मुझे केवल कोड की रेखा पर बदलना है, जहां कॉन्फ़िगरेशन रखने वाली ऑब्जेक्ट को तुरंत चालू किया जाता है (एक अलग init-message और विभिन्न पैरामीटर के साथ)।रिलीज और डीबग बिल्ड (ओबीजे-सी)

तो मैं रिलीज या डीबग मोड के लिए कोड की एक पंक्ति कैसे स्वैप करूं?

उत्तर

7

आप #ifdef DEBUG के लिए जांच कर सकता है कर सकते हैं, लेकिन मैं आपको लगता है कि ऐसा नहीं करते हैं की सिफारिश करेंगे।

डीबग और रिलीज बिल्ड के बीच बहुत अंतर हैं। विभिन्न कंपाइलर अनुकूलन, प्रतीकों के विभिन्न सेट, आदि ...

अनिवार्य रूप से, आप खुद को ऐसे परिस्थिति में ढूंढने जा रहे हैं जहां आप डिबगिंग उद्देश्यों के लिए अपने सैंडबॉक्स के विरुद्ध रिलीज बिल्ड को चलाने के लिए चाहते हैं .... और आपका डीबग बिल्ड उत्पादन webservice के खिलाफ क्योंकि कुछ ग्राहक को एक समस्या है जो केवल रिलीज़ मोड में पुन: उत्पन्न होती है।

तो, इसके लिए, मैं एक उपयोगकर्ता डिफ़ॉल्ट का सुझाव दूंगा। NSUserDefaults देखें।

ध्यान दें कि सरल उपयोगकर्ता डिफ़ॉल्ट कमांड लाइन से सेट किया जा सकता है।

/path/to/Myapp.app/Contents/Macos/Myapp -ServerMode Debug 
+0

दिलचस्प तकनीक, मुझे इसे याद रखना होगा। – pix0r

+1

इस टिप के लिए धन्यवाद! आपका टर्मिनल कमांड वास्तव में मेरे लिए काम नहीं करता था। मैंने पाया "डिफ़ॉल्ट मेरे लिए काम कर रहे हैं। Bundle.identifier SandboxModeFlag -bool YES" मेरे लिए ठीक काम करने के लिए। – Christian

2

सबसे पहले, एक प्रीप्रोसेसर प्रतीक परिभाषित करें जो केवल 367368 के प्रश्न के अनुसार आपके डीबग बिल्ड कॉन्फ़िगरेशन में सेट है - इसे कहें, DEBUG। तो फिर तुम

#ifdef DEBUG 
    // Code that only compiles in debug configuration 
#else 
    // Code that compiles in other configurations (i.e. release) 
#endif 
8

आप config-विशिष्ट परिभाषित करता है का उपयोग कर सकते कोड है कि मार डाला है बदलने के लिए:

इस प्रकार, आप की तरह कुछ कर सकता है। पहले define a preprocessor symbol in Xcode कैसे करें के बारे में पढ़ें। फिर, अपने कोड में, ऐसा कुछ करें:

#if DEBUG_MODE 
#define BACKEND_URL @"http://testing.myserver.com" 
#else 
#define BACKEND_URL @"http://live.myserver.com" 
#end 

NSURLRequest *myRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:BACKEND_URL]]; 
+0

हालांकि मैंने बीबीएम के समाधान की शुरुआत की, लेकिन अब मैं समझता हूं कि यह कैसे काम करता है और इसे ध्यान में रखेगा। धन्यवाद। – Christian

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