स्विफ्ट 5.1 के साथ संकलित मॉड्यूल को स्विफ्ट 5.1.2 कंपाइलर द्वारा आयात नहीं किया जा सकता है


91

मेरे पास एक फ्रेमवर्क है (इस उदाहरण में यह RxSwift है) जिसे मैंने पारंपरिक RxSwift.frameworkशैली पैकेज में Xcode 11.0 का उपयोग करके संकलित किया है

इसने Xcode 11.0 में ठीक आयात किया और 11.1 को भी इसके साथ कभी कोई समस्या नहीं हुई

आज, Apple की Xcode 11.2 की रिलीज पर, मैंने अपग्रेड किया, और मुझे त्रुटि के साथ प्रस्तुत किया गया है:

स्विफ्ट 5.1 के साथ संकलित मॉड्यूल को स्विफ्ट 5.1.2 कंपाइलर द्वारा आयात नहीं किया जा सकता है

मैं संकलक मिसमैच को स्विफ्ट करने के लिए उपयोग किया जाता हूं, और मुझे पता है कि मैं Xcode 11.2 का उपयोग करके RxSwift को फिर से शुरू कर सकता हूं और आगे बढ़ सकता हूं, लेकिन स्विफ्ट 5.1 की हेडलाइन सुविधा मॉड्यूल स्थिरता थी

मैं इस धारणा के तहत था कि अब हमारे पास मॉड्यूल स्थिरता है, फ्रेमवर्क को हर नए Xcode रिलीज के साथ फिर से जोड़कर रखने की आवश्यकता नहीं होगी, फिर भी यह स्पष्ट रूप से ऐसा नहीं है।

अगर कोई समझा सकता है कि यहां क्या चल रहा है तो मैं इसकी सराहना करूंगा। क्या Xcode 11.2 बग का प्रदर्शन कर रहा है? या मुझे किसी तरह यह बताने की ज़रूरत थी कि मैं मॉड्यूल स्थिरता चाहता था जब मैं मूल रूप से Xcode 11.0 के साथ संकलित किया गया था?



मेरे लिए पुराने स्विफ्ट संस्करण के साथ
टूलचेन

जवाबों:


107

ठीक है, अगर आप WWDC वीडियो देखते हैं, तो वे इसे बताते हैं: https://developer.apple.com/videos/play/wwdc2019/416/

आपको अपने फ्रेमवर्क की बिल्ड सेटिंग्स में हां में हां , डिस्ट्रीब्यूशन विकल्प के लिए बिल्ड लाइब्रेरी सेट करने की जरूरत है , अन्यथा स्विफ्ट कंपाइलर नेक्सेसरी फाइल्स जेनरेट नहीं करता है जो कि आपके पुराने लाइब्रेरी को लोड करने में सक्षम होने वाले फ्यूचर कंपाइलर्स की कुंजी है।.swiftinterface

यह आपकी परियोजना में समाप्त होता है।

BUILD_LIBRARY_FOR_DISTRIBUTION = YES;

इस ध्वज को सेट करने के बाद, मैंने Xcode 11.0 (स्विफ्ट 5.1) का उपयोग करके संकलित किया गया फ्रेमवर्क Xcode 11.2 (स्विफ्ट 5.1.2) का उपयोग करने में सक्षम था और सब कुछ सही ढंग से काम करता प्रतीत होता है।

उम्मीद है कि यह प्रश्न / उत्तर उन सभी के लिए एक उपयोगी संदर्भ के रूप में काम करेगा, जिन्होंने सभी WWDC वीडियो नहीं देखे हैं

यदि त्रुटि अभी भी बनी रहती है तो उत्पाद > क्लीन बिल्ड फोल्डर और फिर से बिल्ड पर जाएं


1
बहुत बढ़िया! अब चलो उम्मीद करते हैं कि सभी 3 पार्टी फ्रेमवर्क डेवलपर्स को यह पता चलता है - हा हा :)
मिहाई फ्रेटु

25
यह मेरे मामले में मदद नहीं करता है। मैंने इसे "हाँ" पर सेट किया है लेकिन मुझे अभी भी त्रुटि मिल रही है। कोई विचार?
द्विविवाह

