Xcode 8 बीटा 3 लिगेसी स्विफ्ट समस्या का उपयोग करें


201

मेरे पास Xcode 8 Beta 3 में एक उद्देश्य-सी परियोजना है 3. अद्यतन करने के बाद से, जब भी मैं निर्माण करने की कोशिश करता हूं मुझे निम्न त्रुटि प्राप्त होती है:

"स्विफ्ट लिफ़्ट भाषा संस्करण का उपयोग करें" (स्विफ्ट_ संस्करण) स्विफ्ट का उपयोग करने वाले लक्ष्यों के लिए सही ढंग से कॉन्फ़िगर करने की आवश्यकता है। स्विफ्ट संस्करण को चुनने के लिए [संपादित करें> कन्वर्ट> टू करंट स्विफ्ट सिंटैक्स…] मेनू का उपयोग करें या बिल्ड सेटिंग को सीधे कॉन्फ़िगर करने के लिए बिल्ड सेटिंग्स एडिटर का उपयोग करें।

क्या किसी ने इसका सामना किया है? चूंकि यह एक उद्देश्य-सी परियोजना है, इसलिए स्विफ्ट को कॉन्फ़िगर करने के लिए कोई बिल्ड सेटिंग नहीं है। मैंने यह भी सुनिश्चित किया है कि कोई भी प्रोजेक्ट निर्भरता या कोकोआपोड्स स्विफ्ट का उपयोग नहीं कर रहा है। एकमात्र उपाय मेरे पास बीटा 2 का उपयोग करना है। किसी भी विचार मैं इस मुद्दे को कैसे ठीक कर सकता हूं?

मुझे यह भी उल्लेख करना चाहिए कि मैं OSX 10.12 बीटा 2 चला रहा हूं।


मैं भी इस मुद्दे पर आ रहा हूँ ...
रॉकडस्विफ्ट

जवाबों:


364

यदि आप कोकोआपोड्स का उपयोग कर रहे हैं और चाहते हैं कि यह हर बार जब आप कर रहे हैं तो स्वचालित रूप से तय हो जाए pod install, तो आप इन पंक्तियों को अपने पॉडफाइल के अंत में जोड़ सकते हैं:

post_install do |installer|
    installer.pods_project.targets.each do |target|
        target.build_configurations.each do |config|
            config.build_settings['SWIFT_VERSION'] = '3.0'
        end
    end
end

EDIT: यदि आप कोकोआडैप v1.1.1 या बाद में उपयोग करते हैं तो यह समस्या अब ठीक हो गई है। ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIESअपने मुख्य प्रोजेक्ट लक्ष्य से सेटिंग हटाना न भूलें ।


24
यदि आप समय के लिए अपने कोडबेस में 2.3 का उपयोग करने की कोशिश कर रहे हैं , तो महान समाधान के 2.3बजाय उपयोग करें 3.0! यह प्रभावी रूप से बनाता है "Use Legacy Swift Language Version"के लिए No (या आप बदल देते हैं तो 2.3यह Yes)। हालांकि इस विकल्प का लाभ हर बार जब आप pod installसेट करते हैं तो यह स्वचालित रूप से होता है! बहुत बढ़िया। मैं देख रहा हूँ SWIFT_VERSIONपर सेट हो जाता है Obj सी के रूप में अच्छी तरह से परियोजनाओं। मुझे लगता है कि कोई प्रतिकूल प्रभाव नहीं हैं?
हर्बल

8
यह बहुत अच्छा है, लेकिन यह काफी परेशान करने वाला है कि स्टैकऑवरफ्लो पर रूबी विशेषज्ञ के बिना, हजारों और लाखों परियोजनाएं एसओएल हैं। मैंने मैनुअली Xcode सेटिंग SWIFT_VERSION को 2.3 में बदल दिया, हर मॉड्यूल में और पॉड प्रोजेक्ट में बिल्ड सेटिंग्स का उपयोग किया, और यह काम नहीं किया, लेकिन यह किया। मतलब छुपा हुआ परेशान करने वाला जादू। मुझे उससे नफरत है।
बेसजेन सेप 18'16

5
मैंने शाब्दिक रूप से सिर्फ इस पर आपको प्रॉप्स देने के लिए लॉग इन किया
डायनासो

1
मेरे पास चार्ट (स्विफ्ट में), AfNetworking और कुछ अन्य Obj-C पॉड्स के साथ एक ओबज-सी परियोजना है। मैंने अपनी पॉड फ़ाइल में स्क्रिप्ट के ऊपर उपयोग किया है। स्विफ्ट से संबंधित सभी त्रुटियां / चेतावनी दूर हो गई हैं लेकिन अब मेरा प्रोजेक्ट AFNetwoking ढांचे को नहीं खोज सकता है।
ibnetariq

