Xcode 4: автозаполнение и переход к определению, нарушенному в моем проекте Xcode 3

мой проект был создан в Xcode 3, я открываю его в Xcode 4 и замечаю следующее:

  • 'перейти к определению' больше не работает с моими собственными символами (однако UI* и даже TT* символы работают нормально!)
  • автозаполнение / 'Code sense' так же плохо, как Xcode 3, т. е. он предлагает все
  • классы моих проектов не отображаются в навигаторе классов (опять же, отображаются классы system и Three20 вверх!)

при создании новая проект Xcode 4 однако, эти функции do кажется, работает. К сожалению, единственным обходным путем, похоже, является воссоздание проекта и повторный импорт всего. Этот проект слишком велик!

вещи, которые я пробовал:

  • удаление производных данных в органайзер
  • очистка проекта
  • установка Xcode 4 Gold Master и Final версии

обновление

  • ошибка не было разрешено в Xcode 4.0.1.

15 ответов


в нашем случае виновником оказалась старая версия three20 libs. Чтобы заставить проект работать, я должен был:

  1. удалить все ссылки на three20 проекта
  2. следуйте инструкциям на http://three20.info/article/2011-03-10-Xcode4-Support

Как только новая библиотека была установлена, xcode4 автоматически переиндексация. Завершение кода, переход к определению и даже рефакторинг теперь работают. Радость (tm) работа с Xcode вернулась! :)

в более общем плане любая библиотека, которая помещает файлы заголовков в BUILT_PRODUCT_DIR, вероятно, будет иметь аналогичные проблемы.


On Окно:

  1. организатор
  2. проекты
  3. Проект
  4. Удалить Производные Данные
  5. Перезапустить Xcode

небольшой совет от ответа другого:

после шага.4 не перестраивайте проект, а просто перезапустите Xcode.


Что сработало для меня, когда я потерял xcodes супер хороший намек на код:

окно (меню) - > организатор (меню) - > проекты(вкладка)

затем

нажмите Удалить производные данные (это то же самое, что перейти в папку и удалить ее вручную)

но!!!!! на этом шаге не перестраивайте, но закройте xcode и снова откройте проект. Это сработало для меня.


У меня была та же проблема в окончательной версии XCode 4 сегодня, работая с моим старым проектом XCode 3. Проблема связана с индексом символов, который создает XCode. Он должен создать новый индекс для вас автоматически, но в XCode 4 это займет много времени. Одним из возможных решений является переход в ~ / Library/Developer/Xcode / DerivedData и удаление старого индекса. Перезапустите XCode, и вы увидите его индексирование. Для "перейти к определению", вы можете удерживать нажатой клавишу command и мыши над методом или имя класса, и вы должны увидеть синие подчеркивания, такие как гиперссылки. Затем вы можете нажать на него, чтобы перейти к определению.


изменить: Кажется, что если у вас есть какие-либо пользовательские пути поиска заголовков для поддержки нескольких целей с общим кодом, индексирование XCode 4 сломается, а затем помощник и codesense вместе с ним. Я поднял это как #ID 9182099 с Apple. Существует также проблема, что если у вас есть какие-либо конфликтующие параметры между глобальными и целевыми параметрами сборки проекта, Индекс не будет завершен правильно. Убедитесь, что параметры сборки согласованы.

У меня только что было это проблема в очень большом, многоцелевом коммерческом проекте. В качестве дополнительной боли все xib-файлы не будут показывать контроллер в представлении помощника, и ни один из представлений помощника подкласса/суперкласса/братьев/категорий также не будет работать.

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

для этого я создал новый "пустой" проект, а затем вручную воссоздал нужные мне цели. Затем я удалил источник и .plist файлы для новых целей, оставляя меня снова с пустым проектом с мне нужны были три цели.

затем я просто выбрал "добавить файлы.."к проекту по одной папке за раз, связываясь с целью по мере необходимости. Я остановился и построил каждую цель, поскольку она была импортирована для борьбы с любыми ошибками компилятора, которые дал мне последний clang.

Если у вас есть сложная иерархия групп, которая не сопоставлена со структурой папок файловой системы, вам нужно будет либо воссоздать группы после импорта, либо пройти болезненный процесс перемещения всех ваших файлов в вложенные папки и повторное указание ссылок в XCode.

Вам также нужно будет тщательно проверить любые пользовательские настройки сборки в целях, а также повторно связать любые библиотеки, которые вы включаете. Также убедитесь, что вы удалите все импортированные навалом .plist файлы из целевой ссылки.

Извините, если это не тот ответ, на который вы надеялись.


