2009-12-01 5 views
13

क्या कोई तरीका है कि मैं सिम्युलेटर या डिवाइस के लिए निर्माण कर रहा हूं या नहीं, इस आधार पर मैं अपने ऐप में सशर्त रूप से संकलित कर सकता हूं? (मेरा ऐप बाहरी सर्वर पर हुक करता है: यदि मैं डिवाइस पर चल रहा हूं, तो मैं स्थानीयहोस्ट से कनेक्ट करना चाहता हूं; अगर मैं डिवाइस पर चल रहा हूं, तो मैं अपने उत्पादन सर्वर पर जाना चाहता हूं।)एक्सकोड आईफोन प्रोजेक्ट में पता लगाएं कि क्या मैं सिम्युलेटर या डिवाइस के लिए निर्माण कर रहा हूं?

I ' मैं कुछ #ifdef चर की तलाश में हूं, मैं पता लगा सकता हूं, या रनटाइम पर कुछ भी ... इससे कोई फर्क नहीं पड़ता।

धन्यवाद।

उत्तर

18
#if !(TARGET_IPHONE_SIMULATOR) 

या वैकल्पिक रूप

#if (TARGET_OS_IPHONE) 

यदि आप डिवाइस पर चल रहे हैं आपको बता देंगे। यह काम करने के लिए के लिए, आपको चाहिए

#include "TargetConditionals.h"

फ़ाइल है कि आप here पा सकते हैं।

+0

धन्यवाद ... कि काम करने के लिए लगता है। "TargetConditionals.h" में और क्या परिभाषित किया गया है यह जानने का कोई तरीका? मुझे फ़ाइल कहीं भी नहीं मिल रही है ... –

+2

सुधार ... आपका दूसरा उदाहरण (TARGET_OS_IPHONE) हमेशा सफल होता है, बशर्ते, आप आईफोन विकास कर रहे हैं। आपका पहला उदाहरण, TARGET_IPHONE_SIMULATOR, जो मैं ढूंढ रहा हूं, और यह केवल तब सफल होता है जब आप सिम्युलेटर (बनाम डिवाइस) पर चल रहे हों। –

+0

फ़ाइल के लिंक के साथ संपादित किया गया। – luvieere

1

मैंने एक मैक्रो बनाया जिसमें आप निर्दिष्ट कर सकते हैं कि आप कौन सी कार्रवाइयां कोष्ठक के अंदर करना चाहते हैं और इन क्रियाओं को केवल तभी किया जाएगा जब डिवाइस अनुकरण किया जा रहा हो।

#define SIM(x) if ([[[UIDevice currentDevice].model lowercaseString] rangeOfString:@"simulator"].location != NSNotFound){x;} 

यह इस तरह प्रयोग किया जाता है:

SIM(NSLog(@"This will only be logged if the device is simulated")); 
संबंधित मुद्दे