Xcode: Code verliert die Syntaxfarbe

80

Ich stelle fest, dass Objective-C-Code in Xcode 3.1 (Leopard) in verschiedenen Situationen nach dem Tippen möglicherweise keine geeignete Syntaxfarbe erhält oder die Farbe verliert, die er hatte.

Dies ist nicht nur ein "Aktualisierungs" -Problem mit neuen benutzerdefinierten Symbolen, sondern betrifft auch Kakao-Framework-Symbole.

Manchmal lässt CMD-a, um den gesamten Text auf der Codepage auszuwählen, die Färbung (erneut) erscheinen, manchmal funktioniert ein Doppelklick auf eine Zeile, um sie auszuwählen, manchmal muss ich ein Leerzeichen in einem Symbol hinzufügen / löschen, um dieses Symbol zu erhalten zu (neu) färben. Das erneute Erstellen oder Schließen / erneute Öffnen des Projekts kann funktionieren oder nicht.

Ist dies ein bekanntes Problem mit Xcode? Für etwas, das mich so nervt, finde ich nicht die zahlreichen Diskussionen darüber auf SO und anderswo, die ich erwarten würde.

Und gibt es einen Befehl, um das Umfärben der globalen Syntax zu erzwingen?

ColorMeFamous
quelle
Überprüfen Sie auch meine Antwort hier stackoverflow.com/questions/1627033/…
Gajendra K Chauhan

Antworten:

148

1.) Gehen Sie zu Projekt -> Build-Einstellungen -> Header-Suchpfade

2.) Fügen Sie "$ (SRCROOT) / **" hinzu.

3.) Schließen Sie das Projekt und laden Sie es erneut

4.) Gehen Sie zu Xcode -> Fenster -> Organizer -> Projekte -> $ YourProject -> Abgeleitete Daten löschen

5.) Warten Sie einen Moment, bis XCode alle Anzeigen neu erstellt hat


Um weitere Informationen zu erhalten, aktivieren Sie die ausführliche Protokollierung:

1.) Erhöhen Sie die Xcode-Protokollstufe in der Terminal-App: Standardmäßig schreiben Sie com.apple.dt.Xcode IDEIndexingClangInvocationLogLevel 3

2.) Öffnen Sie die Konsolen-App. Suche nach "xcode"

3.) Ich habe "Datei nicht gefunden" -Fehler für Header-Dateien gesehen, die in der pch-Datei erwähnt sind (daher das obige Update).

Lars Schneider
quelle
2
Der zweite Teil Ihrer Antwort war sehr hilfreich !!
Denis Mikhaylov
2
Meine Erfahrung in den Labors bei WWDC in diesem Jahr war, wenn Sie möchten, dass die Syntaxhervorhebung funktioniert, die Vorkompilierung vollständig deaktiviert ... es hat bei mir funktioniert, scheint aber eine unzureichende Lösung zu sein
Stew
Danke, @Lars schneider. Es ist ein schöner Weg.
Tirth
2
Vielen Dank! # 4 (Löschen abgeleiteter Daten) hat auch bei mir funktioniert.
Mark Mckelvie
1
Dies funktionierte für mich in Xcode 8.3, während eine andere Lösung, die zuvor unter 8.2 funktionierte, die Syntaxhervorhebung nicht mehr wiederherstellte. Tolle, zeitlose Antwort!
Adrian
43

Ich hatte das gleiche Problem mit einem Projekt, das in Xcode 3 in Ordnung war und bei dem die Syntaxhervorhebung und die Code-Vervollständigung in Xcode 4 fehlerhaft waren. Ich brauchte die bessere Hälfte des Tages, um es herauszufinden, aber ich stellte fest, dass die folgenden Schritte funktionieren werden reproduzieren / beheben Sie das Problem 100% für mich.

Nachdem ich alle oben genannten Lösungen erfolglos ausprobiert hatte, versuchte ich, das Projekt von Grund auf neu zu erstellen und alle Dateien und Ordner sorgfältig neu zu importieren. Jedes Mal, wenn ich ein paar Dateien importierte, überprüfte ich, und die Syntaxhervorhebung funktionierte immer noch. Auch nach den letzten war es noch so. Dann habe ich Build erstellt, was fehlgeschlagen ist, weil ich vergessen habe, einige häufig verwendete Header-Dateien in die .pch-Datei des Projekts aufzunehmen, die im alten Projekt vorhanden waren. Und dann brach CodeSense erneut zusammen.

Nach weiteren Untersuchungen haben wir festgestellt, dass CodeSense beschädigt wird, wenn Sie eine Header-Datei importieren, die wiederum dieselbe Framework-Header-Datei importiert wie die .pch-Datei. Das gleiche Setup verursachte keine Probleme in Xcode 3.

Beispiel:

project.pch