1
@ Mr.Bista स्वीकृत समाधान stackoverflow.com/a/38597681/2854405 यह Xcode सेटिंग्स से काम करता है। लेकिन आपको इसे हर एक पोड रेपो के साथ करना पड़ सकता है जो आपके पास हर बार होता है pod install / update। यह समाधान चीजों को तेज करता है। आप अपने Cocoapods संस्करण को अब अपडेट कर सकते हैं: यह इस समस्या को भी ठीक करना चाहिए।
तुललेब

119

मुझे बस इसे ठीक करने का एक तरीका मिला।

प्रोजेक्ट या लाइब्रेरी की बिल्ड सेटिंग्स पर जाएं और स्विफ्ट कंपाइलर संस्करण विशेषता "अनिर्दिष्ट से हां या ना में लिगेसी स्विफ्ट भाषा संस्करण का उपयोग करें" सेट करें।

यहां छवि विवरण दर्ज करें


13
मैं अपने ऑब्जेक्टिव-सी प्रोजेक्ट में इस विकल्प को नहीं देखता
ब्रायन

क्या आपके ओज-सी प्रोजेक्ट में कोई स्विफ्ट प्रोजेक्ट लाइब्रेरी है?
रॉकडस्विफ्ट

2
यदि आप स्विफ्ट और कोकोपोड्स का उपयोग कर रहे हैं, तो कोकोपोड्स में ऊपर की कमांड प्रभावी रूप से ऐसा करती है। यदि आप इसे नहीं बदलना चाहते हैं, तो हर बार जब आप pod installऊपर दिए गए @Tulleb उत्तर का उपयोग करने की सलाह देते हैं।
हर्बल

अब मेरी त्रुटि एक स्व-कक्षा में स्विफ्ट कंपाइलर त्रुटि है
एडुआर्डो ओलिवरोस

1
यह विकल्प अब उपलब्ध नहीं है।
हेमांग

33

मैं इस समस्या को कुछ समय से नजरअंदाज कर रहा हूं और इस बीच सिर्फ अन्य सामान पर काम कर रहा हूं - आखिरकार मुझे अपनी समस्या का समाधान मिल गया।

चूंकि मेरा प्रोजेक्ट ऑब्जेक्टिव-सी है, मुझे लगा कि शायद मैं जो पॉड्स उपयोग कर रहा हूं उनमें से एक स्विफ्ट का उपयोग कर रहा था, मैंने प्रत्येक पॉड की जांच की और उनमें से कोई भी नहीं था।

अंतिम समाधान यह था कि मेरा कोर डेटा मॉडल स्विफ्ट में कोड उत्पन्न करने के लिए सेट किया गया था, भले ही मैं मैन्युअल रूप से उन्हें फ़ाइल> नई> NSManagedObjectSubclass मेनू में उत्पन्न कर रहा हूं। मुझे बस इतना करना था कि इसे ऑब्जेक्टिव-सी में बदल दिया जाए।

स्क्रीनशॉट


1
आपको यह कैसे लगी? Xcode इस बारे में कुछ नहीं कहता है। तुमने मुझे बचाया।
रेयान

2
वास्तव में मेरा समाधान और मेरा उद्धारकर्ता। धन्यवाद! मूर्खतापूर्ण कि कैसे ऐप्पल कोरिडाटा मॉडल को 'स्विफ्टी' बना देता है जब पूरा ऐप ऑब्जेक्टिव-सी होता है ....
Bob de Graaf

18

यह समस्या Xcode-8.1 में भी दिखाई देती है। जब हम एक्सटेंशन या विजेट जैसे नए टारगेट को जोड़ते हैं और थर्ड पार्टी लाइब्रेरी कोकोपोड्स की मदद से नए टारगेट में एकीकृत होती है। पॉड स्थापित करने के बाद । हम ऊपर के रूप में एक ही त्रुटि का सामना कर सकते हैं।

प्रत्येक लाइब्रेरी बिल्ड सेटिंग में उपयोग करें लिगेसी स्विफ्ट भाषा संस्करण बदलें

नहीं

यहां छवि विवरण दर्ज करें


मेरे मामले में सेटिंग का उपयोग करें लिगेसी स्विफ्ट लैंग्वेज वर्जन को हां में हल किया।
जयप्रकाश दुबे

यह सुनिश्चित करने के लिए कि इस मुद्दे पर होने वाले प्रत्येक
परिवाद के लिए

इसने मेरे लिए काम किया। कृपया सुनिश्चित करें कि आप टेस्ट टारगेट के लिए भी ऐसा ही करते हैं
zizutg

@zizutg: - हमें सभी टारगेट में क्रॉस चेक करना है। फिर से इशारा करते हुए धन्यवाद।
श्रावण

