इस प्रश्न का उत्तर काफी सही नहीं है। मंच और हार्डवेयर बनाम सिम्युलेटर का सवाल ऑर्थोगोनल है।
प्लेटफ़ॉर्म या सिम्युलेटर पहचान के लिए शॉर्टकट के रूप में आर्किटेक्चर का उपयोग न करें! इस तरह की मैला सोच ने कई वर्षों से कई प्रोग्रामरों को दिल की धड़कन और सिरदर्द का एक बड़ा सौदा किया है।
यहां सशर्तों का एएससीआईआई चार्ट है। नाम आवश्यक रूप से ऐतिहासिक कारणों से मतलब नहीं है:
+--------------------------------------+
| TARGET_OS_MAC |
| +---+ +---------------------------+ |
| | | | TARGET_OS_IPHONE | |
| |OSX| | +-----+ +----+ +-------+ | |
| | | | | IOS | | TV | | WATCH | | |
| | | | +-----+ +----+ +-------+ | |
| +---+ +---------------------------+ |
+--------------------------------------+
Devices: TARGET_OS_EMBEDDED
Simulators: TARGET_OS_SIMULATOR
TARGET_OS_MAC सभी एप्पल प्लेटफार्मों के लिए सच है।
TARGET_OS_OSX केवल MacOS के लिए सच है
TARGET_OS_IPHONE (उपकरणों & सिमुलेटर)
TARGET_OS_IOS केवल iOS (उपकरणों & सिमुलेटर) के लिए सच है आईओएस, watchOS, और tvOS के लिए सच है
TARGET_OS_WATCH केवल वॉचोज़ के लिए सत्य है (डिवाइस & सिमुलेटर)
TARGET_OS_TV केवल tvOS (उपकरणों & सिमुलेटर)
TARGET_OS_EMBEDDED केवल iOS/watchOS/tvOS हार्डवेयर के लिए
TARGET_OS_SIMULATOR केवल सिम्युलेटर के लिए सच है सच है के लिए सच है।
मैं यह भी ध्यान रखें चल जाएगा कि आप मंच द्वारा xcconfig
फ़ाइलों में सेटिंग्स conditionalize कर सकते हैं:
//macOS only
SOME_SETTING[sdk=macosx] = ...
//iOS (device & simulator)
SOME_SETTING[sdk=iphone*] = ...
//iOS (device)
SOME_SETTING[sdk=iphoneos*] = ...
//iOS (simulator)
SOME_SETTING[sdk=iphonesimulator*] = ...
//watchOS (device & simulator)
SOME_SETTING[sdk=watch*] = ...
//watchOS (device)
SOME_SETTING[sdk=watchos*] = ...
//watchOS (simulator)
SOME_SETTING[sdk=watchsimulator*] = ...
//tvOS (device & simulator)
SOME_SETTING[sdk=appletv*] = ...
//tvOS (device)
SOME_SETTING[sdk=appletvos*] = ...
//tvOS (simulator)
SOME_SETTING[sdk=appletvsimulator*] = ...
// iOS, tvOS, or watchOS Simulator
SOME_SETTING[sdk=embeddedsimulator*] = ...
लक्ष्य सशर्त, बिल्कुल सही बात है, तो #ifdef TARGET_OS_IPHONE – kritzikratzi
@kritzikratzi का उपयोग कर रहा है जिनमें शामिल हैं: #ifdef है गलत; आपको #if का उपयोग करना होगा। (सिम्युलेटर पर नहीं होने पर प्रतीक को आमतौर पर 0 के रूप में परिभाषित किया जाता है; #ifdef अभी भी सत्य होगा।) – Andrew
आप में से उन लोगों के लिए जिन्होंने यह भी सोचा कि TARGET_OS_IPHONE डिवाइस का पता लगाने का एक तरीका है, ऐसा नहीं है। इसका मतलब है कि आप आईओएस पर हैं, सिम्युलेटर या आईफोन हो सकते हैं। TARGET_IPHONE_SIMULATOR डिवाइस बनाम सिम्युलेटर का पता लगाने का तरीका है। (मुझे पता है कि यह जवाब में उल्लिखित नहीं है लेकिन आईफोन को देखकर मेरी गलती होती है) –