17
votes

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?

6
Note: had same issue and Clean & Rebuild my project fixed the problem, I didn't have to edit PodfileHussein

6 Answers

24
votes

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
19
votes

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à!

5
votes

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

Command+Option+Shift+K

or

Product -> Option+Clean

2
votes

Just deleting Derived data worked for me, no need to do Pod install again

0
votes

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?

0
votes

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