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


79

Xcode 9 में अपडेट करने के बाद, मैंने अपनी एक परियोजना बनाने की कोशिश की।

मैं FacebookLogin फली का उपयोग करता हूं । मुझे FacebookLogin / LoginButton.swift में एक कंपाइलर त्रुटि है

@testable import FacebookCore
❌ Module compiled with Swift 3.1 cannot be imported in Swift 4.0

मेरे लक्ष्य की बिल्ड सेटिंग्स में, स्विफ्ट भाषा संस्करण 3.2 स्विफ्ट पर सेट है ।

स्क्रीनशॉट जोड़ा गया

मुझे लगता है कि मुझे अपने पॉड को अपडेट करने के लिए फेसबुक का इंतजार करने की आवश्यकता है? या कोई और सुझाव?

धन्यवाद !


आप उस लोक को आजमा सकते हैं।
जेरीझोउ

जवाबों:


73

अपडेट करें:

समाधान भी परीक्षण और स्विफ्ट 5 और एक्सकोड 11 में काम कर रहा है।

मूल:

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

sudo xcode-select --switch /Applications/Xcode-beta.app/Contents/Developer

Xcode 9 कमांड लाइन टूल का उपयोग करने के लिए, फिर आप चला सकते हैं:

carthage update NameOfTheLibrary --platform iOS --no-use-binaries

यह आपके वर्तमान कमांड लाइन टूल के साथ लाइब्रेरी को संकलित करेगा, यह थोड़ा धीमा हो सकता है लेकिन अब परियोजना का निर्माण करना चाहिए।

ध्यान दें

अपने स्थिर Xcode कमांड लाइन टूल को वापस लाने और उपयोग करने के लिए बस चलाएं:

sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer

1
मुझे अल्गोलिया ढांचे का उपयोग करने में एक ही त्रुटि थी, और इसे कार्टेज और एक्सकोड 9 कमांड टूल के साथ ठीक काम किया! धन्यवाद
vmeyer

3
SwiftyJson का उपयोग करके मेरे लिए काम किया। धन्यवाद!
लींड्रोडेमारको

2
मेरे लिए काम किया Alamofire का उपयोग कर
पचुन

हाय @xaviPedrals, मुझे आपकी सहायता की आवश्यकता है ... Im उस परियोजना को चलाने की कोशिश कर रहा हूं " github.com/swiftingio/SingTest " लेकिन उस त्रुटि को प्राप्त करने में "स्विफ्ट 3.1 के साथ संकलित मॉड्यूल स्विफ्ट 4.2.1 बायलर द्वारा आयात नहीं किया जा सकता है: / उपयोगकर्ता / aliapple / Desktop / SingTestByAhtazaz / Pods / AudioKit / iOS / AudioKit.framework / Modules / AudioKit.swiftmodule / arm64.swiftmodule "। क्या आप इसमें मेरी मदद कर सकते हैं?
अष्टाज़

हाय @ Mr.Aazazaz कि परियोजना 2 साल पहले से है, इसलिए शायद इसे स्विफ्ट 3 में बनाया और संकलित किया गया था, पहले परियोजना को स्विफ्ट 4 या 5 में अपडेट किया जाना चाहिए, फिर carthage update NameOfTheLibrary --platform iOS --no-use-binariesपुस्तकालयों को अपडेट करने के लिए कार्टेज कमांड चलाने की कोशिश करें और आपको ठीक करना चाहिए
xavi.pedrals

26

Xcode 9 एक स्विफ्ट 4 कंपाइलर के साथ आता है जो स्विफ्ट 3.2 और स्विफ्ट 4 दोनों को समझता है, यह आपको 2 संस्करणों के बीच मिश्रण और मिलान करने देता है। दुर्भाग्य से, अन्य संस्करण समर्थित नहीं हैं।

यहां तक ​​कि अगर आप अपनी भाषा को स्विफ्ट 3.2 पर सेट करते हैं, तो भी यह स्विफ्ट 4 संकलक का उपयोग करता है।

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

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

