41
votes

I have a VoiceSampler.framework that was built with Xcode 10.3

I am trying to use that framework in Xcode11 in a new project. I have successfully added that framework, but when I write import VoiceSample in AppDelegate, I get the following error:

Module compiled with Swift 5.0.1 cannot be imported by the Swift 5.1 compiler: /Users/apple/Projects/CaptureAppSwift/VoiceSampler.framework/Modules/VoiceSampler.swiftmodule/arm64.swiftmodule

Is there a Build Setting I can tweak in Xcode 11 to make it work? Any other work around?

8
what is VoiceSampler.framework? if it is Carthage then you have to update Carthage.kishan vekariya
VoiceSample.framework is a library from another developer for sampling of MP3 pitch/frequency. I have been using this library with my projects in Xcode 10.3 without any issues. What is Carthage? and how/where do i update Carthage?Bharat Biswal
The problem is with the Xcode as xcode 11 support swift 5.1 and your framework is written in swift 5.0.1 to solve this issue either downgrade your Xcode version to 10.3 or get the latest version of your VoiceSample.framework.Adi.S

8 Answers

30
votes

This problem is caused by the fact that you attempt to embed a pre-compiled framework that was created with a different compiler version.

Currently, pre-compiled frameworks can only be embedded if the compiler versions match! The swift compiler version that is used to compile the project must be the same version that was used to compile the framework.

Hopefully, this restriction will be removed in future Swift / compiler versions... For more information refer to the chapter on "Module Stability" here: https://swift.org/blog/abi-stability-and-more

As already mentioned in one of the comments, the solution to this problem is to up- or downgrade to the appropriate Xcode version. (Or, if possible, recompile the framework with the desired compiler version and then use the same compiler version for your project.)

5
votes

I was getting a similar problem for Sqlite.swift. Doing the following command worked for me:

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

This was suggested here.

5
votes

Just need to set the Build Libraries for Distribution option to Yes in your framework's build settings.

1
votes

As I have already described here, the provider of VoiceSample should rebuild the framework with BUILD_LIBRARY_FOR_DISTRIBUTION = YES;. In such case, you will be able to use VoiceSample with all Swift versions.

1
votes

The following commands resolved the compiler error

  1. carthage bootstrap --platform ios
  2. brew bundle
  3. pod repo update
1
votes

enter image description here If you using React Native to build your App, go to Xcode and click on File->Workspace Settings...-> if you notice there is a small arrow that is the path to the DerivedData folder, click on that and the actual folder will appear with other iOS related folders, DELETE the DerivedData folder and rebuild your App. everything will work smoothly now... thank me later

0
votes

In my case problem will be in carthage. So, I, in Finder, deleted these files from your project's root folder:

Cartfile.resolved, Carthage/

Then started carthage bootstrap --platform iOS(because I didn't need update carthage).

But if you need update carthage so you don't need to remove files. Only write command carthage update --platform iOS fix this problem.

0
votes

You need to set the Build Libraries for Distribution option to Yes in your framework's build settings, otherwise the swift compiler doesn't generate the necessary .swiftinterface files which are the key to future compilers being able to load your old library.

This ends up in your project.pbxproj file as:

BUILD_LIBRARY_FOR_DISTRIBUTION = YES;

After setting this flag, a framework I compiled using Xcode 11.0 (swift 5.1) was able to be compiled with Xcode 11.2 (swift 5.1.2) and everything appears to be working correctly.