9

यदि आप Xcode 8 या उसके बाद का उपयोग कर रहे हैं

  1. बिल्ड सेटिंग्स पर जाएं
  2. उपयोग लीगेसी स्विफ्ट भाषा संस्करण का पता लगाएं
  3. हां - स्विफ्ट 2.3
  4. नहीं - स्विफ्ट 3.0 यहां छवि विवरण दर्ज करें

5

पॉडफाइल के अंत में नीचे कोड जोड़ें।

post_install do |installer|
  installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
      config.build_settings['SWIFT_VERSION'] = '3.0'
    end
  end
end

4

मैं एक ऐसी परियोजना पर काम कर रहा हूं जिसमें मिश्रित उद्देश्य-सी और स्विफ्ट कोड है जो मैंने पहले स्विफ्ट संस्करण 2.3 का उपयोग किया था और स्विफ्ट 3 में अपग्रेड करने के बाद मैं प्रोजेक्ट का निर्माण करने में असमर्थ था। Xcode ने उल्लेखित त्रुटि संदेश के साथ शिकायत की।

जाहिर है, अभी भी मेरी परियोजना में निर्दिष्ट कुछ पुराने स्विफ्ट संस्करण थे। पीपीएक्सएक्सप्रोज फाइल। वहाँ तेजी से 3.0.1 निर्दिष्ट किया गया था:

SWIFT_VERSION = 3.0.1;

जबकि, मैंने पहले से ही 3.0.2 स्थापित किया था:

$ xcrun swift -version
Apple Swift version 3.0.2 (swiftlang-800.0.63 clang-800.0.42.1)
Target: x86_64-apple-macosx10.9

Sooo, मैंने इसे प्रोजेक्ट-pxxproj फ़ाइल में स्विफ्ट संस्करण को बदलकर तय किया:

SWIFT_VERSION = 3.0;

लगता है कि पैच लेवल वर्जन स्पेसिफिक भी विशिष्ट था।


4

मेरे मामले में मेरे पास सिर्फ निम्नलिखित बातें हैं

प्रोजेक्ट लक्ष्य चुनें>> निर्माण सेटिंग पर जाएं => "स्विफ्ट भाषा संस्करण" के लिए खोजें => वर्तमान स्विफ्ट संस्करण को मान दें

यह सब मेरा मुद्दा तय हो गया है

इस छवि का पालन करें


4

मुझे भी यही त्रुटि मिली। मैंने "Use Legacy Swift Language Version" की खोज करने की कोशिश की, लेकिन नहीं मिला। मैं Xcode 8.3.3 का उपयोग कर रहा हूं। बहुत अधिक सर्फिंग करने के बाद और इसके चारों ओर काम करने से मुझे यह समाधान मिला, और इसने मेरे लिए काम किया।यहां छवि विवरण दर्ज करें

Here are the steps.
1=> select your target from Xcode
2=> go to build setting
3=> search for "Swift Language Version"
4=> change it to swift 3. (or accordingly.)

3

यदि आप अपने प्रोजेक्ट में स्विफ्ट के पुराने संस्करण का उपयोग कर रहे हैं या किसी स्विफ्ट 3rd पार्टी में "लिगेसी स्विफ्ट लैंग्वेज संस्करण" का उपयोग "YES" पर करें। "नहीं" यदि आपकी परियोजना वर्तमान स्विफ्ट संस्करण को अपटूडेट करती है। यदि आप अपने स्विफ्ट संस्करण को कॉन्फ़िगर नहीं करते हैं, तो हर अपडेट और इंस्टॉल के बाद, पॉड फ्रेमवर्क को यह निर्दिष्ट करने की आवश्यकता होती है।


2

मुझे वास्तव में "लिगेसी स्विफ्ट" के लिए एक खोज करनी थी ताकि इसे अनिर्दिष्ट से "हां" में बदलने में सक्षम होने के लिए जब मैं बस ऊपर वर्णित अनुभाग तक नीचे स्क्रॉल करूं, तो मैं इसे बदलने में सक्षम नहीं था। मुझे उम्मीद है कि यह किसी की मदद करेगा।


2

मेरा प्रोजेक्ट स्विफ्ट में लिखा है। मुझे वही त्रुटि मिली fastlane। क्या हुआ मेरा Xcode ऑटो-अपडेट था इसलिए मुझे अपने प्रोजेक्ट को Swift 3.0 में अपडेट करना पड़ा। त्रुटियों का एक टन मिला। फिक्सिंग और डिबगिंग में बहुत समय लग रहा था और यह उस समय इसके लायक नहीं था इसलिए मैंने Xcode का एक पुराना संस्करण स्थापित करने का निर्णय लिया। मेरे कोड को 2.3 पर वापस ला दिया। तब fastlane betaकोई काम नहीं कर रहा था। पता चला, मुझे कमांड लाइन टूल को 7.3 पर सेट करने की आवश्यकता है। यहां छवि विवरण दर्ज करें


