Xcode застрял при индексировании


116

Проект, над которым я работал 2 месяца, перестал работать без причины, потому что Xcode застрял на «Индексировании». Я больше не могу построить проект. Если я попытаюсь выполнить сборку, Xcode зависнет, и мне придется принудительно завершить работу. Это происходит только с этим проектом.

Я попытался очистить все производные данные, но это не помогло.

Я использую Xcode 4.5.2.

Любые идеи?


Связан ли проект с каким-то контролем версий? Когда он связан с репозиторием, он, как правило, регулярно проверяет статус источника и после этого индексирует файлы. Если ваш проект большой, это может привести к зависанию при индексации.
gibertoni

Проект не такой уж и большой. Сегодня я добавил фреймворк GameKit, но он отлично работал весь день. Когда я собирался закончить настройку Game Center, возникла проблема. Я говорю: «Индексирование | Обработано 3 из 4 файлов». Иногда «0 из 1 файла», иногда 83 из 84 файлов ... Думаю, мне придется создать новый проект и скопировать и вставить почти все. Будет пара часов ...
tomDev

2
У Apple и ее крутизны та же проблема на xcode 5
Roma-MT

2
Я столкнулся с этой проблемой в Xcode 9.1. Спустя 4 года у них все еще остается та же проблема: |
Сабри Мевиш

3
Xcode 10 GM тоже
QED

Ответы:


164
  1. Откройте папку проекта.
  2. Найдите файл ProjectName.xcodeproj.
  3. Щелкните правой кнопкой мыши "Копировать и вставить в безопасное место".
  4. Щелкните правой кнопкой мыши «Показать содержимое пакета».
  5. Найдите файл project.xcworkspace и удалите его.
  6. Снова откройте свой проект, очистите его и восстановите.

Если проблема не решена, замените файл резервной копией.


1
Не удается найти файл project.xcworkspace внутри файла * .xcodeproj в xcode 6.2. Ответ @ aleksandar-vacic сработал для меня.
Kie

xcode все еще кажется застрявшим на "индексировании | ожидании xcodebuild", однако он успешно строится, когда я нажимаю кнопку воспроизведения, так что это кое-что.
chiliNUT

3
Не могли бы вы уточнить, для чего предназначен этот файл / как он связан с рассматриваемой проблемой?
де.

@marlonpya Я думаю, вы работаете с cocoapods, и в этом случае файл рабочей области отделен от того, о чем я говорю. Здесь я говорю о файле внутри файла .project. Надеюсь, это поможет, но всегда делайте резервную копию, прежде чем что-либо менять в файле проекта или файлах рабочей области.
Pratik Mistry

При использовании cocoapods следуйте тем же инструкциям и откройте файл .xcworkspace в корневой папке
Leap Hawk

70
  1. Закройте этот проект из Xcode
  2. Откройте Xcode Organizer, найдите проблемный проект
  3. Удалить папку "Производные данные" в Организаторе
  4. Закройте / снова откройте Xcode

Nuking Derived Data - это первое, что нужно попробовать во всех случаях неправильного поведения Xcode


9
Обратите внимание, что в Xcode 6.4 вы должны перейти в Window → Projects вместо Organizer.
kennytm

Более простое решение, чем принятый ответ, спасибо!
Тим

8
Производные данные находятся в ~ / Library / Developer / Xcode / DerivedData / на моем компьютере.
Suragch

23

У меня была именно эта проблема, она была вызвана литералом массива из 20 элементов. Пришлось перейти на другой синтаксис. Довольно глупо.


4
Мне то же. Работает для массива 4х4. Массив 6x6 был слишком большим для xcode ... драма
dfens

@Jehan Вы правы, но если вы определяете тип массива, это не займет времени, тогда моя проблема будет решена. Например, let propertyType: [[[String: String]]] = [[[«propertyKey»: «Все типы»], [«propertyKey»: «House»]], [[«propertyKey»: «Apartment & Unit» ], ["propertyKey": "Townhouse"]] ....... И так далее] Если вы не определите тип, это займет больше времени
Шрикант К.