वैकल्पिक रूप से, आप अपने प्रोजेक्ट में सीधे पॉड से फ़ाइलों को अस्थायी रूप से डाल सकते हैं, जब तक कि FacebookLogin को Swift 3.2 या 4 में अपडेट नहीं किया जाता है।

नोट: मैट की प्रतिक्रिया के आधार पर संपादित


1
FYI करें - यह स्विफ्ट 4.0 के लिए सभी पॉड्स को मजबूर करके कुछ हद तक आक्रामक है। यदि एक पॉड स्विफ्ट 3 अनुरूप है, तो आप सुरक्षित रूप से 3.2 स्विफ्ट को टक्कर दे सकते हैं। 4.0 से बंपिंग कई पॉड्स के लिए संकलक मुद्दों की संभावना से अधिक होगा।
मैट एस।

19

शायद आप इसे बनाने से पहले लक्ष्य को साफ कर सकते हैं। यह मेरे लिए ठीक काम करता है।


7
मेरे लिए काम नहीं किया, अभी भी एक और समाधान के लिए देख रहे हैं।
अरनौद

11

मैं Xcode 9 बीटा 3 पर एक ही मुद्दे में भाग गया, जो 'अलामॉफायर' की ओर इशारा करता है और कुछ अलग-अलग समाधानों की कोशिश करता है, जो मुझे सबसे आसान लगता है

1. CMD+SHIFT+K to clean the build
2. Restart Xcode 9 <-- make sure you do this step, that's critical. `

11
यह 2017 है और हमें अभी भी बग को हल करने के लिए Xcode को पुनरारंभ करने की आवश्यकता है। धन्यवाद, Apple। धन्यवाद।
ऊदबिलाव

10

एक "क्लीन बिल्ड फ़ोल्डर" करने और Xcode 9 को पुनरारंभ करने से मेरे लिए त्रुटि साफ हो गई। इसके अलावा त्रुटि ने ऐप को मेरे डिवाइस या सिम्युलेटर पर चलने से नहीं रोका।


1
"क्लीन बिल्ड फोल्डर": विकल्प को एक्सेस करने के लिए उत्पाद मेनू खोलें और क्लीन बिल्ड फोल्डर विकल्प दिखाने के लिए विकल्प कुंजी का उपयोग करें।
हंस

8

गोटो xcode DerivedData निर्देशिका तो इसके अंदर सभी फ़ाइल को हटा दें और अपनी परियोजना को फिर से शुरू करें। यह मेरे लिए काम करता है।

और डिफ़ॉल्ट DerivedData निर्देशिका है: ~ / पुस्तकालय / डेवलपर / Xcode / DerivedData।


8

अगर कार्थेज , ओपन टर्मिनल और;

carthage update --platform iOS --no-use-binaries

यदि पोड , ओपन टर्मिनल और का उपयोग कर ;

pod update

(यदि पॉड में काम न करें, तो आप पॉडफाइल में SWIFT_VERSION बदल सकते हैं। Ex:

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

)

उपरांत;

Xcode खोलें और उपयोग करें;

Command+Option+Shift+K

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


1
कृपया कई प्रश्नों के समान उत्तर न दें। एक अच्छा उत्तर पोस्ट करें, फिर डुप्लिकेट के रूप में अन्य प्रश्नों को बंद करने के लिए वोट / ध्वज दें। यदि प्रश्न डुप्लिकेट नहीं है, तो प्रश्न के अपने उत्तरों को दर्जी करें। Meta.stackexchange.com/q/104227/311792
paper1111

@ paper1111 मैं अपने जवाब और कार्यों में सब कुछ समझाता हूं
स्विफ्टड्यूपर

मैं कार्थेज का उपयोग कर रहा हूं और यह वह समाधान है जो मेरे लिए काम करता है। कार्टेज अपडेट "माय फ्रेमवर्क" ने इसे नहीं काटा। मुझे पूरे कार्टाजेज कैटलॉग को अपडेट करना था। हमेशा के लिए ले लिया लेकिन चाल चली।
मटन गुटमैन

