मेरे पास मेरे आवेदन में कोरएमएल मॉडल है।
रन टाइम पर, प्रेडिक्शन फीचर को iOS8-10 पर अक्षम किया जाना चाहिए और iOS11 पर सक्रिय होना चाहिए।
कोरएमएल का उपयोग करने वाले सभी वर्गों पर संकलन करने में सक्षम होने के लिए, मैंने जोड़ा है:
@ उपलब्ध (आईओएस 11.0, *)
लेकिन .mlmodel सभी एनोटेशन को छोड़कर प्रत्येक पुनर्निर्माण पर स्विफ्ट कोड उत्पन्न करता है। और इसलिए संकलन त्रुटियां बनाना जैसे:
'MLModel' केवल iOS 11.0 या नए संस्करण पर उपलब्ध है
क्या Xcode9 में केवल mlmodel iOS11 बनाने का कोई तरीका है?
संपादित करें: यह बग XCode 9 बीटा 4 में ठीक किया गया था। अब समाधान की आवश्यकता नहीं है।
2 जवाब
अपडेट करें। 07/25/17: Apple ने अभी-अभी नया APIपेश किया है। a> डिवाइस पर मॉडल संकलित करने के लिए। इसका मतलब है कि अब आप चरण 1-4 से बच सकते हैं।
- (वैकल्पिक) Xcode बीटा
sudo xcode-select --switch /Applications/Xcode-beta.app/Contents/Developer
पर स्विच करें। - अपना मॉडल संकलित करें:
xcrun coremlcompiler compile /path/to/MyModel.mlmodel /path/to/output/folder
। - संकलित मॉडल फ़ोल्डर
MyModel.mlmodelc
को अपने ऐप बंडल में रखें। - अपने प्रोजेक्ट में मैन्युअल रूप से ऑटो-जेनरेटेड स्विफ्ट मॉडल क्लास (
MyModel.swift
) जोड़ें और इसे@available(iOS 11.0, *)
के साथ एनोटेट करें। अपना मॉडल लोड और प्रारंभ करें:
चलो पथ = Bundle.main.path(forResource: "MyModel", ofType: "mlmodelc")
चलो url = URL (fileURLWithPath: पथ!)
चलो मॉडल = कोशिश करो! MyModel (सामग्रीऑफ़: url)
चेतावनी: मैंने ऐसे ऐप को AppStore पर अपलोड करने का प्रयास नहीं किया है। मैंने इसे अपने परीक्षण उपकरण पर आज़माया है, और यह काम करता है, मुझे यकीन नहीं है कि यह ऐपस्टोर पर रिलीज़ होने के बाद भी काम करना जारी रखता है।
यह एक बग की तरह लगता है - जेनरेट किए गए स्विफ्ट कोड में आपकी तरह ही @available
एनोटेशन शामिल होना चाहिए, ताकि आपका ऐप संकलित हो, आईओएस 11 में चलते समय इसमें कॉल कर सके, और पुराने आईओएस में चलते समय इसे कॉल न करने की आवश्यकता हो संस्करण।
मैं उस बग को Apple में दर्ज करने की पुरजोर अनुशंसा करता हूं ताकि वे उम्मीद है कि Xcode 9 GM से पहले इसे ठीक कर सकें।
इस बीच, आप अपने मॉडल के लिए कोड जनरेशन अक्षम कर सकते हैं। अपने कोड प्रोजेक्ट सेटिंग्स में, अपने लक्ष्य के लिए बिल्ड सेटिंग्स के तहत, "कोरएमएल कोड जनरेशन लैंग्वेज" देखें और इसे "कोई नहीं" में बदलें।
बेशक, यह आपको अपनी परियोजना में उत्पन्न स्विफ्ट वर्ग का उपयोग करने से रोकेगा, हालाँकि। यह आपको दो विकल्पों के साथ छोड़ देता है:
अपने मॉडल का मूल्यांकन करने के लिए सीधे कोर एमएल एपीआई का प्रयोग करें। (अर्थात,
MyModelClass()
, आदि के बजायMLModel(contentsOf: url)
।) सुविधाजनक रूप से, उत्पन्न स्विफ्ट वर्ग जिसे आपने देखा है लेकिन उपयोग नहीं कर रहे हैं, आपको उन सभी एपीआई कॉलों को दिखाता है जिनकी आपको आवश्यकता होगी।एक बार स्विफ्ट वर्ग उत्पन्न करें (केवल iOS 11 के लिए संकलन), फिर कोड को वहां से कॉपी करें और इसे एक नियमित स्रोत फ़ाइल में पेस्ट करें। चिपकाने के बाद, आप आवश्यक
@available
घोषणाएं जोड़ सकते हैं ताकि आप अपने न्यूनतम परिनियोजन लक्ष्य को iOS 10 या इससे पहले के संस्करण में बदल सकें।
दोनों ही मामलों में, यदि आप कभी भी मॉडल बदलते हैं तो आपको कुछ काम फिर से करने पड़ सकते हैं।
संबंधित सवाल
जुड़े हुए प्रश्न
नए सवाल
ios
iOS, Apple iPhone, iPod टच और iPad पर चलने वाला मोबाइल ऑपरेटिंग सिस्टम है। IOS प्लेटफॉर्म पर प्रोग्रामिंग से संबंधित प्रश्नों के लिए इस टैग [ios] का उपयोग करें। उन प्रोग्रामिंग भाषाओं के लिए विशिष्ट मुद्दों के लिए संबंधित टैग [उद्देश्य-सी] और [स्विफ्ट] का उपयोग करें।