2
Мне то же. Абсолютно странный и настоящий провал со стороны Apple и Xcode
wuf810,

1
Как узнать те места в коде, в которых застрял компилятор?
Томаш Назаренко

1
@TomaszNazarenko - Смотри мой ответ ниже. Вы можете заставить xcode предупреждать о коде, который требует слишком много времени для обработки.
greencardigan

18
  1. Закройте любой открытый Xcode
  2. rm -rf ~/Library/Developer/Xcode/DerivedData
  3. Щелкните правой кнопкой мыши рабочее пространство PROJECT_NAME.xc, выберите "показать контент" и удалите папку "xcuserdata".

9

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

class mainClass : mainClass
{
    ...
}

Фактически, это было решением проблемы индексирования в моем случае. Отличный ответ!
rghome

Почему это вызывает (по сути) сбой подпроцесса Xcode, а не вызывает ошибку, как любые другие ошибки кода?
Kirkland

8

При использовании Xcode 6 он говорит

В ожидании сделать

Возможно, экземпляр make уже запущен. Завершите процесс и индексация продолжится. Глупо, но у меня сработало.


Это исправило это для меня. У меня был контейнер Docker, работающий с запуском в фоновом режиме.
Девин Янг

7

Еще одна вещь, которую стоит попробовать, если вы пытаетесь решить проблемы с индексированием, а вы так далеко на странице!

Попробуйте добавить этот флаг в настройки сборки.

-Xfrontend -warn-long-expression-type-checking=400

флаг настроек сборки

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

предупреждение

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


Это идеальный и точный ответ.
Джая Радж


4

Это ошибка Xcode (Xcode 8.2.1), и я сообщил, что Apple, это произойдет, когда у вас есть большой словарный литерал или вложенный словарный литерал. Вам нужно разбить словарь на более мелкие части и добавлять их с помощью метода добавления, пока Apple не исправит ошибку.


4
  • Сначала отключитесь от сети. И проводная, и беспроводная сеть должны выключиться.
  • Во-вторых, убить com.apple.dt.SourceKitServiceпроцесс. Тогда XCode снова начнет индексировать, а не зависнет.

введите описание изображения здесь


1
Кажется, это com.apple.dt.SKAgent
вызывается

3

Для меня сработало полное закрытие Xcode, а затем перезапуск проекта.

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


3

Это случилось со мной. Если вы используете коконады, сделайте следующее:

  1. Удалить project.xcworkspace
  2. Переустановите модули с помощью команды pod install на терминале.
  3. Будет создан новый проект .xcworkspace
  4. Откройте новый проект. Xcworkspace -> Clean -> Build

1
Спасибо. Я столкнулся с проблемой в xcode11.1, и это работает для меня
Рахул Парих

1
Была ли эта проблема с Xcode 11.5, исправлена ​​и этим.
frankenapps

2

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

Потом я заметил в проекте предупреждение о неправильном назначении selfделегатом. Разумеется, в объявлении класса отсутствовал протокол. Обратите внимание, что в примере кода OP есть аналогичное назначение (хотя по образцу невозможно сказать, объявлен ли правильный протокол):

leaderboardController.leaderboardDelegate == self;

После устранения этого предупреждения (путем правильного объявления реализованного протокола) Xcode перестал работать некорректно. Также я должен отметить, что проект действительно был выполнен правильно, так как были реализованы методы протокола . Просто Xcode не мог подтвердить, что протокол действительно должен реализовываться классом.


2

Ничто не работает для меня, мой проект слишком велик (слияние объективных c, c++, swiftи javaфайлы с j2obj). Я отключил индексацию Xcode и месяцами работал без завершения кода (и это больно). Но наконец я нашел обходной путь. Идея состоит в том, чтобы Xcode продолжал индексировать код, но ограничивал использование ЦП с помощью внешнего инструмента, например cputhrottle.

Итак, сначала вам нужно установить cputhrottle в терминал

варить установить cputhrottle

Затем ограничьте процесс индексации Xcode следующим образом (20 = 20%)

sudo cputhrottle $ (pgrep -f com.apple.dt.SKAgent) 20

