Rename a class in Xcode: Refactor... is grayed out (disabled). Why?
I've been using Xcode for 5 years now, and refactoring has never worked correctly (even xcode 4.6 has major bugs where it WILL corrupt your source code!).
The workaround has always been (still works 100%, even in cases where Apple's code fails)
- use shift-command-f to find all uses of the file
- select "replace" in the search settings
- "replace-all"
- do the following for the .h file, and REPEAT IT FOR THE .m FILE (if you have one):
- right click the original file, and select "show in finder"
- delete the file from xcode (select "delete references only" when asked)
- rename the .h (and .m if you have one) in Finder
- in Xcode, select "Product -> (hold down Alt) -> Clean Build Folder"
- quit xcode (you can usually get away with not doing this - but NOTE: there are some other MAJOR bugs in Xcode where it crashes itself if you don't do this)
- re-open xcode
- drag/drop the .h and .m back into Xcode
- wait a few seconds (some of Xcode's core methods are asynchronous - allowing it to corrupt your project)
- finally, when it seems to be doing nothing (and your hard disk isn't making any noise any more): cmd-b to re-build
I have a 100% success rate with this method. I just tried refactoring with Apple's "Refactor -> Rename" in latest xcode and it failed - again!
(this time with the incorrect error: "Unable to determine the language of", one of those error messages where Apple put the wrong text in place)
Select the class's symbol in its header file - i.e. the bit just after @interface
. Then the refactoring stuff should be enabled.
Refactor might also be disabled if affected files (most likely the file with your class in it) are not saved.
If you are using Objective-C++ (i.e. mix Objective-C with C++ code) then refactoring is disabled in xcode since it does not support refactoring of C++ code.