http://three20.info/article/2011-03-10-Xcode4-Support работал на меня. В частности, удаление каталога сборки three20. Как ни странно, это сработало, даже когда указанная сборка была сделана в xcode4. CodeSense начал работать в тот момент, когда я стер каталог сборки three20, мне даже не пришлось перекомпилировать или перезагрузить проект.


Это просто сработало для меня:

  • откройте проект Xcode.
  • Откройте командную строку в каталоге проекта и введите:

    touch MyProject.xcodeproj/project.pbxproj

  • смотрите, как синтаксическая раскраска и другие вещи фиксируются перед вашими глазами.

  • повторно откройте проект (или настройте параметры проекта), если схемы проекта сброшены на "мой Mac" для проектов iOS.

я исправил проблему, удалив производные данные в Th Organizer, запустив touch MyProject.xcodeproj/project.pbxproj и повторное открытие проекта. После повторного открытия он начал индексировать, а затем снова работал.


в моей настройке XCode 4 на 100% воспроизводимо, что установка пути поиска заголовка пользователя нарушит codesense, особенно "перейти к определению", после перезапуска. Я создал новый проект, добавил свою вспомогательную библиотеку в качестве подпроекта. Если я включаю заголовки с путем поиска заголовка пользователя (рекурсивным), я могу скомпилировать, но автозаполнение/навигация нарушается.

удаление пути поиска заголовка, закрытие проекта и повторное открытие исправляет его снова.


добавил Это в качестве комментария в нескольких местах, так что, возможно, Google juice поможет программистам снова работать... но в любом случае, я нашел, если вы просто используете на YourAppName-Prefix.pch файл он получит подсветку синтаксиса / окраску и завершение кода / возврат без необходимости удалять все ваши производные данные или перезапускать Xcode. Я сделал это псевдонимом в своем .файл bashrc.

alias pch_touch='touch /path/to/your/apps/Prefix.pch'

. ~/.bashrc

в пределах около 1-2 сек касатьться PCH-файл, синтаксическая раскраска возвращается, что является завершением кода знака / прыжком, теперь тоже будет работать. Грустно, что такой в противном случае удивительный мощный инструмент унижен некоторыми ошибками метаданных / статичности, но вот и все. По крайней мере, это поможет тебе встать на ноги и перестать тратить время.


У меня была такая же проблема здесь. Нет ссылок определения, смысла кода или подсветки синтаксиса. Удаление производных данных не сработало, и даже создание нового проекта не имело никакого значения. Хотя это может быть не та же проблема, что и у вас, очистка настроек сборки (чтобы не было конфликтов между проектом и целями), как сказал Рик, решила ее для меня (хотя я все еще не знаю, какие настройки были/были причиной проблемы).


Что касается" перейти к определению", попробуйте нажать на кнопку выбора схемы (ту, что находится в правом верхнем углу окна, которая отображает список сборок, устройств и симуляторов), затем нажмите назад в редакторе кода и попробуйте команду-нажмите или" перейти к определению " снова.

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


Я не знаю, помогает ли это кому-то, но я получил индексацию кода моего проекта c++, когда я переключился на Xcode 4. Я не переключился на Lion, поэтому у меня все еще есть версия 4.02. При создании проекта в Xcode я бы использовал опцию внешней сборки, это не добавило HEADER_SEARCH_PATHS правильно в проект. Я нашел, что с помощью:

   cmake -G Xcode . 

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


У меня была такая же проблема. У меня есть проект с кучей ViewControllers, которые расширяют класс, который я вызываю BaseViewController. Я добавил следующий код в BaseViewController.h и синтаксическая раскраска и автозаполнение кода сломались! Даже при неоднократном удалении полученных данных проблема все еще существовала. Не могу поверить!!

@implementation UIView (FindFirstResponder)
- (UIView *)findFirstResponder
{
    if (self.isFirstResponder) {
        return self;
    }

    for (UIView *subView in self.subviews) {
        UIView *firstResponder = [subView findFirstResponder];

        if (firstResponder != nil) {
            return firstResponder;
        }
    }

    return nil;
}
@end

комментирование этого кода решило мои проблемы! У меня есть XCode версии 4.4.1 (4F1003)


С этот комментарий здесь я смог отладить аналогичную проблему с моим проектом, похоже, это был флаг bad-w, который препроцессор clang не распознал должным образом. В основном, работает

defaults write com.apple.dt.Xcode IDEIndexingClangInvocationLogLevel 3

в терминале увеличивает многословие индексатора и должно помочь вам отслеживать проблемы. Запустить Консоль.app и поиск IDEIndexingClang.