स्विफ्ट 4.0 के साथ संकलित मॉड्यूल 4.0.1 स्विफ्ट में आयात नहीं किया जा सकता है


91

हालाँकि मैंने उसी Xcode का उपयोग करके ढांचे को फिर से जोड़ दिया है और यह अभी भी मुझे यह त्रुटि देता है।

  • दोनों के लिए बेस एसडीके आईओएस 11.1
  • दोनों के लिए स्विफ्ट भाषा संस्करण स्विफ्ट 4.0
  • पोड्स / कार्थेज का उपयोग नहीं करना

मुझे उम्मीद है कि कोई जानता होगा


ऐसा लगता है कि Apple को इस बात पर पुनर्विचार करने की आवश्यकता है कि ऑब्जेक्टिव C: ^) के लिए 10 साल की डेप्रिसिएशन नोटिस: इसने मुझे> 1 प्रोजेक्ट पर अभी काट लिया है और इन दोनों पर 3 जी बाइनरी फ्रेमवर्क हैं।
एंटोन ट्रोपास्को

जवाबों:


138

अपडेट करें:

Xcode के रिलीज़ संस्करणों के लिए:

Xcode 9.1, 9.2, 9.3, 9.4, 10, आदि के साथ एक परियोजना को खोलने पर यह त्रुटि (और इसी तरह की स्विफ्ट 4.1, 4.2, आदि) में त्रुटि उत्पन्न होगी, जो पहले Xcode उपकरण के साथ बनाए गए चौखटे का उपयोग करता है।

समस्या को ठीक करने के लिए, नए अपडेट किए गए Xcode टूल के साथ, Carthage ( carthage update --platform iOS), Cocoapods ( pod updateया pod install) या मैन्युअल रूप से उपयोग करके अपने फ्रेमवर्क को अपडेट और पुनर्निर्माण करें । जब आप Xcode अपडेट करते हैं, तो टूल को स्वचालित रूप से अपडेट किया जाना चाहिए, लेकिन यदि नहीं, तो आप मूल उत्तर में नीचे दिए गए चरणों का पालन कर सकते हैं।

आपको कैश्ड फ्रेमवर्क बिल्ड का उपयोग नहीं करने के लिए Xcode प्राप्त करने के लिए अपने प्रोजेक्ट cmd + shift + kऔर संभवतः अपने बिल्ड फ़ोल्डर cmd + option + shift + kको भी साफ़ करना पड़ सकता है।

कुछ मामलों में आपको अपने व्युत्पन्न डेटा फ़ोल्डर को हटाने की आवश्यकता हो सकती है (आसानी से Xcode प्राथमिकता में जाकर -> स्थान -> व्युत्पन्न डेटा फ़ोल्डर ( धन्यवाद स्टनर ))

Xcode के बीटा संस्करणों के लिए:

नीचे मूल उत्तर देखें और फिर ऊपर दिए गए चरणों का पालन करें।

मूल उत्तर:

आपके पास शायद अभी भी आपका Xcodebuild उपकरण Xcode 9.0 पर सेट है जो स्विफ्ट 4.0 के साथ बनाता है और Xcode 9.1 बीटा के स्विफ्ट 4.0.1 के साथ असंगत है।

आदेश का उपयोग करके टर्मिनल में जांचें:

xcodebuild -version

या बस Xcode वरीयताओं में जाओ -> स्थान और जाँच / कमांड लाइन उपकरण को Xcode 9.1 में बदलें। आपको तब सेट किया जाना चाहिए।


1
मैंने व्युत्पन्न डेटा को भी मंजूरी दे दी, और परियोजना को साफ कर दिया, पता नहीं कि सभी के लिए आवश्यक हो, लेकिन यहां ऐसा प्रतीत हो रहा था। धन्यवाद
साइमन

3
हाय @ ज़िग। एक रेपो जिसका उपयोग मैं गितुब पर करता हूं (mattdonnelly / swifter) स्विफ्ट 4.0 पर है, लेकिन स्पष्ट रूप से XCode 9.0 का उपयोग करके संकलित किया गया है, इसलिए मुझे यह समस्या हो रही है। XCode 9.1 और इसके बाद के संस्करण के लिए गीथब पर किसी और के कोको को फिर से जोड़ने के लिए क्या कदम उठाने की आवश्यकता है?
जोसेफ ने 'मम

1
वहाँ कमांड लाइन उपकरण जोड़ने का एक तरीका है? मेरे पास मेरी कमांड लाइन ड्रॉपडाउन में सिर्फ Xcode 9.3 है। और मुझे यह समस्या भी है
तारा टंडेल

1
मेरी फली से कुछ स्विफ्ट 4.2 के लिए तैयार नहीं हैं, इसलिए मैं पिन करने के लिए किया था Swift Language Versionकरने के लिए Swift 4उन लोगों के लिए। फिर काम हुआ।
Skofgar

1
बिल्ड फोल्डर को साफ करने के लिए शॉर्टकट के लिए प्लस 1 - ऐसा कुछ नहीं था जिसे मैं जानता था कि मुझे कैसे करना है।
मैट

25

मेरा मुद्दा स्विफ्ट 4.0.2 के लिए एक बाहरी ढांचे के संकलित नहीं होने के कारण था। मैंने कार्टहाज के माध्यम से इस फाइल को जोड़ा था , इसलिए चल रहा है:

carthage update --platform iOS

और फिर प्रोजेक्ट को साफ करना cmd + shift + kऔर फ़ोल्डर बनाना cmd + option + shift + kऔर व्युत्पन्न डेटा फ़ोल्डर को हटाना (केवल इसे रद्दी कार्यों में स्थानांतरित करना) मेरे लिए काम किया।


