Unknown type name 'UIImage'

aenawi picture aenawi · Sep 24, 2014 · Viewed 25.7k times · Source

I've upgraded XCode from 5.1.1 to XCode 6.0.1 recently. Now everytime I want to define a new UIImage object I get this error:

Unknown type name 'UIImage'

Code:
1. Create a new project
2. Add Image View control to the storyboard
3. Reference the Image View by adding IBOutlet
4. Add new class file
5. Add the following line of code to the header file of the new class:

@property (strong, nonatomic) UIImage *background;

Header file (.h) content:

#import <Foundation/Foundation.h>

@interface CCTile : NSObject

@property (strong, nonatomic) NSString *story;
@property (strong, nonatomic) UIImage *background; // Error: Unknown type name 'UIImage'

@end

However, if I add #import <UIKit/UIKit.h> to the header file (above) everything seems OK! Any ideas what am I missing here, please? Is this a change in XCode header files!

Answer

jdmorgenstein picture jdmorgenstein · Nov 1, 2014

I also had the same problem and fixed it using

#import <UIKit/UIKit.h>

However, I dug around some more and compared a project made in XCode 6 compared to Xcode 5, and I noticed that Xcode 6 did not create a prefix header file. The prefix header file is implicitly imported into every class, and the prefix header file (.pch) includes UIKit as well as Foundation.

To create a pch file, go to File -> New -> File -> Other -> PCH file. Edit the name to "YourProject-prefix.pch". Add the following:

#ifdef __OBJC__
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
#endif

Then you need to set the build settings. Go to your project -> build settings -> search at the top: prefix header.

You will see Precompile Prefix Header -> change to yes. Also, right below is Prefix Header. Add the path of your prefix header. Should be like: "YourProject/YourProject-prefix.pch".