During a refactor of an iOS project, I ran into this bear of a bug. During the linking phase, I get this message:
ld: duplicate symbol _OBJC_IVAR_$_Ti
This problem solve here when I deleted (using Xcode) all files .m and .h from Class folder then I cleaned Project (Command + Shift + K) and Builded again. So I drag the files from Finder to Class Folder in Xcode again. Finally, I cleaned and build my Project again...
Good Luck !!!
This could also happen if you have a multi-target project and two targets have same file like abc.m
and that abc.m
is selected for both targets.
What happened in my case was I had two targets named ABC
and XYZ
and both had their own DiagramViewController.m
file which are supposed to run code for their targets. I accidentally had DiagramViewController.m
of target ABC
had target selected for XYZ
also.
Click on .m
file go to file inspector and unselect additional target.
I had a same issue. the problem was that i had two libraries that contain same .m file.
like this
lib.a - for device.
libCauly-universal.a - for simulator and device.
so i deleted one.
I happened to have included the .h file and the .m file twice in the project. Once I removed the second copy, the error went away.
Make sure delegate.m is only listed once within the Compile-Sources.
I think this is a bug with Apple's latest linker when creating universal static libraries. I can;t find the bug number currently, but this happens because it incorrectly generates armv6 and armv7 without disambiguating them.
To verify if this is the case, change the configuration to build only armv6 or amv7, and you won't have this problem.