2011-09-05 17 views
12

तोड़ने के बिना आईओएस 5 सुविधाओं का उपयोग करना मेरा आवेदन वर्तमान में नवीनतम आईओएस 4.x एसडीके के खिलाफ संकलित है। एक बार आईओएस 5.0 एसडीके खत्म होने के बाद, मेरे आवेदन में नई आईओएस 5.0 एसडीके सुविधाओं का उपयोग करना संभव होगा और फिर भी यह आईओएस 4 उपकरणों पर चल रहा है (लेकिन नई सुविधाओं को अक्षम करने वाले हिस्सों के साथ)?पिछड़ा संगतता

+0

संभावित डुप्लिकेट [आप 2.0 अनुकूल संगत ऐप में वैकल्पिक रूप से आईफोन ओएस 3.0 सुविधाओं का उपयोग कैसे करते हैं?] (Http://stackoverflow.com/questions/986589/how-do-you-optionally-use-iphone-os- 3-0-फीचर्स-इन-ए-2-0-संगत-एप) –

+0

यह भी देखें [आईफोन ऐप को कई एसडीके (फर्मवेयर) संस्करणों के साथ संगत कैसे करें] (http://stackoverflow.com/questions/3027120/how करने वाली मेकअप iphone-ऐप-संगत-साथ-कई-sdk-फर्मवेयर-संस्करण)। हालांकि उन प्रश्नों के संस्करण पुराने हैं, वही सामान्य सिद्धांत लागू होते हैं। –

उत्तर

10

आम तौर पर इस सवाल का जवाब करने के लिए, ऑब्जेक्टिव-सी क्रम पूरी तरह से प्रतिबिंबित करता है, जिसका अर्थ है कि आप जो प्रणालियां किसी ऑब्जेक्ट का समर्थन करता है क्वेरी कर सकता है (respondsToSelector: माध्यम से) और से वर्गों में से काबू पाने रनटाइम पर नाम (NSClassFromString के माध्यम से)। आईओएस बाइनरी फ्रेमवर्क के साथ कमजोर जुड़ाव की अवधारणा का भी समर्थन करते हैं, जिसका मतलब है कि फ्रेमवर्क लोड होने पर लोड किया जाएगा, लेकिन फ्रेमवर्क उपलब्ध नहीं होने पर आप इसे घातक त्रुटि नहीं मानते हैं (जैसा कि डिफ़ॉल्ट व्यवहार है)।

इसका मतलब है कि जब ऐप्पल ओएस के नए संस्करण जारी करता है तो आप ओएस के नवीनतम संस्करण पर नई सुविधाओं का उपयोग करने वाले कोड लिख सकते हैं लेकिन उनके बिना ठीक काम करता है यदि उन नई विशेषताएं एपीआई के नए बिट हैं।

ऐप्पल कभी-कभी नई एसडीके सुविधाओं की आपूर्ति करता है जो नए एपीआई नहीं हैं, जैसे क्लैंग स्थिर विश्लेषक को एक्सकोड में जोड़ा गया था। चूंकि उन विशेषताओं को आमतौर पर किसी रनटाइम समर्थन की आवश्यकता नहीं होती है, वे पूरी तरह से उपयोग योग्य होते हैं। आईओएस 5 थोड़ा अनोखा है क्योंकि ऐप्पल एलएलवीएम प्रोजेक्ट के लिए प्रतिबद्ध है, सुझाव देता है कि कुछ रनटाइम समर्थन पर निर्भर एआरसी सामानों में कुछ नई संकलन समय विशेषताएं हैं। तो वे अनुपलब्ध होंगे, अगर वास्तव में वे उपकरण में हैं क्योंकि ऐप्पल उन्हें वितरित करने का इरादा रखता है।

9

आप गीलेर की जांच कर सकते हैं कुछ फ़ंक्शन रनटाइम के दौरान उपलब्ध हैं या नहीं।

उदाहरण के लिए:

Class motionManagerClass = NSClassFromString(@"CMMotionManager"); 
if(motionManagerClass) { 
    CMMotionManager *motionManager = [[CMMotionManager alloc] init]; 
    if([motionManager isGyroAvailable]) { 
     //iOS device with gyro 
    }else { 
     //right iOS but device has no gyro 
    } 
}else{ 
//wrong iOS 
} 
संबंधित मुद्दे