Код теряет цвет синтаксиса в Xcode 4

Я только что обновился до нового Xcode 4, и код не окрашен, хотя должен быть.

Например, строка NSString не окрашена в моем пользовательском коде, но когда я переключаюсь на код Apple (например, NSString.h), все хорошо окрашивается.

Как я могу это исправить?


person MartinMoizard    schedule 13.03.2011    source источник


Ответы (4)


Это известная ошибка в последней версии XCode. Это происходит с некоторыми проектами, которые переносятся с XCode 3.X на новую версию. Некоторым кажется, что это помогает перейти к органайзеру и на вкладке проекта удалить производные данные для проекта, где смысл кода работает неправильно.

Если у вас небольшой проект, также может помочь создание нового проекта в XCode 4 и импорт файлов из проекта XCode 3.

Обновление: XCode 4.0.1 немного улучшил ситуацию, по крайней мере, в некоторых моих проектах я вернул подсветку синтаксиса и смысл кода. Но это еще далеко не исправлено.

Обновление 2: XCode 4.0.2 почти не изменился. Похоже, проблема связана с подпроектами, в частности со статическими библиотеками. Судя по комментариям к этой записи в блоге, некоторым людям удалось изменить пути поиска заголовков от относительных до абсолютных путей, например вместо Foo/Bar используйте $(SOURCE_ROOT)/Foo/Bar. Это вместе с переключением всех проектов на формат XCode 3.1 и использованием LLVM 2.0 также многое для меня исправило. Это еще не идеально, но можно использовать.

Обновление 3: после преобразования подпроектов в независимые проекты и помещения их в рабочее пространство (также известное как XCode 4). подсветка синтаксиса и завершение кода назад.

Моя текущая среда теперь представляет собой рабочее пространство XCode 4, в котором каждый проект совместим с 3.1 (в отличие от стандартного 3.2), LLVM GCC 4.2 (по умолчанию для системы), а пути поиска заголовков по-прежнему абсолютны (с использованием $(SOURCE_ROOT)/.../).