3
मैं कार्थेज और 10 फ्रेमवर्क के साथ काम कर रहा हूं ... ईश। क्या यह carthageस्मार्ट मेरी .pbxproj फ़ाइल से लेने के लिए पर्याप्त है , या जैसा कि @MihaiFratu ऊपर कहता है, क्या सभी तृतीय पक्ष फ्रेमवर्क डेवलपर्स को अपनी रूपरेखा परियोजनाओं में इसे स्वयं सेट करने की आवश्यकता है?
nteissler

9
@davidOhara मेरे मामले में इसे Xcode 11.2 में इस ज्ञात मुद्दे के साथ करना था: यदि एक मॉड्यूल BUILD_LIBRARIES_FOR_DISTRIBUTION के साथ बनाया गया है और इसमें एक सार्वजनिक नाम है जिसमें मॉड्यूल स्वयं के समान है, क्लाइंट मॉड्यूल आयात करने में विफल रहेगा। (19481048) (FB5863238) Xcode 11.2 रिलीज नोटों में: developer.apple.com/documentation/xcode_release_notes/…
रिचर्ड चिरिनो

2
@davidOhara दुख की बात है कि मुझे वर्कअराउंड नहीं मिला। हमारे लिए कक्षा का नाम बदलना भी संभव नहीं है क्योंकि यह हमारे ढांचे का मुख्य वर्ग है और हमारे ग्राहक के कोड को तोड़ देगा। अगर मैं Xcode 11.2 का उपयोग करके फ्रेमवर्क का निर्माण करता हूं तो यह Xcode 11.2 पर संकलित करता है लेकिन यह 11.1 या इससे पहले संकलन नहीं करेगा। आज के Xcode 11.2.1 जीएम रिलीज ने इस मुद्दे को तय नहीं किया है। यदि आप इस पर नज़र रखना चाहते हैं, तो यहां स्विफ्ट इशू ट्रैकर पर टिकट है: Bugs.swift.org/browse/SR-11704 इसमें एक रडार भी लगा हुआ है।
रिचर्ड चिरिनो

2

मुझे तीसरी पार्टी लाइब्रेरी आयात करने में एक ही त्रुटि हुई थी। मैंने इसे Xcode में टूलचिन्स का उपयोग करके और सितंबर 19 2019 को https://swift.org/download/#releases से जारी करने का निर्णय लिया । उसके बाद मुझे अपने पुस्तकालयों को फिर से आयात करना पड़ा और इसने काम किया।


यह सबसे सरल समाधान था जो एक गुच्छा का धन्यवाद था
कृष्ण पटेल

मुझे फ्रेमवर्क पर समस्या है स्विफ्ट 5.1.2 के साथ संकलित मॉड्यूल स्विफ्ट 5.2.2 द्वारा आयात नहीं किया जा सकता है हम इस समस्या को कैसे हल कर सकते हैं?
किशन सुथार

0

आप RxSwift फ्रेमवर्क को जोड़ने के लिए Carthage का उपयोग कर सकते हैं।

असल में, कार्थेज आपको एक समान पारंपरिक RxSwift.framework स्टाइल पैकेज देता है

फिर प्रयास करें carthage update --no-use-binaries


डाउनवोट क्योंकि कार्टेज के साथ आप नए संकलक पर अपनी लाइब्रेरी का पुनर्निर्माण कर रहे हैं। प्रश्न स्पष्ट रूप से पिछले कंपाइलर द्वारा निर्मित बाइनरी लाइब्रेरी लोड करने के बारे में है
ओरियन एडवर्ड्स

0

इससे मेरी कंपाइलर त्रुटि दूर हो गई।

  1. carthage bootstrap --platform ios
  2. brew bundle
  3. pod repo update

brew bundle? यह क्या करता है?
Skywinder

डाउनवोट क्योंकि कार्टाज के साथ आप नए संकलक पर अपने पुस्तकालय का पुनर्निर्माण कर रहे हैं। प्रश्न स्पष्ट रूप से पिछले कंपाइलर द्वारा निर्मित बाइनरी लाइब्रेरी लोड करने के बारे में है
ओरियन एडवर्ड्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.