2
वास्तव में, यह अनिवार्य रूप से समाधान है। ऐप्पल के नवीनतम स्विफ्ट अपडेट के कारण आज (18 अप्रैल) को वही हुआ! :)
फेटी

cmd + ऑप्शन + शिफ्ट + के कार्टाज को अपडेट करने के बाद क्या किया। धन्यवाद!
लियोनार्डो लेइट

15

मेरे मामले में, मैंने SwiftUI का परीक्षण करने के लिए xCode 11 बीटा संस्करण डाउनलोड किया। जब मैं अपना प्रोजेक्ट चलाता हूं, तो मुझे "स्विफ्ट 5.1 के साथ संकलित किया गया मॉड्यूल स्विफ्ट 5.0.1 संकलक द्वारा आयात नहीं किया जा सकता है: ..." त्रुटि।

इस समस्या को ठीक करने के लिए। मैंने xCode कमांड लाइन टूल को नए xCode 11 कमेंट लाइन टूल में बदल दिया। उसके बाद, आप SwiftUI के साथ नया xcode प्रोजेक्ट बना सकते हैं।

Xcode -> प्राथमिकताएं -> स्थान -> XCode कमांड लाइन टूल

Xcode कमांड लाइन उपकरण

मुझे उम्मीद है, यह किसी ऐसे व्यक्ति की मदद करेगा जो नए freamework के साथ परीक्षण करना चाहते हैं :)


9

विशिष्ट Xcode संस्करण का Xcode Toolchain स्थापित करें जो आपके लिए यहां से काम कर रहा था ।

एक Xcode टूलचैन में स्विफ्ट के एक विशिष्ट संस्करण में काम करने के लिए एक सुसंगत विकास अनुभव प्रदान करने के लिए संकलक, एलडीबी और अन्य संबंधित उपकरणों की एक प्रति शामिल है।

Xcode की प्राथमिकताएं खोलें, घटक> Toolchains पर जाएं, और स्थापित स्विफ्ट टूलचैन चुनें।

यह आपको ऐप को अभी संकलित और चलाने देगा।


कार्टाजेज अपडेट, बूटस्ट्रैप, तेज भाषा सेटिंग्स आदि के साथ हर संभव समाधान की खोज और कोशिश करने के बाद, मुझे यहां सही उत्तर मिला :)
मेमरेसुबासी

7

मैंने Xcode 10 बीटा के साथ इस मुद्दे को मारा, जो स्विफ्ट 4.2 जोड़ता है। मेरा मुद्दा कार्थेज या किसी भी बाहरी निर्भरता से संबंधित नहीं था।

YourTarget > Build Settings > Swift Language Versionअपने सभी Xcode लक्ष्यों के लिए जाएं ।

मेरा सब कुछ करने के लिए तैयार थे Swift 4

कॉपी फाइल्स बिल्ड फेज को जोड़ने के बाद, मुझे त्रुटि मिलनी शुरू हो गई

: 0: त्रुटि: स्विफ्ट 4.1.2 के साथ संकलित मॉड्यूल को स्विफ्ट 4.2 कंपाइलर द्वारा आयात नहीं किया जा सकता: MyAppExtension.build/Objects-normal/x86_64/MyClass~partial.swiftmodule

कमांड मर्जस्विफ्टमॉडल एक नॉनजरो एक्जिट कोड के साथ विफल हो गया

मैंने तब प्रत्येक लक्ष्य निर्धारित Swift Language Versionकिया Swift 4.2, जिसने त्रुटि को समाप्त कर दिया।

मुझे यकीन नहीं है कि पहली जगह में त्रुटि क्यों हो रही थी, हालांकि, जैसा कि सभी लक्ष्यों को निर्धारित किया Swift 4जाना चाहिए, उतना ही मान्य होना चाहिए।


1
मुझे ढूंढने में Build Settings
दिक्कत

@ पहले अपने लक्ष्य पर क्लिक करें। अद्यतन उत्तर।
pkamb १०'१

3

मेरे मामले में (Xcode 9.2):

मैं Xcode गया Preferences > Locations > Derived Data

मैंने तब डेटा को हटा दिया और एक साफ निर्माण किया और ठीक था।


1

मेरे मामले में, मैंने cocoapods-binaryपुस्तकालयों को बायनेरिज़ बनाने के लिए प्लगइन के साथ कोकोआपोड्स का उपयोग किया । 10 से 11 तक Xcode अपग्रेड करने के बाद, Xcode मुझे यह त्रुटि देता है:

Module compiled with Swift 5.0.1 cannot be imported by the Swift 5.1 compiler

मैं /Podsनिर्देशिका को हटाकर और इसे चलाकर ठीक करता हूं pod install


0

मेरे मामले में, मैंने जिस भी संस्करण के बारे में शिकायत की थी, उसके साथ रूपरेखा को फिर से संकलित किया।

पुन: pod updateव्यवस्थित करने के लिए, कार्टेज को चलाएं या अपडेट करें (जो कभी आप उपयोग कर रहे हैं), और प्रोजेक्ट का निर्माण करें।

फिर खोजक में रूपरेखा की खोज करें। theFramework.frameworkअपने प्रोजेक्ट पर कॉपी-पेस्ट करें और "यदि आवश्यक हो तो आइटम कॉपी करें" सुनिश्चित करें कि प्रोजेक्ट को फिर से बनाएं और इसे काम करना चाहिए।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.