61
votes

I have a problem

@import Foundation;

and I see:
@import vs #import - iOS 7

and I set "Enable Modules" to "YES"

and my problem is not solved

4
What is your problem?dan
Your question is surely your answer? I thought that you had to enable modules to be able to use @import?SunburstEnzo
Unfortunately @import is not supported yet for .mm files or rather Objective-C++ (I tested with both g++ and clang++ as I really wanted to make this work).Top-Master

4 Answers

95
votes

I got this warning in a zero-swift project whenever I tried to add the @import SafariServices; statement.

Solution: Enable the modules. Go to the Target > Build Settings and set the Enable Modules (C and Objective-C modules) to YES.

I've circled the Build Settings toggle to change.

OR

Note: I haven't verified this potential solution, but probably worthy of consideration if there are side effects caused by this solution.

Rather than enabling modules to entire project, we can enable modules for a specific file which is importing c++ file. Go to build phases -> Compile Sources -> Select the file -> Add compiler flag -fmodules

38
votes

The possible cause is that you use Objective-C++. Then modules get disabled despite the proper build settings.

20
votes

I've been mixing ObjC, ObjC++, C++, and Metal. Whenever I get the "use of @import when modules are disabled" I try replacing:

@import Name; 

with:

#import "Name/Name.h"

example, replace:

@import Metal;
@import MetalKit;
@import CoreVideo;

with:

#import "Metal/Metal.h"
#import "MetalKit/MetalKit.h"
#import "CoreVideo/CoreVideo.h"

It seems to work.

11
votes

Check if you are using #import "ProductName-Swift.h" somewhere in .mm files or any other files other than objc files.

Because if you use this import in cpp files then modules gets disabled automatically.