27

I updated project to Xcode 5 and enabled modules in build settings. However, I see compiler error Unexpected '@' in program when I use @import.

#ifndef __IPHONE_7_0
#warning "This project uses features only available in iOS SDK 7.0 and later."
#endif

#ifdef __cplusplus
#import <opencv2/opencv.hpp>
#endif

#ifdef __OBJC__
@import SystemConfiguration;
@import UIKit;

Is it anything else that should be done?

MrJre
  • 7,082
  • 7
  • 53
  • 66
Shmidt
  • 16,436
  • 18
  • 88
  • 136

4 Answers4

64

From the comment of @hw731 I think you use badly @import :

old syntax to import framework :

#import <UIKit/UIKit.h>

but now, you can use the new syntax :

@import UIKit;

you need to enable theses modules to use the keyword @import (it's enable by default when you create a new project with Xcode 5) :

enter image description here

Have a look here.

Jordan Montel
  • 8,227
  • 2
  • 35
  • 40
13

Got same error, checked the standard places:

  • Yes, I have correct code syntax
  • Yes, all the "Apple LLVM 5.0 - Languages - Modules" settings are YES. Both in this project and each its targets.
  • Yes, I'm using a workspace, but checked that all projects have enabled Modules. Both projects and their each targets.
  • Yes, checked I don't have any funny "smart" quotes anywhere
  • Yes, checked that I'm in a header.h or file.m file (not .mm/.c/.cpp/.hpp)

The problem was that the header file was imported into file.mm file, which doesn't seem to support the new @import module syntax! Converted that header back to old style #import format and everything was fine again.

JOM
  • 8,139
  • 6
  • 78
  • 111
  • 3
    I too have some .mm files for C++ (Protocol Buffers). I converted back to the old syntax with #import in the .pch file. Everything compiles fine now. – subv3rsion Mar 30 '14 at 14:50
5

I also found that using following code in pch file:

#ifdef __cplusplus
#import <opencv2/opencv.hpp>
#endif

are not compatible with @import.

Shmidt
  • 16,436
  • 18
  • 88
  • 136
0

Same problem when i subclass UIActivity and write property in .m file as

@property(nonatomic, strong)NSArray *activityItems;

fixed by moving this property to .h file.

Avijit Nagare
  • 8,482
  • 7
  • 39
  • 68