In my case, this error was caused by cyclical "Import" statements in two classes: the header file for each class included the header of the other class, resulting in the Unknown type name 'ClassA'; did you mean 'ClassB'? error:

This is how my import statements were configured when I got this error. In ClassA.h
:
Import "ClassB.h"
In ClassB.h
:
Import "ClassA.h"
To fix it, I used the @class
forward declaration directive to forward-declare ClassA in ClassB.h
(this promises the pre-compiler that ClassA is a valid class, and that it will be available at compile time). For example:
In ClassA.h
:
Import "ClassB.h"
In ClassB.h
:
@class ClassA;
This fixed the Unknown type name 'ClassA' error, but also introduced a new error: ClassB.m
: Receiver type 'ClassA' for instance message is a forward declaration. For example:

To fix this new error, I had to import ClassA.h
at the top of the implementation file of ClassB (ClassB.m
). Both errors are now resolved, and I get zero errors and warnings.
For example, I now have:
In ClassA.h
:
Import "ClassB.h"
In ClassB.h
:
@class ClassA;
In ClassB.m
:
Import "ClassA.h"
Both error messages are now resolved.