简体   繁体   中英

Module compiled with swift 4.0 cannot be imported in swift 3.1

Apparently I have managed to build my project in Xcode 9 beta and now I only get the error

Module compiled with swift 4.0 cannot be imported in swift 3.1

When I run the project in Xcode 8. The module in my case are Alamofire. I have tried to restart Xcode but nothing happens any ideas how to solve this issue?

You have two options that you can do:

Clean the project and then try to re-build your solution and see if it works.

If it don´t work and you still get the same error message then do the following steps and it should work for you:

  1. Open your podfile and remove Alamofire
  2. Run pod update
  3. Re-add Alamofire to your podfile
  4. Run pod update
  5. When this is done, clean your project and run it

Same problem here but using Carthage. And here is the answer:

  • rm -rf ~/Library/Caches/org.carthage.CarthageKit/DerivedData
  • delete the Carthage folder for the project
  • Update Carthage: carthage update --platform iOS

And voilà!

I had the same problem and cleaning the build folder helped:

Command+Option+Shift+K

or

Product -> Option+Clean

只是删除派生数据为我工作,无需再次安装Pod

I met this problem in a project where dependency is managed by Carthage. In my case, I didn't set command line tool in xcode (Type in xcodebuild -version, you will know whether you set it up or not), so first step is to go to XCode --> Preference --> Locations then select the xcode you want to serve as command line tool. Then you can follow the steps that @Domsware mentioned above to rebuild all frameworks you are gonna use.

===============================================

Same problem here but using Carthage. And here is the answer:

rm -rf ~/Library/Caches/org.carthage.CarthageKit/DerivedData
delete the Carthage folder for the project
Update Carthage: carthage update --platform iOS

===============================================

Then don't forget to delete old links under 'Linked frameworks and libraries' and drag all frameworks from /Carthage folder under you project to 'Linked frameworks and libraries'.

Then voilà!

For those who are using CocoaPods, I suspect (Disclaimer: I didn't encounter this problem in project where CocoaPods is the dependency manager) the solution would be run the following command in terminal:

$ pod deintegrate
$ pod clean
$ pod install

where you might need to install 'deintegrate' and 'clean' tool for CocoaPod

$ sudo gem install cocoapods-deintegrate cocoapods-clean

more details see post How to remove CocoaPods from a project?

Add following lines at the end of your pod file:

post_install do |installer|
    print "Setting the default SWIFT_VERSION to 4.0\n"
    installer.pods_project.build_configurations.each do |config|
        config.build_settings['SWIFT_VERSION'] = '4.0'
    end

    installer.pods_project.targets.each do |target|
        if ['SomeTarget-iOS', 'SomeTarget-watchOS'].include? "#{target}"
            print "Setting #{target}'s SWIFT_VERSION to 3.0\n"
            target.build_configurations.each do |config|
                config.build_settings['SWIFT_VERSION'] = '3.0'
            end
        else
            print "Setting #{target}'s SWIFT_VERSION to Undefined (Xcode will automatically resolve)\n"
            target.build_configurations.each do |config|
                config.build_settings.delete('SWIFT_VERSION')
            end
        end
    end
end

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM