Xcode застряг на індексації


116

Проект, над яким я працював 2 місяці, перестав працювати без жодної причини, оскільки Xcode застряг на "Індексації". Я більше не можу будувати проект. Якщо я спробую створити, Xcode застигає, і мені доведеться змусити вийти. Це відбувається лише з цим проектом.

Я спробував очистити всі отримані дані, але не допомогло.

Я використовую Xcode 4.5.2.

Будь-які ідеї?


Чи пов'язаний проект з якимось контролем версій? Коли він пов'язаний із сховищем, він, як правило, регулярно перевіряє стан джерела і після цього індексує файли. Якщо ваш проект великий, це може спричинити його застрявання при індексації.
gibertoni

Проект не такий великий. Сьогодні я додав фреймворк GameKit, але він працював чудово весь день. Коли я збирався закінчити налаштування ігрового центру, проблема почалася. Я кажу "Індексація | Оброблено 3 з 4 файлів". Іноді "0 з 1 файлу", іноді 83 з 84 файлів ... Я думаю, мені доведеться створити новий проект і скопіювати та вставити майже все. Буде через пару годин ...
tomDev

2
Apple і його приголомшливість мають однакову проблему з xcode 5
Roma-MT

2
Я зіткнувся з цією проблемою на Xcode 9.1. Через 4 роки вони все ще мають таку ж проблему: |
Сабрі Мевіш

3
Xcode 10 GM також
QED,

Відповіді:


163
  1. Відкрийте папку проекту.
  2. Знайдіть файл ProjectName.xcodeproj.
  3. Клацніть правою кнопкою миші Скопіюйте та вставте в безпечне місце.
  4. Клацніть правою кнопкою миші Показати зміст пакета.
  5. Знайдіть файл project.xcworkspace і видаліть цей файл.
  6. Повторно відкрийте свій проект, очистіть і відновіть.

Якщо ваша проблема не вирішена, замініть файл на файл резервної копії.


1
Неможливо знайти файл project.xcworkspace у файлі * .xcodeproj на xcode 6.2. Відповідь александра-вацича спрацювала на мене.
Киї

Xcode все ще, здається, застряг на "індексації | чекає xcodebuild", однак він успішно будується, коли я натискаю на гру, тож щось.
chiliNUT

3
Чи можете ви детальніше розповісти, для чого цей файл / як він пов'язаний з проблемою?
де.

@marlonpya Я думаю, ви працюєте з cocoapods, у цьому випадку файл робочої області є окремим, від якого я говорю. Тут я говорю про файл всередині .project файла. Сподіваємось, це допомагає, але завжди робити резервну копію, перш ніж щось змінювати на файлах проекту чи файлах робочої області.
Pratik Mistry

Використовуючи cocoapods, дотримуйтесь тих же вказівок та відкрийте кореневу папку .xcworkspace файл
Leap Hawk

70
  1. Закрийте цей проект від Xcode
  2. Відкрийте Xcode Organizer, знайдіть проблемний проект
  3. Видаліть папку Отримані дані в Організаторі
  4. Закрийте / відкрийте Xcode

Запущення отриманих даних - це перше, що потрібно спробувати у всіх випадках неправильного поведінки Xcode


9
Зауважте, що в Xcode 6.4 вам слід перейти до Вікна → Проекти замість Організатора.
kennytm

Шлях простіше рішення, ніж прийнята відповідь, дякую!
Тім

8
Отримані дані знаходяться в ~ / Бібліотеці / розробнику / Xcode / DerivedData / на моїй машині.
Сурагч

23

У мене була така точна проблема, вона була викликана буквальним масивом з 20 пунктів. Довелося перейти на інший синтаксис. Досить нерозумно.


4
Те саме для мене. Працює для масиву 4x4. Масив 6x6 був занадто багато для xcode ... драми
dfens

@Jehan Ви маєте рацію, але якщо ваш тип масиву визначить, це не займе часу, тоді моя проблема буде вирішена. Як, наприклад, дозвольте propertyType: [[[String: String]]] = [[["propertyKey": "Усі типи"], ["propertyKey": "House"]], [["propertyKey": "Квартира та одиниця") ], ["propertyKey": "Таунхаус"]] ....... Так далі] Якщо ви не визначаєте тип, це займе більше часу
Shrikant K

2
Те саме для мене. Це абсолютно химерний і справжній збій з боку Apple і Xcode
wuf810

1
Як дізнатися ті місця в коді, до яких застряг компілятор?
Томаш Назаренко

1
@TomaszNazarenko - Дивіться мою відповідь нижче. Ви можете отримати xcode, щоб попередити вас про код, який займає занадто багато часу для розробки.
greencardigan

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

9

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

class mainClass : mainClass
{
    ...
}

Насправді це було рішенням того, як індексація застрягла в моєму випадку. Чудова відповідь!
rghome

Чому це викликає (фактично) збій підпроцесу Xcode і не створює помилки, як будь-які інші помилки коду?
Кіркленд

8

При використанні Xcode 6 і він говорить

Чекаю зробити

Можливо, екземпляр make вже запущений. Вбийте процес та продовжуйте індексацію. Дурний, але працював на мене.


Це зафіксувало це для мене. У мене був контейнер Docker, який працює з "make start" на задньому плані.
Девін Янг

7

Інша справа, якщо ви намагаєтеся вирішити проблеми з індексуванням, і ви так далеко внизу сторінки!

Спробуйте додати цей прапор до налаштувань збірки.

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

побудувати прапор налаштувань

Це призведе до попередження, коли компілятору знадобиться тривалий час, щоб вивести складний вираз.

увага

