Xcode C++ und Objective-C refactoring
Gibt es eine Möglichkeit, umgestalten mixed C++/Objective-C-code in Xcode ?? Ich Schreibe ein Spiel mit Cocos2D und Box2D, und die Box2D ist geschrieben auf C++, so dass jede Klasse, die ich schreiben sollte .mm Verlängerung und wenn daher versuche ich, z.B., um die variable umzubenennen, bekam ich eine Meldung wie "Xcode kann nur umgestalten, C und Objective-C-code".
Vielen Dank im Voraus!
- es ist "umgestalten" nicht "Refraktor" - das wäre ein Teleskop 😉
- für die Umgestaltung benutze ich manchmal appcode, seiner Umgestaltung ist mächtiger. Aber es ist langsam zu laden, also für mich ist es immer noch praktischer, benennen Sie Sie in xcode.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Xcode ist SEHR begrenzt mit refactoring, auch mit einfachen Obj-C. Es ist im Grunde eine Umbenennung, und es kann auch nicht umbenennen in die Kommentare. Wenn er sagt, er kann etwas nicht tun, dann ist es wahrscheinlich nicht.
Der einzige Weg, Sie zu benennen ist die Verwendung
find & replace
. Beachten Sie, dass Xcode verarbeiten kann, reguläre Ausdrücke, so ist es oft gut genug.Natürlich, das problem ist, dass die suchen & ersetzen, die kennt Sie nicht, die Programmiersprache, und manchmal fügen Sie einige zusätzliche ersetzen oder zu vergessen, zu ersetzen, etwas, daher besonders vorsichtig sein. Sauber bauen ist notwendig nach jedem refactoring zu überprüfen, wurde alles ordnungsgemäß umbenannt.
Können Sie auch command line tools (z.B.
sed
), um das gleiche zu erreichen.Ich hatte das gleiche problem in der cocos2d/box2d Spiel, ich bin Bau.
Tatsache 1: Xcode 4 kann sich umgestalten, C und Objective-C - (.m-Dateien) - code, aber kann er nicht umgestalten, Objective-C++ - code (.mm-Dateien).
Tatsache 2:, Wenn Sie interagieren wollen mit box2d (die ist in c++ geschrieben) müssen Sie die Verwendung von Objective-C++.
Habe ich (teilweise) behandelt das problem folgendermaßen:
Das Ergebnis ist, dass jetzt Xcode kann Refactoring jede Klasse von meinem Projekt, aber die Verpackungen natürlich.
P. S. natürlich, wenn Sie brauchen, um einen wrapper verwenden (z.B. MyWorld) in der Sie Objective-C-Klassen, die Sie importieren muss MyWorld.h und nicht MyWorld.mm.
Möchten Sie vielleicht zu prüfen, diese Projekt auf github - es ist ein work in progress, aber trotzdem:
https://github.com/lukhnos/refactorial
Es ist eine c++ - refactoring-tool, basierend auf Clang (d.h. der compiler Xcode selbst basiert auf).
Ich hatte eine Art von einer Lösung zu trennen, Objective-C und Objective-C++ - code. Es gibt einige Makros, die es erlauben zu erkennen, ob die Datei in reinem Objective-C. Beispiel:
http://philjordan.eu/article/strategies-for-using-c++-in-objective-c-Projekte
Die Idee ist, Sie kann immer noch nicht umgestalten .mm-Dateien, aber Sie können umgestalten, alle anderen code-auch wenn es beinhaltet die Objective-C++ - code.