Я представил здесь свое «решение» с подробностями о режиме: как предотвратить использование Xcode 100% ЦП при индексировании больших проектов


Это помогает, хотя cputhrottle больше не входит в состав homebrew. Вместо этого вы можете использовать cpulimit, который имеет немного другой синтаксис: «sudo cpulimit -l 20 -p $ (pgrep -f com.apple.dt.SKAgent)» - хотя теперь я могу снова отслеживать (ранее это было невозможно), Я бы предпочел узнать, что так долго индексируется, и пропустить это из индексации, но я понятия не имею, что это такое, как узнать или как что-то пропустить (я подозреваю, что какие-то более крупные связанные двоичные файлы или, возможно, даже увеличиваются? «Я компилирую только C ++, Swift не использую) ..
Eike

Хорошо, мне придется вернуться к этому. Казалось, это помогло, но на самом деле позже у меня появилось странное поведение с ограничением skagent. В любом случае это устраняет только симптом, поэтому не рекомендуется.
Eike

Я до сих пор этим пользуюсь. Другой вариант - полностью отключить индексацию Xcode, но это хуже для меня. Если я этого не сделаю, Xcode будет индексировать на 100% каждый раз, когда я изменяю файл (в основном, 24 часа в сутки), и когда я набираю текст в редакторе, он печатает 1 символ каждые 2 секунды, что не может использоваться.
jptsetung

Что ж, это эффективный метод грубой силы для решения проблемы. Если это работает для вас, это хорошо. После этого у меня были сбои Xcode / swod. А затем я попробовал шаг 3 в ответе Киджана (т.е. не только удалить производные данные, но и удалить .xcuserdata из .xcworkspace), и теперь все снова в порядке. Не знал об этом ..
Eike

1

Была аналогичная проблема в Xcode 6.4. Индикатор выполнения показывает, что «Индексирование» было «Приостановлено». Пытался удалить project.xcworkspace, а затем удалить производные данные, как описано выше. Не помогло. Отметив, что в приведенных выше сообщениях также предлагается исправить предупреждения, и поскольку я унаследовал этот огромный проект со 180 предупреждениями, я сказал себе: «Какого черта это выглядит как хороший день для исправления предупреждений». Когда я исправлял предупреждения, через полчаса я заметил, что индикатор выполнения «Индексация» увеличился с 10% до примерно 20%. Через час он был на 50%, затем еще через час на 80%, затем еще через полчаса все было готово! Заключение: добавьте к приведенным выше предложениям «долго пообедайте или вздремните».


Думаю, это последнее средство для меня.
Ришаб

1

У меня возникла такая же проблема с бета-версией Xcode 7.0. В моем случае значения для «Provisioning Profile» и «Product bundle identifier» в «Build Settings» различались между PROJECT и TARGETS. Я установил для них такие же значения. И я также использовал те же значения для ЦЕЛЕЙ «appName» и «appNameTest». Затем закрыл проект и снова открыл его. Это решило мое дело.


1

В моем случае удаление каталога производных данных не помогло. По-видимому, у меня был файл, заблокированный другим процессом, потому что после закрытия нескольких окон терминала и emacs и завершения процесса реагирования-родного упаковщика все разрешилось.


То же самое, я ранее прервал восстановление Карфагена. Очевидно, не все процессы перестали работать, поэтому я полагаю, что некоторые файлы остались в использовании. Закрытие терминала и закрытие-повторное открытие XCode сделали свое дело.
CyberDude 08

1

Для себя я совершил глупую ошибку. Я пишу такой класс:

class A: A {
.......
}

Класс наследует сам себя, вызывающий зависание. Нет подсказки сообщения от Xcode.


Это очень вероятная причина. Так было в моем случае. Я почти уверен, что сталкивался с этим и раньше.
Форма

1