#import <Foundation/Foundation.h>
#import "projectConfig.h"

projectConfig.h

#import <Foundation/Foundation.h>
#import "one.h"
#import "two.h"

Also durch Entfernen der völlig unnötigen

#import <Foundation/Foundation.h>

Direktive aus der 'projectConfig.h' können Sie die Hervorhebung korrigieren und die Code-Vervollständigung wird auch für Sie zurückkommen. Wenn Ihr Problem mit meinem identisch ist.

Wut
quelle
Ja ... hatte gerade das gleiche Problem ... und die Lösung von Rage hat es behoben.
Crosscode
4
Warum wird dies nicht in die Stratosphäre aufgenommen? Ich habe mich nicht darum gekümmert, alle meine Header-Probleme zu bereinigen, sondern stattdessen die Option Precompile Prefix Header für mein Ziel deaktiviert, und alles ist in Ordnung. Endlich kann ich das gesamte Team auf 4.2 upgraden, da wir dort pleite waren.
Rob Booth
2
Es klappt! Ich habe das Gleiche getan wie @Rob Booth, ich habe "Precompile Prefix Header" deaktiviert (auf NO gesetzt), mein Projekt bereinigt und die abgeleiteten Daten gelöscht. Mein Syntax-Highlight wurde neu gestartet, um zu funktionieren!
Hbobenicio
Dies hat mein Problem behoben. Meins war nicht die Foundation-Datei, sondern eine benutzerdefinierte Klasse. Ich habe es gerade aus der .pch-Datei entfernt, es dann erneut gelesen und alle Instanzen davon in meinen anderen Klassendateien entfernt.
Bot
Du hast meinen Dank. :) Ich habe deine Beschreibung genau befolgt. Foundation und UIKit wurden aus allen Dateien entfernt, die ich in mein .PCH importiert habe.
Timo
15

Wählen Sie einfach die Datei aus, die die Syntaxfarbe verloren hat, und drücken Sie Editor> Syntaxfarbe> (wählen Sie Ihre Sprache (z. B. Objective c ++) anstelle von 'Standard').

Emad
quelle
2
Das ist mir passiert. Ich bin mir nicht sicher, warum XCode standardmäßig "Generisch" anstelle des richtigen Dateityps nur für eine Datei verwendet, aber dieser Schritt hat das Problem behoben. Ich habe zuerst versucht, abgeleitete Daten zu bereinigen und zu löschen, was ich für einen Schuldigen hielt.
Rudi
Prost ... Apple hat AppleScript für mich ausgewählt lol danke Kumpel
Bikram Thapa
7

Ich habe festgestellt, dass der beste Weg, um die Syntaxfarbe wiederzuerlangen, darin besteht, Xcode zu beenden und neu zu starten. Ich konnte dir nicht sagen warum, aber das funktioniert jedes Mal.

todd412
quelle
1
Für mich hat es sogar gereicht, das Projekt wieder zu eröffnen.
thgc
Wie verrückt ist das! Es wurde nicht nur das Hervorheben der Kategorie
behoben,
4

Ich finde, dass das Folgende oft den Trick macht ...

Wählen Sie in "Build Settings" sowohl "Base SDK" als auch "Architecture" erneut aus. (Klicken Sie oben links auf das blaue Projektsymbol, während Sie sich im "Browsermodus" befinden, 1und klicken Sie dann auf Projekteinstellungen, um dort mit den Dingen herumzuspielen .

Stellen Sie sicher, dass sie alle in einer Reihe stehen / es tut nicht weh, dort ein wenig herumzuschleudern , während Sie dort sind ... Sie wissen, mischen Sie es einfach ein bisschen durch. Sie werden feststellen, dass xCode einen winzigen Mini-Strich hat - jedes Mal, wenn Sie zwischen 64 und 32 Bit wechseln… In der Regel weiß ich, ob die Code-Hervorhebung für die Nacht tot ist oder ob ich bereit bin.

Oft habe ich ein Projekt, das im 32-Bit-Modus sofort hervorgehoben wird und nur in 64 sitzt ... Wer weiß ... Ahh, Xcode, du verrückter Pfusch.

Alex Gray
quelle
1
Die Antwort hat mir sehr geholfen und funktioniert ... Aber Ihr Schreibstil könnte verbessert werden :)
ItalyPaleAle
Im Nachhinein kann diese Antwort für jeden nicht-englischen Muttersprachler tatsächlich unverständlich sein. Ach, für mich ... es sind Hillairballs .
Alex Gray
3

Wählen Sie Ihr Projekt -> Registerkarte Build Settings -> Apple LLVM Language 5.0 -> Precompile Prefix Header auf YES. NSLog wurde nicht hervorgehoben. Derzeit läuft Xcode 5.0.1 Hoffe es hilft =) Danke @rebelzach