1
इस समाधान ने भी मेरे लिए काम किया। डबल सुनिश्चित करने के लिए सुनिश्चित करें कि आप कमांड + ऑप्शन + शिफ्ट + के साथ बिल्ड फोल्डर को साफ करने के बाद एक्सकोड को बंद करें और पुनः लोड करें।
टॉरस्टेन ओजापर्व

@SwiftDeveloper config.build_settingsभाग कहाँ जाता है ?
एड्रियन

4

इससे मेरा काम बनता है।

1. Xcode 8 में अपने प्रोजेक्ट पर क्लिक करें

2. Xcode 9 में अपना प्रोजेक्ट चलाएं या चलाएं


3

मैंने Xcode 9 में प्रोजेक्ट को साफ किया, और फिर ऐप को चलाया, यह काम करता है।


2

मुझे Xcode 9 GM के साथ भी यही समस्या थी और इससे मेरी समस्या हल हो गई: इसे प्रोजेक्ट से हटा दें और फिर से "एंबेडेड बायनेरीज़" में खींचें।


मेरे पास Alamofire 4.5.1 के साथ समस्या थी और इस पृष्ठ पर बाकी सभी चीजों की कोशिश की, pod updateलेकिन परिणाम के बिना। अंत में मैंने अपने प्रोजेक्ट में सीधे फ्रेमवर्क को शामिल किया और इसे अपने एंबेडेड बायनेरिज़ में जोड़ा, जो काम करता था
हेकी


1

मेरे पास है

pod 'FBSDKCoreKit'
pod 'FBSDKLoginKit'
pod 'FBSDKShareKit'

मेरे प्रोजेक्ट में और import FBSDKLoginKit, लक्ष्य की सफाई के बाद मेरे पास कोई मुद्दा नहीं था

चूंकि आप जिस पॉड का उपयोग कर रहे हैं वह स्विफ्ट में है और एक बीटा पॉड है, यह संभावना है कि आपके पास स्विफ्ट 4 कंपाइलर के साथ कुछ मुद्दे होंगे, आपको समय के लिए पॉड के उद्देश्य-सी संस्करण का उपयोग करना चाहिए


0

यदि आप फली से उपयोग करते हैं:

  1. में Podfileटिप्पणी FacebookLogin फली
  2. फली स्थापित करें

  3. में Podfileटिप्पणी हटाएं FacebookLogin फली
  4. फली स्थापित करें

  5. अपना प्रोजेक्ट फिर से चलाएं

0

मेरे मामले के लिए - वास्तविक पॉड ने प्रीबीबिल्ट बायनेरिज़ के साथ एक स्थिर ज़िप को संदर्भित किया जो कि स्विफ्ट 3.1 को लक्षित करता है। तो केवल समाधान xcode 9 से स्रोत के साथ ढांचे का पुनर्निर्माण करना है।

https://github.com/AudioKit/AudioKit/issues/980


मेरे पास एक समान मुद्दा है AudioKit को पॉड्स के अंदर संदर्भित किया जा रहा है। हालाँकि, आपका समाधान 'फ्रेमवर्क' में पाए गए build_frameworks.sh को संदर्भित करता है कृपया अधिक विवरण जोड़ें। मुझे ऐसी कोई फ़ाइल नहीं मिली।
टॉम 50

एक नए रिलीज के लिए पॉडफाइल को इंगित करने का प्रयास करें। एक संस्करण जो नवीनतम xcode 9 के साथ बनाया गया है - / कोई बिल्ड स्क्रिप्ट परिवर्तन की आवश्यकता नहीं है। github.com/AudioKit/AudioKit/releases
जॉन्डपॉप

पारितोषिक के लिए धन्यवाद। मुझे कोकोपॉड्स में AudioKit वर्जन को लेटेस्ट अपडेट करना था, जिसमें build_frameworks.sh था। Apple को ऐप को खारिज करने से रोकने के लिए Build_frameworks.sh को AudioKit को 'मान्य' करने की आवश्यकता थी।
टॉम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.