Я столкнулся с этой проблемой в некоторых проектах с Xcode 9.3.1, и в моем случае проблема связана с некоторым быстрым кодом, который по какой-то причине Xcode не нравится. Эту проблему сложно решить, потому что трудно определить, какой файл вызывает проблему.

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

  1. Удалите некоторые файлы
  2. Закройте Xcode
  3. Открыть Xcode
  4. Если индексирование завершено, попробуйте переименовать какой-либо метод, если он работает, вероятно, файлы, которые вы удалили, имеют что-то странное для Xcode.

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


Это действительно хорошее решение, поскольку оно позволяет определить узкое место даже в коде, который вы еще не писали. В моем случае это был неподдерживаемый pod / lib, и мне потребовалось несколько дней, чтобы идентифицировать его, поскольку никаких предупреждений не выводилось, даже с флагами «-Xfrontend -warn-long-expression-type-check = 300».
Cédric

0

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


0

Для меня причина была в том, что я открыл один и тот же файл одновременно в основном редакторе и помощнике . Как только я закрыл Ассистента редактора, все получилось. (Xcode версии 7.2.1)


0

Закройте свой Xcode, закройте любой клиент git (исходное дерево или терминал), если он открыт, и, наконец, перезапустите свой проект.


0

Столкнулся с этим недавно на XCode 7.3.1 - я заметил, что использование ОЗУ на CleanMyMac3 становится 100%. Проблема волшебным образом исчезла сама собой после того, как я перезапустил машину. Честно говоря, я уже пошел дальше и попробовал принятый ответ, так что вы захотите сделать то же самое перед перезапуском на всякий случай :-)


0

Я исправил это, просто удалив приложение со своего устройства и перестроив его.


0

У меня была такая же проблема в Swift 2.2

Это было связано с общей функцией, перегруженной функцией

func warnLog() {
    print("Warning line: \(#line) file: \(#file) ")
}

func warnLog<T>(input:T? = nil) -> T? {
    print("Warning line: \(#line) file: \(#file) ")
    return input
}

func warnLog<T>(input:T) -> T {
    print("Warning line: \(#line) file: \(#file) ")
    return input
}

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

func warnLog<T>(input:T? = nil) -> T? {
    print("Warning line: \(#line) file: \(#file) ")
    return input
}

0

Мой случай: это был не файл project.xcworkspace, это не была папка «Производные данные».

Я потратил много времени зря. Хуже того, нет сообщения об ошибке. Никакой подсказки со стороны Xcode. Совершенно потеряно.

Наконец, отвечает эта функция (с более чем 10 параметрами).

func animationFrames(level: Float,
                     image: String,
                     frame0: String,
                     frame1: String,
                     frame2: String,
                     frame3: String,
                     frame4: String,
                     frame5: String,
                     frame6: String,
                     frame7: String,
                     frame8: String,
                     frame9: String,
                     frame10: String) {
}

Чтобы сойти с ума! Правда в том, что это вызывает беспокойство (потому что нет синтаксической ошибки или какой-либо ошибки)


0

Для проблемы с индексированием XCode 9.3 - удалите XCode и установите заново с нуля. Работает для меня.


1
Размер XCode - не несколько килобайт. Это несколько ГБ.
iphondroid

0

Эта проблема возникла у меня, когда на моей машине не хватало места для подкачки. Закрыл несколько программ и вкладок браузера, и сборка внезапно завершилась успешно после 30 минут зависания. На моей стороне ничего общего с производными данными, заблокированными файлами и т. Д.


0

Перепробовал все перечисленное, индексация продолжает зависать. Это помогло мне: если ваша индексация зависла, и у вас есть один или несколько быстрых процессов, потребляющих 99% вашего процессора - просто убейте эти быстрые задачи, подождите немного, и прогресс должен двигаться. Он может повторяться, пока не дойдет до финиша, в моем случае я остановил процесс 7 раз, но в конце индексация завершилась!


0

Была эта проблема в проекте SwiftUI. Оказалось, что в одном из моих представлений SwiftUI была неправильно объявлена ​​переменная. Я имел:

@EnvironmentObject var roomViewModel

где мне нужно:

@EnvironmentObject var roomViewModel: RoomViewModel

Не было ошибки компилятора, просто бесконечное индексирование. После того как я исправил ошибку, проект быстро построился.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.