1

मैं इसी मुद्दे पर चल रहा था और निम्न कार्य करके इसे हल किया था:

प्रोजेक्ट में> सेटिंग बनाएँ:

Always Embed Swift Standard Libraries = $(inherited) Use Legacy Swift Language Version = YES

फिर मेरे पॉडफाइल में:

config.build_settings['SWIFT_VERSION'] = '3.0'

इन तीन सेटिंग्स का उपयोग करके सभी चेतावनियों को हटा दिया गया और मुझे ठीक से संकलन करने की अनुमति दी।

संकलन के लिए सबसे अधिक अस्पष्ट और क्या वास्तव में मिला प्रगति 3.0 3 से Podfile में SWIFT_VERSION बदल रहा था के रूप में सुझाव यहाँ


1

XCode 8 के बाद से, आप स्विफ्ट 2.3 का उपयोग कर सकते हैं, भले ही XCode 8 डिफ़ॉल्ट स्विफ्ट संस्करण के रूप में स्विफ्ट 3.x का उपयोग करता है। स्विफ्ट 2.3 का उपयोग करने के लिए, बस ध्वज का उपयोग करें बिल्ड सेटिंग से YES के लिए लिगेसी स्विफ्ट भाषा संस्करण का उपयोग करें, फिर XCode उस प्रोजेक्ट लक्ष्य के लिए स्विफ्ट 2.3 का उपयोग करेगा।


1

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

आपको इसकी आवश्यकता हो सकती है:

  • अपना पॉडफिल फिर से खोलें
  • जाँच करें कि मंच के लिए लाइन '#' के साथ टिप्पणी नहीं की गई है। यह अंत में कुछ इस तरह दिखना चाहिए:

platform :ios, '10.1' # Put the right version and no #platform here use_frameworks! # For swift pod "MyPod" # Your mean pod :)

  • अपने पॉडफाइल को सहेजें, एक्सकोड बंद करें, और pod installफिर से चलाएं
  • अपना प्रोजेक्ट खोलें

शायद यह सिर्फ इतना ही है।

यदि नहीं, तो आप ऊपर जा सकते हैं ;-)


1

मुझे 8.3.2.2 को अपडेट करने के बाद भी यही समस्या थी, लेकिन विकल्प "लिगेसी स्विफ्ट लैंग्वेज का उपयोग" चला गया था। यह अब बदलने का विकल्प प्रतीत होता है: स्विफ्ट लैंग वर्जन

इस फिक्स का उपयोग अल्मॉफायर और अन्य कामों और सभी कामों के साथ किया जाता है।


1

प्रोजेक्ट के लिए प्रोजेक्ट बिल्ड सेटिंग पर जाएं और टारगेट दो से नीचे करें।

ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES
And
Swift Compiler - Version  = Swift 3

नवीनतम में बदलें Swift 3

त्रुटि हल हो गई।

यदि यह आपकी त्रुटि को हल कर देता है, तो कृपया इसे पसंद करें।


1

Xcode 9 बीटा में। प्रोजेक्ट सेटिंग्स पर जाएं, सेटिंग्स का निर्माण करें, स्विफ्ट भाषा संस्करण की खोज करें। यदि आप स्विफ्ट 3.2 या स्विफ्ट 4 का उपयोग कर रहे हैं तो Xcode 9 में आपको निर्दिष्ट करना होगा।


मेरे पास 9.0b में एक प्रोजेक्ट था, जहां स्विफ्ट 4 को सेट करने का लक्ष्य और प्रोजेक्ट 4 दोनों की त्रुटि बनी रही, स्विफ्ट 3.2 की सेटिंग दोनों ने इसे हटा दिया, और स्विफ्ट 4 पर वापस सेट करना अब ठीक है, इसलिए कोई भी सब कुछ सही कर सकता है और अभी भी एक त्रुटि मिलती है।
हरे_नाग

1

यदि आप अभी भी काम नहीं ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIESकरने के लिए बदलते NOहैं, तो इसका कारण यह है कि xcode समस्या, आपकी समस्या नहीं है। निम्नलिखित चरणों का पालन करें:

1. परिवर्तन ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIESसंपत्ति YESचेतावनी के लक्ष्य पर हो

2. फिर यह बायीं पट्टी पर एक चेतावनी दिखाएगा जो आपको स्विफ्ट 3.0 में बदलने की सलाह देता है

3. फिर से वापस बदलें NO। परियोजना को फिर से बनाएँ, xcode अंत में आपके परिवर्तन का पता लगाएगा NO!

इस मामले में समस्या हल!

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