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




cocoapods facebook-login (10)

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

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

@testable import FacebookCoreModule compiled with Swift 3.1 cannot be imported in Swift 4.0

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

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

धन्यवाद !


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 में अपडेट नहीं किया जाता है।

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


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

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

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

pod update

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

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

)

बाद;

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

Command+Option+Shift+K


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


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

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


मेरे पास है

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

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

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


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

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


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


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

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

  3. Podfile FacebookLogin फली
  4. फली स्थापित करें

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

साफ बिल्ड फ़ोल्डर

Cmd + option + shift + K

अद्यतन करें:

समाधान भी परीक्षण और स्विफ्ट 4.2 और Xcode 10 में काम कर रहा है।

मूल:

मैं यह जोड़ना चाहूंगा कि यदि आप स्विफ्ट 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




swift4