Module compiled with Swift 4.0 cannot be imported in Swift 4.0.1
Asked Answered
R

9

92

However I have recompiled the framework using the same Xcode and it still gives me this error.

  • Base SDK iOS 11.1 for both
  • Swift Language Version Swift 4.0 for both
  • Not using Pods/Carthage

I hope someone might know

Retrieve answered 13/10, 2017 at 8:53 Comment(2)
It seems that Apple needs to reconsider that 10 year deprecation notice for Objective C :^) This has bitten me on >1 project now and on both these are 3rdparty binary frameworks.Intervene
https://mcmap.net/q/16462/-module-compiled-with-swift-4-2-1-cannot-be-imported-by-the-swift-5-0-compilerAjaajaccio
A
142

Update:

For release versions of Xcode:

This error (and similar errors involving Swift 4.1, 4.2, etc.) will occur when opening a project with Xcode 9.1, 9.2, 9.3, 9.4, 10, etc. that uses frameworks that were built with earlier Xcode tools.

To fix the issue, update and rebuild your frameworks using Carthage ( carthage update --platform iOS), Cocoapods (pod update or pod install), or manually, with the new updated Xcode tools. The tools should be updated automatically when you update Xcode, but if not, you can follow the steps outlined below in the original answer.

You may also need to clean your project cmd + shift + k and possibly your build folder cmd + option + shift + k to get Xcode to not use cached framework builds.

In some cases you may also need to delete your derived data folder (Easily found by going to Xcode Preferences -> Locations -> Derived Data Folder (Thanks Stunner)

For beta versions of Xcode:

See original answer below and then follow steps above.

Original Answer:

You probably still have your xcodebuild tools set to Xcode 9.0 which builds with Swift 4.0 and is incompatible with Xcode 9.1 beta's Swift 4.0.1.

Check in the terminal using the command:

xcodebuild -version

Or just go into Xcode preferences -> Locations and check/change the command line tools to Xcode 9.1. You should be set then.

Amoreta answered 13/10, 2017 at 23:2 Comment(8)
I also cleared Derived data, and cleaned the project, don't know if necessary for everyone but here it seemed to be. ThanksRetrieve
Hi @Zig. A repo I use on github (mattdonnelly/swifter) is at Swift 4.0, but has obviously been compiled using XCode 9.0, so I'm getting this problem. What are the steps needed to recompile someone's else cocoapod on Github for XCode 9.1 and above?Langue
is there a way to add command line tool? I just have Xcode 9.3 in my command line dropdown. and I have this problem tooMisdate
Some of my pods aren't ready for Swift 4.2, hence I had to pin the Swift Language Version to Swift 4 for those. Then it worked.Stony
Plus 1 for the shortcut for cleaning the build folder--wasn't something I knew how to do offhand.Pacifist
I'm having this issue after upgrading to Xcode 10.2 (which introduces Swift 5). My build settings still say "Swift 4.2" and I rebuilt all my Carthage/Cocoapods dependencies, but the issue persists...Dewayne
Worked for me with Xcode 11 with error (swift 5) and swift 5.1Alvaalvan
After updating Xcode to 12.5 I got the error in my Swift 5 project for a Swift 4 libary (Cocoapods) that's been working fine. There's no update for it, so I just cleaned the project and now the error's gone again.Resendez
C
27

My issue was due to an external framework not being compiled for Swift 4.0.2. I had added this file via Carthage, so running:

carthage update --platform iOS

And then cleaning the project cmd + shift + k and build folder cmd + option + shift + k and deleting the derived data folder (merely moving it to trash works as well) worked for me.

Corniculate answered 1/11, 2017 at 9:23 Comment(2)
indeed, this is essentially the solution. The same thing just happened today (April 18), due to Apple's latest swift update! :)Giustino
cmd + option + shift + k is what did the trick after updating Carthage. Thanks!Coit
R
15

In my case, I downloaded xCode 11 Beta version to test SwiftUI. When i run my project, i got "Module compiled with Swift 5.1 cannot be imported by the Swift 5.0.1 compiler:..." error.

To do fix this issue. i changed xCode command line tool to new xCode 11 comment line tool. After that, you can create new xcode project with SwiftUI.

Xcode -> Preferences -> Location -> XCode command Line Tool

Xcode Commend Line Tool

i hope, this will help someone who want to test with new freamework :)

Rightful answered 15/6, 2019 at 20:44 Comment(0)
S
9

Install Xcode Toolchain of specific Xcode version which was working for you from here.

An Xcode toolchain includes a copy of the compiler, lldb, and other related tools needed to provide a cohesive development experience for working in a specific version of Swift.

Open Xcode's Preferences, navigate to Components > Toolchains , and select the installed Swift toolchain.

This will let you compile and run the app for now.

Shelia answered 19/1, 2018 at 20:43 Comment(1)
After 2 days of searching and trying every possible solution with carthage update, bootstrap, swift language settings etc. I found the right answer here :)Wilfredowilfrid
S
7

I hit this issue with Xcode 10 beta, which adds Swift 4.2. My issue was unrelated to Carthage or any external dependencies.

Go to YourTarget > Build Settings > Swift Language Version for all of your Xcode targets.

Mine were all set to Swift 4.

After adding a Copy Files Build Phase, I started getting the error

:0: error: module compiled with Swift 4.1.2 cannot be imported by the Swift 4.2 compiler: /Users/user/Library/Developer/Xcode/DerivedData/MyApp-faskfrihumfcdibjxisjvbfshppp/Build/Intermediates.noindex/MyApp.build/Debug/MyAppExtension.build/Objects-normal/x86_64/MyClass~partial.swiftmodule

Command MergeSwiftModule failed with a nonzero exit code

I then set each target's Swift Language Version to Swift 4.2, which eliminated the error.

I'm not sure why the error was occuring in the first place, though, as having all targets set to Swift 4 should be equally as valid.

Staunch answered 31/7, 2018 at 20:45 Comment(2)
I'm having trouble finding Build SettingsTegular
@Tegular click on your Target first. Updated answer.Staunch
B
3

In my case (Xcode 9.2):

I went to Xcode Preferences > Locations > Derived Data

I then deleted the data and did a clean build and was ok.

Birdbath answered 22/3, 2018 at 11:43 Comment(0)
J
1

In my case, I used CocoaPods with plugin cocoapods-binary to prebuild libraries to binaries. After I upgrade Xcode from 10 to 11, Xcode gives me this error:

Module compiled with Swift 5.0.1 cannot be imported by the Swift 5.1 compiler

I fix it by removing the /Pods directory and running pod install.

Jacquelynejacquelynn answered 21/9, 2019 at 2:12 Comment(0)
M
0

In my case, I re-compiled the framework with whatever version it was complaining about.

To recompile, run pod update or update the carthage (which ever one you're using), and build the project.

Then search for the framework in finder. Copy-paste the theFramework.framework to your project and make sure to "Copy items if needed."Build the project again and it should work.

Munroe answered 15/7, 2020 at 1:22 Comment(0)
G
0

I fixed this with a few basic steps

  • Close Xcode
  • pod deintegrate
  • Open Xcode workspace
  • Command + Shift + K - Clean
  • Command + B - Build
Gamone answered 10/3, 2023 at 3:11 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.