2016-07-23 5 views
6

रनटाइम आईओएस संस्करण के आधार पर Swift में सशर्त रूप से एक ढांचा आयात करने का कोई तरीका है?स्विफ्ट में आईओएस संस्करण के आधार पर सशर्त रूप से एक ढांचा (जैसे स्पीच) आयात करें?

विशेष रूप से, मेरे पास iOS 8 के परिनियोजन लक्ष्य के साथ एक ऐप है। यदि मैं रनटाइम पर उपलब्ध हूं, तो मैं ऐप में नए Apple Speech फ्रेमवर्क का उपयोग करना चाहता हूं। मुझे कोड अनुभागों के लिए #available(iOS 10, *) निर्देश, और @available(iOS 10, *) निर्देश के बारे में पता है जिसका उपयोग पूरे वर्ग के लिए किया जा सकता है। तो मैं आसानी से किसी भी कोड को निष्पादित करने से बच सकता हूं जो उन लोगों के साथ भाषण ढांचे का उपयोग करता है। लेकिन उस फ़ाइल में जिसमें स्पीच का उपयोग करने वाली कक्षा शामिल है, मुझे "आयात भाषण" कथन की आवश्यकता है, और उन दो निर्देशों में से कोई भी उपयोग नहीं किया जा सकता है। मैं लग रहा है कि भले ही मैं अपने पूरे वर्ग पर @available(iOS 10, *) निर्देश है, जब मैं एक iOS 9 डिवाइस पर मेरे अनुप्रयोग चलाने यह प्रक्षेपण पर

"dyld: Library not loaded: /System/Library/Frameworks/Speech.framework/Speech". 

मैं कुछ याद आ रही हूँ साथ मार दिया जाता है, या यह केवल के लिए संभव है एक ऐप में स्पीच फ्रेमवर्क का उपयोग करें जिसमें 10 का परिनियोजन लक्ष्य है?

उत्तर

4

आप फ्रेमवर्क वैकल्पिक (विवरण और Ray Wenderlicht से छवि) बना सकते हैं:

Making a framework optional

यह @available के आपके उपयोग के साथ संयुक्त, उपकरण चुनें, जहां पर इसे लोड करने की कोशिश कर से प्रणाली रोकने चाहिए यह उपलब्ध नहीं है।

+0

यह कम से कम इस मामले में काम नहीं करता है। दिलचस्प बात यह है कि ऐप्पल के नमूने SpeakToMe प्रोजेक्ट में, स्पीच फ्रेमवर्क परियोजना में भी जुड़ा हुआ नहीं है, लेकिन यह वैसे भी ठीक (डिवाइस पर) बनाता है और चलाता है। इसी प्रकार, मेरी परियोजना में, आईओएस 10 पर, यह भाषण ढांचे को जोड़ने के बिना काम करता है। अगर मैं आगे बढ़ता हूं और फ्रेमवर्क को वैसे भी जोड़ता हूं, और इसे वैकल्पिक बनाता हूं, तो यह अभी भी आईओएस 10 पर बनाता है और चलता है, लेकिन मुझे आईओएस 9 पर एक ही दुर्घटना मिलती है। –

+0

@MattF_PI उत्सुक। आपको @ उपलब्ध के साथ ढांचे के हर उपयोग को कवर करने की आवश्यकता है। प्रत्येक पर एक संकलन त्रुटि का कारण बनने के लिए शामिल (एस) को टिप्पणी करने का प्रयास करें ताकि आप उन्हें जांच सकें - @ उपलब्ध के बिना केवल एक पैरामीटर का उपयोग सिस्टम को 'वैकल्पिक' ढांचे को लोड करने का प्रयास करने के लिए ट्रिगर करेगा। यदि नहीं, क्षमा करें, यह afaik काम करना चाहिए। –

+0

मेरी गलती क्षमा करें - मुझे अभी एहसास हुआ कि मैंने परियोजना में गलत लक्ष्य के लिए ढांचा जोड़ा है (हमारे पास बहुत सारे लक्ष्य हैं)। तो सही लक्ष्य पर भाषण ढांचे को स्पष्ट रूप से जोड़ना, फिर इसे वैकल्पिक बनाना (@available के साथ संयोजन और # कोड से बचने के लिए उपलब्ध), वास्तव में कोड को आईओएस 9 और आईओएस 10 दोनों पर चलाने की अनुमति देता है। –

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