person Alfonso    schedule 13.03.2011
comment
Я столкнулся с точно такой же проблемой, и это очень раздражает. 4.0.1 ситуацию в моем случае не улучшил, но я где-то читал, что отключение статического анализатора в настройках сборки может решить проблему. Так и случилось в моем случае. - person romrom; 12.04.2011
comment
Также может произойти с ванильными проектами Xcode 4. У меня это происходит с подпроектом, когда я меняю путь поиска заголовков, чтобы включить заголовки из этого подпроекта. - person Zac Bowling; 25.05.2011
comment
Мне удалось исправить мою проблему с пониманием кода при вводе полного пути. Но когда я использовал $(SOURCE_ROOT)/../OtherProject/** в качестве пути поиска заголовка пользователя, смысл кода снова перестал работать, хотя проект скомпилировался правильно. Кажется, что Code Sense нигде не любит относительные пути, например, откат внутри пути с помощью ../ - person LearnCocos2D; 16.06.2011
comment
ОБНОВЛЕНИЕ: я сделал последний поиск в Google и наткнулся на этот пост: flux88.com/2011/06/fixing-xcode-4s-broken-code-completion Решение было простым (но немного болезненным): указывать пути к КАЖДОЙ папке с файлами заголовков и избегать рекурсивных путей поиска заголовков / ** любой ценой! Мой путь поиска теперь включает дюжину папок и имеет длину более 1000 символов, но смысл кода работает!! Пример пути: $(SOURCE_ROOT)/../OtherProject/foo/bar/include/some/headers/etc (раньше я использовал: $(SOURCE_ROOT)/../OtherProject/foo/**) - person LearnCocos2D; 16.06.2011
comment
Все, что я сделал, это процитировал все пути к заголовкам, потому что некоторые из них содержали пустое место. - person anka; 24.11.2011

Я использовал неопределенный макрос, но те макросы, которые определены в макросах препроцессора в настройках сборки. Таким образом, xcode4 не генерировал никаких ошибок для этого неопределенного макроса.

Предпринимаемые шаги для решения.

  1. Удалены неопределенные макросы везде, где я использовал эти неопределенные макросы.
  2. Удалены повторяющиеся определения Маркоса.
  3. Удалены повторяющиеся ресурсы. (Я добавил в проект те же файлы (много файлов Thumbs.db).)
  4. Очистить и построить.

если вы все еще не получаете цвет, пожалуйста, переместите свой проект в другое место, я перешел на свое рабочее место.

После этих шагов я получил цвет в моих глазах.

Но это очень плохой вопрос. Я отнимаю много драгоценного времени. Я думаю, что эти шаги могут помочь вам.

Спасибо.

person Jeevanantham Balusamy    schedule 22.03.2011
comment
Спасибо, Джива... удаление дубликата #import сделало это за меня! - person marciokoko; 04.07.2012

У меня была такая же проблема с моей. Это игра cocos2d с коробкой и бурундуком. Это был адский беспорядок, когда проект распознавал и находил пути поиска пользователей, поэтому я не собирался связываться с ними.

Я хотел указать, что у меня ДЕЙСТВИТЕЛЬНО есть рекурсивные пути, и у меня есть относительные пути, и у меня все еще есть проблема. Это произошло, когда я добавил новую версию стороннего SDK, который использовал. Это был Testflight 083, который я обновил до 1.0. Я стер свою старую версию, но удалил только ссылки. Затем я вручную удалил его из Finder. Импортировала новую папку SDKv1 и прочитала ее в моем проекте, а также удалила старый путь к папке SDK0, оставив только недавно добавленный путь к папке SDK1. По какой-то причине я заметил, что хотя в версии 083 я использовал #import в своем файле Prefix.pch, он по-прежнему не распознавал вызов метода из AppDelegate. Это означает, что #import в Prefix.pch по какой-то причине не работал. Мне пришлось добавить #import в мой файл AppDelegate отдельно. Это дало мне дубликат #imports, как сказала Джива выше. Это забило тревогу в моей голове.

Таким образом, решение состояло в том, чтобы эффективно удалить дубликат #import в Prefix.pch, оставив только один в AppDelegate. Он переиндексирован, и CodeSense снова работает. Спасибо Джива!

person marciokoko    schedule 04.07.2012

Эта проблема сводила меня с ума, и я потерял надежду исправить ее без какого-нибудь уродливого взлома конфигурации XCode. Я прошел через эту самую ветку форума переполнение стека раз. И вот однажды я случайно починил его. Я не уверен, нужны ли вам все эти шаги, но я нашел это верным способом исправить проблемы с индексацией XCode:

  • Очистите свой проект (Command-shift-K)
  • Откройте органайзер, закройте свой проект.
  • На вкладке «Проекты» в органайзере удалите производные данные для проекта, который вы хотите сбросить.
  • Выйти из XCode
  • В терминале запустите:

    sudo mdutil -a -i on
    

    Кажется, это сбрасывает индексацию прожектора (я мало что знаю об этом, потому что не использую прожектор).

  • Когда команда завершится, Spotlight придется переиндексировать. Посмотрите вверх, чтобы увидеть маленькую точку в увеличительном стекле для значка вашего прожектора. Когда точка уходит, прожектор переиндексировался. Вы можете проверить прогресс, открыв прожектор.
  • Снова откройте XCode и подождите, пока он переиндексирует все ваши файлы.
  • Создайте проект.

При успешной сборке у вас снова должна быть соответствующая подсветка синтаксиса. Надеюсь, вы, ребята, найдете это маленькое открытие таким же полезным, как и я :)

РЕДАКТИРОВАТЬ:

Я, вероятно, должен добавить, что подсветка синтаксиса иногда, кажется, снова ломается, когда отладчик зависает симулятор во время запуска приложения. Я просто пытаюсь избежать этого, будучи более осторожным, чтобы процесс не зависал.

EDIT2: (извините, первый вклад)

Работает на XCode 4.6 и 4.6.2.

person creativeandre    schedule 19.04.2013