मैं एक ऐसे प्रोजेक्ट पर काम कर रहा हूं जिसमें एक मैक एप्लिकेशन और एक आईपैड एप्लिकेशन शामिल है जो कोड साझा करता है। मैं आईफोन प्रोजेक्ट से मैक-विशिष्ट कोड को बाहर करने के लिए सशर्त संकलन स्विच का उपयोग कैसे कर सकता हूं और इसके विपरीत? मैंने देखा है कि TARGET_OS_IPHONE
और TARGET_OS_MAC
दोनों 1 हैं, और इसलिए वे दोनों हमेशा सत्य हैं। क्या कोई और स्विच है जिसका उपयोग मैं कर सकता हूं जो एक विशिष्ट लक्ष्य के लिए संकलन करते समय केवल सत्य लौटाएगा?मैक और आईफोन विशिष्ट कोड के बीच स्विच करने के लिए उपयोग करने के लिए कौन सा सशर्त संकलन?
अधिकांश भाग के लिए, मुझे दो परियोजनाओं के लिए प्रीकंपाइल हेडर में #include <UIKit/UIKit.h>
और #include <Cocoa/Cocoa.h>
स्थानांतरित करके फ़ाइलों को सहयोग करने के लिए मिल गया है। मैं मॉडल और कुछ उपयोगिता कोड साझा कर रहा हूं जो आरएसएस फ़ीड और एवरोनीट से डेटा प्राप्त करता है।
विशेष रूप से, [NSData dataWithContentsOfURL:options:error:]
फ़ंक्शन विकल्प पैरामीटर आईओएस 3.2 और पहले और मैक ओएस 10.5 के लिए एक अलग स्थिरता लेता है और इससे पहले आईओएस 4 और मैक ओएस 10.6 के लिए करता है। सशर्त मैं उपयोग कर रहा हूँ है:
#if (TARGET_OS_IPHONE && (__IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_3_2)) || (TARGET_OS_MAC && (MAC_OS_X_VERSION_MIN_REQUIRED > MAC_OS_X_VERSION_10_5))
यह काम करने के लिए लगता है, लेकिन मुझे यकीन है कि यह बुलेटप्रूफ है बनाना चाहते हैं। मेरी समझ यह है कि यदि मैक संस्करण 10.6 पर सेट किया गया है, लेकिन आईओएस संस्करण 3.2 पर सेट है, तो यह अभी भी नए स्थिरांक का उपयोग करेगा, भले ही यह आईओएस 3.2 के लिए संकलित हो, जो गलत लगता है।
किसी भी मदद के लिए अग्रिम धन्यवाद!
दुर्भाग्यवश, यदि आपके पास आईओएस और ओएसएक्स दोनों के लिए एक परियोजना है तो TARGET_OS_IPHONE को किसी भी मामले में परिभाषित किया जाना प्रतीत होता है। –
हां। इसे आईओएस के लिए ओएसएक्स, 1 के लिए 0 के रूप में परिभाषित किया गया है। आपको '#if TARGET_OS_IPHONE' का उपयोग करने की आवश्यकता है, न कि' #ifdef TARGET_OS_IPHONE'। एक उदाहरण जोड़ा गया। –
बीटीडब्ल्यू, चार्ट ऐप्पल के "रनटाइम wrangler" से है। अगर वास्तविकता उसके साथ असहमत प्रतीत होती है, तो सवाल वास्तविकता। :) –