When Apple updates Xcode, they usually add a slew of deprecations and warnings that might turn your otherwise warning-free project into a virtual hailstorm of yellow warning triangles.
One of the warnings that popped up for me with the recent Xcode 11.4 Beta 1 release, is this inscrutable little gem:
Hmm, “Couldn’t load spec with identifier ‘com.apple.compilers.gcc.4_0’ in domain ‘macosx'”, what does it mean? I know this is an old project, and has a lot of history. Maybe I have some old GCC setting that needs to be zapped? I searched the build settings for “gcc” but nothing came up at all, and certainly nothing with the specificity of “gcc.4_0”.
I was perplexed. Rather than fish around any longer in Xcode, I headed to Terminal for some brute force searching:
% cd /path/to/My.xcodeproj % grep -r gcc * project.pbxproj: compilerSpec = com.apple.compilers.gcc.4_0; ...
Aha! Let’s open that file up and see what the context is for these:
65F44C4917D681F3002A02AA /* PBXBuildRule */ = { isa = PBXBuildRule; compilerSpec = com.apple.compilers.gcc.4_0; fileType = sourcecode.c; inputFiles = ( ); isEditable = 1; outputFiles = ( ); };
Build rules? We don’t need no steekin’ build rules! I have rarely used a custom build rule, so never think to search in that tab when examining a target’s properites. Particularly not when I’m coping with new Xcode warnings. Sure enough, I took a look in the Build Rules tab and found these:
These custom build rules must have come from a time when the target included C and Assembly files. These days, it only contains Objective-C files, so I feel extra safe in deleting these. After doing so, the new warnings are gone.