How should I respond to this warning?
warning: duplicate protocol definition of \'...\' is ignored
My protocol declaration is in
Just to supplement the existing answers here with the specific problem I encountered.
Basically, the compiler isn't lying. It is finding more than one definition of a class, protocol, enum, define, or whatever exists in the offending header files.
The fault could be a combination of your header files and the header search path.
At first, the issues seem puzzling as we know that the statement #import
will only import files that have not already been implemented. Therefore, unlike #include
, this problem shouldn't happen, right?
#import
does work. However, if your headers have been set up incorrectly then although it may encounter a file with the same name, e.g. MyLibrary.h
, if that file exists in two different places both of which are in the header search path then Xcode will perceive those as two different files.
In my case, I had a static library build phase which copied public headers.
The dependent products searched the folder above - defined in Build Settings as include/$(TARGET_NAME)
- and the source folder of my project.
That meant two different folders - both in the header search path - that contained the file MyLibrary.h
. Everything in that file would cause a duplicate or redefinition compiler warning or linker error.
TLDR: the same file may be in two different folders and both are in your header search path. Check your paths, and if you've incorporated a static library into the project or workspace, also check where the public headers are copied to as part of your investigation.