Це може призвести до помилки збірки, яка піде після виявлення повільних виразів, а потім видалення прапора збірки.


Це ідеальна і точна відповідь.
jaya raj


4

Це помилка Xcode (Xcode 8.2.1), і я повідомив, що Apple, це станеться, коли у вас є великий словник буквальний або вкладений літеральний словник. Вам потрібно розбити словник на більш дрібні частини та додати їх методом додавання, поки Apple не виправить помилку.


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

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


1
Здається, його називають com.apple.dt.SKAgentу Xcode 10.
limmojojo

3

Для мене повністю закрили Xcode, а потім перезапустили проект, що працював.

Це не рішення вихідного питання, я не вірю, але це ще одна проста річ спробувати перед видаленням файлів і папок і т. Д. Заслуговуйте на цю відповідь за ідею.


3

Це сталося зі мною. Якщо ви використовуєте какаоди, зробіть це:

  1. Видалити проект.xcworkspace
  2. Перевстановіть стручки за допомогою "pod install" на терміналі
  3. Це створить новий проект.xcworkspace
  4. Відкрийте новий проект.xcworkspace -> Очистити -> Створити

1
спасибі. Я зіткнувся з проблемою в xcode11.1, і це працює для мене
Рахул

1
Була проблема з Xcode 11.5, виправлена ​​цим.
frankenapps

2

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

Тоді я помітив у проекті попередження про неналежне призначення selfделегата. Звичайно, у декларації класу відсутній протокол. Зауважте, що в зразковому коді ОП є подібне призначення (хоча зразки неможливо сказати, чи оголошено правильний протокол):

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 вже немає в домашній мові. Ви можете використовувати замість cpulimit, який є, але має дещо інший синтаксис: "sudo cpulimit -l 20 -p $ (pgrep -f com.apple.dt.SKAgent)" - Хоча зараз я можу знову простежити (неможливо раніше), Я вважаю за краще дізнатися, що так довго займає індексація та пропуск, ніж індексація, але я не маю поняття, що це таке, як це дізнатись, або як щось пропустити (я підозрюю, що більш великі пов'язані бінарні файли чи, можливо, навіть прискорені? "Я компілюю лише C ++, не користуюся Swift) ..
Ейке

Гаразд, мені доведеться зірватися на це. Здавалося, це допомогло, але насправді я отримав якусь дивну поведінку пізніше з cpulimiting skagent. Це все одно стосується лише симптому, тому не рекомендується.
Ейке

Я все ще використовую це. Інший вибір - повністю відключити індексацію Xcode, але це для мене найгірше. Якщо я цього не роблю, Xcode продовжує індексуватись на 100% щоразу, коли я змінюю файл (так, головним чином, 24 години / 24), і коли я друкую в редакторі, він друкує 1 символ кожні 2 секунди, не застосовується.
jptsetung

Ну, це ефективний метод, коли груба сила вирішує проблему. Якщо це працює для вас, це добре. У мене виникли збої / коди Xcode після цього. І тоді я спробував крок 3 у відповіді Kijans (тобто не тільки видалити отримані дані, але видалити .xcuserdata з .xcworkspace) і тепер все знову добре. Не знав про те ..
Ейке

1

Аналогічна проблема була в Xcode 6.4. Рядок прогресу вказував, що "Індексування" було "Призупинено". Спробували видалити project.xcworkspace, а потім видалити отримані дані, як описано вище. Не виявилося, щоб допомогти. Зауваживши, що вищезгадані повідомлення також пропонують виправити попередження, і оскільки я успадкував цей величезний проект зі 180 попередженнями, я сказав собі: "Що за чорт, це виглядає як вдалий день для виправлення попереджень". Коли я виправляв попередження, через півгодини я помітив, що панель прогресу "Індексація" зросла з 10% до приблизно 20%. Через годину це було 50%, потім ще годину до 80%, потім ще через півгодини це було зроблено! Висновок: До вищезазначених пропозицій додайте "довгий обід чи дрімоту".


Я думаю, що це остання можливість для мене.
Ришаб

1

У мене виникла та сама проблема для Xcode 7.0 beta. У моєму випадку значення "Надання профілю" та "Ідентифікатор набору продуктів" "Налаштування збірки" відрізнялися між PROJECT та TARGETS. Я встановлюю для них однакові значення. А також я використовував однакові значення для ЦІЛЬ "appName" та "appNameTest". Потім закрили проект і його знову відкрили. Це вирішило мою справу.


1

У моєму випадку видалення отриманого каталогу даних не допомогло. Мабуть, у мене був файл, заблокований іншим процесом, тому що після закриття пари вікон терміналів та emacs та завершення процесу, що відповідає натисненному на упаковці, все вирішилось.


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

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-express-type-testing = 300".
Седрик

0

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


0

Для мене причиною було те, що я відкрив один і той же файл як в первинному редакторі, так і в помічнику редактора одночасно. Як тільки я закрив помічника редактора, він перейшов. (Версія Xcode 7.2.1)


0

Закрийте свій Xcode, закрийте будь-який клієнт git (дерево джерела чи термінал), якщо він відкритий, і, нарешті, перезапустіть проект.


0

Нещодавно зіткнувшись з цим на XCode 7.3.1 - для мене я помітив, що використання оперативної пам’яті переходить на 100% до CleanMyMac3. Проблема магічно вирішилась після перезавантаження машини. Чесно кажучи, я вже пішов і спробував прийняти відповідь, тому вам захочеться зробити те саме, перш ніж перезапустити на всякий випадок :-)


0

Я вирішив це, просто видаливши додаток зі свого пристрою та відновивши його.


0

У мене був такий самий випуск у швидкому 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.