Rob Mcelvenny
quelle
2

Ich kann eine 100% ige Lösung für dieses Problem bestätigen, basierend auf einer Frage, die ich gestellt (und tatsächlich beantwortet) habe, wie unten abgebildet. Eine Sache, die ich hinzufügen möchte, ist, dass es manchmal "fehlerhafte Leerzeichen" sind, die auch zum Verlust der Hervorhebung beitragen können. Bereinigen Sie es entweder selbst oder verwenden Sie das Plugin Goggle Toolbox für Mac Xcode 4, mit dem ein Eintrag im XCode- EditMenü namens hinzugefügt wird Clean Up Whitespace.

Geben Sie hier die Bildbeschreibung ein Geben Sie hier die Bildbeschreibung ein

Alex Gray
quelle
2

Dies scheint ein ähnlicher Fehler aus dieser Frage zu sein

Ich war in der Lage , dieses Problem zu beheben , indem Sie Precompile Prefix Headerauf Noin den Build - Einstellungen.

Rebellzach
quelle
1

Ich hatte kürzlich ein ähnliches Problem. Alle Farben und die automatische Vervollständigung funktionierten nicht mehr für integrierte Frameworks. Meine eigenen Klassen funktionierten immer noch. Jemand hat mir empfohlen, "Static Analyzer ausführen" in den Build-Einstellungen zu deaktivieren. Es ist komisch, aber es hat funktioniert.

Cory Kilger
quelle
1

Für mich war es, dass ich mein Projekt und Tests umbenannt habe Ziel deutet noch auf die alte pch Lage, aber mein App Ziel auf den neuen zeigte.

Wenn Ihr App-Delegat immer noch Code-Sinn hat, kann dies auch für Sie der Fall sein. Gehen Sie in das Projekt, wählen Sie das Präfix 'Zielsuche' Tests 'aus und setzen Sie es auf den entsprechenden Wert im Ziel' App '.

atlex2
quelle
0

Öffnen Sie die Projekteinstellungen ( Projekt> Projekteinstellungen bearbeiten ) und klicken Sie auf der Registerkarte Allgemein auf die Schaltfläche Code Sense Index neu erstellen . Dadurch wird der Index neu erstellt, den Xcode für die Syntaxfärbung verwendet.

Dieser Vorgang kann bei größeren Projekten eine Weile dauern, sodass Sie den Fortschritt im Aktivitätsfenster ( Fenster> Aktivitätsmenü ) überprüfen können .

Rob Keniger
quelle
2
Immer wieder behebt dies das Problem für mich nicht. Ich muss etwas falsch machen, da XCode einfach nicht die Syntax hervorhebt oder die automatische Vervollständigung anzeigt.
Jessedc
1
Stellen Sie sicher, dass Sie Fehler gegen Apple wegen dieser Art von Problemen protokollieren: bugreport.apple.com.
Lyndsey Ferguson
0

Darüber hinaus gibt es in XCode4 keine Schaltfläche zum Neuerstellen des Code-Sense-Index.

Sunil Gowda
quelle
Ich habe irgendwo gelesen, dass dies wahrscheinlich daran liegt, dass XCode4 keinen Code-Sense-Index mehr benötigt. Ich denke, es verwendet die neue Clang-Syntaxanalyse direkt, anstatt einen separaten Index zu führen. Dies ist auch der Grund, warum die Codevorschläge viel genauer sind, da sie nur Code-Vervollständigungen vorschlagen, die vom Compiler-Standpunkt aus sinnvoll sind.
Markquezada
1
Es stellt sich heraus, dass es einen Weg gibt - stackoverflow.com/questions/1627033/…
Arkaaito
0

Ich hatte das gleiche Problem und löste dieses Problem, indem ich meine Build-Einstellungen aktualisierte, um den Standard-Compiler des Systems, LLVM GCC 4.2, zu verwenden.

Es scheint, dass es mehrere Faktoren gibt.

Mikey
quelle
0

Ich habe auch dieses Problem und habe versucht, die Lösungen entweder "Index neu erstellen", "XCode neu starten", "Compilereinstellung auf LLVM GCC 4.2 ändern". Die haben mir nicht geholfen.

Deshalb habe ich versucht, den folgenden Code sofort zusammen mit der neuen Erstellung der Header-Datei hinzuzufügen.

#include "header.h"

using namespace cocos2d

Dann wird der zuvor in der Header-Datei hinzugefügte Code eingefärbt und kann Klassen und andere Dinge erkennen.

Ich habe cocos2d-x verwendet, daher basiert meine Syntax auf c ++. Ich teste es allerdings noch nicht mit Objective-c.

haxpor
quelle
0

Denn jemand weiß noch nicht warum. Mit XCode 8.2 öffnen lassen , es sollte funktionieren

Hieu Tran
quelle