Xcode utknął na indeksowaniu


116

Projekt, nad którym pracowałem od 2 miesięcy, przestał działać bez powodu, ponieważ Xcode utknął na „Indeksowaniu”. Nie mogę już zbudować projektu. Jeśli próbuję budować, Xcode zawiesza się i muszę wymusić zakończenie. Dzieje się tak tylko w przypadku tego projektu.

Próbowałem wyczyścić wszystkie pochodne dane, ale nie pomogło.

Używam Xcode 4.5.2.

Jakieś pomysły?


Czy projekt jest powiązany z jakąś kontrolą wersji? Kiedy jest połączony z repozytorium, ma tendencję do regularnego sprawdzania statusu źródła, a następnie indeksowania plików. Jeśli Twój projekt jest duży, może to spowodować zablokowanie go podczas indeksowania.
gibertoni

Projekt nie jest taki duży. Dzisiaj dodałem framework GameKit, ale działał świetnie przez cały dzień. Kiedy miałem już ukończyć konfigurację Game Center, problem zaczął się. Mówię „Indeksowanie | Przetworzono 3 z 4 plików”. Czasami „0 z 1 pliku”, czasem 83 z 84 plików ... Myślę, że będę musiał stworzyć nowy projekt i skopiować i wkleić prawie wszystko. Będzie kilka godzin ...
tomDev

2
Apple i jego niesamowite możliwości mają ten sam problem na xcode 5
Roma-MT,

2
Mam ten problem w Xcode 9.1. Po 4 latach nadal mają ten sam problem: |
Sabri Meviş

3
Xcode 10 GM też
QED

Odpowiedzi:


163
  1. Otwórz folder projektu.
  2. Znajdź plik ProjectName.xcodeproj.
  3. Kliknij prawym przyciskiem myszy Kopiuj i wklej w bezpieczne miejsce.
  4. Kliknij prawym przyciskiem myszy Pokaż zawartość pakietu.
  5. Znajdź plik project.xcworkspace i usuń ten plik.
  6. Otwórz ponownie swój projekt, wyczyść i odbuduj.

Jeśli problem nie został rozwiązany, zastąp ten plik plikiem kopii zapasowej.


1
Nie można znaleźć pliku project.xcworkspace w pliku * .xcodeproj w programie xcode 6.2. Odpowiedź @ aleksandar-vacic zadziałała dla mnie.
Kie

xcode nadal wydaje się utknąć na "indeksowaniu | oczekiwaniu na xcodebuild", jednak kompiluje się pomyślnie, gdy naciskam przycisk odtwarzania, więc to już coś.
chiliNUT

3
Czy mógłbyś wyjaśnić, do czego służy ten plik / w jaki sposób jest powiązany z obecnym problemem?
de.

@marlonpya Wydaje mi się, że pracujesz z cocoapodami, w takim przypadku plik obszaru roboczego jest oddzielny od tego, o którym mówię. Tutaj mówię o pliku wewnątrz pliku .project. Mam nadzieję, że to pomoże, ale zawsze wykonuj kopię zapasową przed zmianą czegokolwiek w pliku projektu lub plikach obszaru roboczego.
Pratik Mistry

Podczas korzystania z cocoapods postępuj zgodnie z tymi samymi instrukcjami i otwórz folder główny plik .xcworkspace
Leap Hawk

70
  1. Zamknij ten projekt z Xcode
  2. Otwórz Xcode Organizer, znajdź problematyczny projekt
  3. Usuń folder danych pochodnych w Organizatorze
  4. Zamknij / ponownie otwórz Xcode

Nuking Derived Data to pierwsza rzecz, którą należy wypróbować we wszystkich przypadkach niewłaściwego zachowania Xcode


9
Zauważ, że w Xcode 6.4 powinieneś przejść do Okna → Projekty zamiast do Organizatora.
kennytm

O wiele prostsze rozwiązanie niż zaakceptowana odpowiedź, dzięki!
Tim,

8
Dane pochodne znajdują się w katalogu ~ / Library / Developer / Xcode / DerivedData / na moim komputerze.
Suragch

23

Miałem dokładnie ten problem, był on spowodowany przez 20-elementowy literał tablicy. Musiałem przejść na inną składnię. Całkiem głupie.


4
Dla mnie to samo. Działa dla tablicy 4x4. Tablica 6x6 była za dużo dla xcode ... dramat
dfens

@Jehan Masz rację, ale jeśli zdefiniujesz typ tablicy, to nie zajmie to czasu, wtedy mój problem został rozwiązany. Na przykład let propertyType: [[[String: String]]] = [[["propertyKey": "All Types"], ["propertyKey": "House"]], [["propertyKey": "Apartment & Unit" ], ["propertyKey": "Townhouse"]] ....... Tak więc] Jeśli nie zdefiniujesz typu, zajmie to więcej czasu
Shrikant K

2
Dla mnie to samo. To absolutnie dziwaczna i prawdziwa porażka ze strony Apple i Xcode
wuf810

1
Jak znaleźć miejsca w kodzie, z którymi kompilator utknął?
Tomasz Nazarenko

1
@TomaszNazarenko - Zobacz moją odpowiedź poniżej. Możesz pobrać xcode, aby ostrzec Cię o kodzie, którego wykonanie trwa zbyt długo.
greencardigan

18
  1. Zamknij wszystkie otwarte Xcode
  2. rm -rf ~/Library/Developer/Xcode/DerivedData
  3. Kliknij prawym przyciskiem myszy PROJECT_NAME.xcworkspace, wybierz „pokaż zawartość” i usuń folder „xcuserdata”

9

Miałem podobny problem i stwierdziłem, że przypadkowo zdefiniowałem klasę jako jej własną podklasę. Nie otrzymałem żadnego ostrzeżenia ani błędu, ale kompilacja utknęła.

class mainClass : mainClass
{
    ...
}

W rzeczywistości było to rozwiązanie problemu indeksowania, które utknęło w moim przypadku. Świetna odpowiedź!
rghome

Dlaczego powoduje to (skutecznie) awarię podprocesu Xcode i nie powoduje błędu, jak każdy inny błąd w kodzie?
Kirkland

8

Podczas korzystania z Xcode 6 i mówi

Czekam na markę

Możliwe, że wystąpienie make już działa. Zabij proces i indeksowanie postępów. Głupie, ale działało dla mnie.


To naprawiło to dla mnie. Miałem kontener Docker działający z "make start" w tle.
Devin Young

7

Kolejna rzecz, którą możesz wypróbować, jeśli próbujesz rozwiązać problemy z indeksowaniem i jesteś tak daleko na stronie!

Spróbuj dodać tę flagę do ustawień kompilacji.

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

flaga ustawień kompilacji

Spowoduje to ostrzeżenie, gdy kompilator będzie potrzebował dużo czasu na wywnioskowanie złożonego wyrażenia.

ostrzeżenie

Może to spowodować błąd kompilacji, który zniknie po znalezieniu wolnych wyrażeń, a następnie usunięciu flagi kompilacji.


To jest doskonała i dokładna odpowiedź.
jaya raj


4

Jest to błąd Xcode (Xcode 8.2.1) i zgłosiłem to firmie Apple, będzie się to działo, gdy masz duży literał słownikowy lub zagnieżdżony literał słownikowy. Musisz podzielić słownik na mniejsze części i dodawać je metodą dołączania, dopóki Apple nie naprawi błędu.


4
  • Najpierw odłącz się od sieci. Zarówno sieć przewodowa, jak i bezprzewodowa powinny się wyłączyć.
  • Po drugie, zabij com.apple.dt.SourceKitServiceproces. Następnie XCode zacząłby ponownie indeksować zamiast utknąć.

wprowadź opis obrazu tutaj


1
Wydaje się, że nazywa się com.apple.dt.SKAgentw Xcode 10.
lemonmojo

3

Dla mnie całkowite zamknięcie Xcode i ponowne uruchomienie projektu zadziałało.

Nie jest to rozwiązanie pierwotnego pytania, nie sądzę, ale przed usunięciem plików i folderów jest jeszcze jedna prosta rzecz, którą należy wypróbować, itp. Podziękowania dla tej odpowiedzi za pomysł.


3

To mi się przydarzyło. Jeśli używasz cocoapods, zrób to:

  1. Usuń project.xcworkspace
  2. Zainstaluj ponownie pody, używając opcji „pod install” na terminalu
  3. Utworzy nowy projekt. Xcworkspace
  4. Otwórz nowy projekt.xcworkspace -> Wyczyść -> Kompiluj

1
Dziękuję Ci. Mam problem z xcode11.1 i to działa dla mnie
Rahul Parikh

1
Miałem ten problem z Xcode 11.5, naprawiony przez to.
frankenapps

2

Miałem podobny problem, w którym Xcode spędzał dużo czasu na indeksowaniu i często zawieszał się budowanie projektu, w którym to momencie musiałem wymusić zamknięcie i ponowne uruchomienie Xcode. To było bardzo irytujące.

Wtedy zauważyłem ostrzeżenie w projekcie o niewłaściwym przydzieleniu selfjako delegat. Rzeczywiście, w deklaracji klasy brakowało protokołu. Zwróć uwagę, że istnieje podobne przypisanie w przykładowym kodzie PO (chociaż nie można stwierdzić na podstawie próbki, czy zadeklarowano prawidłowy protokół):

leaderboardController.leaderboardDelegate == self;

Po usunięciu tego ostrzeżenia (poprzez prawidłowe zadeklarowanie zaimplementowanego protokołu) Xcode przestał działać nieprawidłowo. Ponadto, należy pamiętać, że mam projekt nie wykonać poprawnie od metody protokołu zostały wdrożone. Po prostu Xcode nie mógł potwierdzić, że protokół powinien faktycznie zostać zaimplementowany przez klasę.


2

Nic nie pracował dla mnie, mój projekt jest zbyt duży (scalanie obiektywne c, c++, swiftoraz javapliki z j2obj). Wyłączyłem indeksowanie Xcode i przez miesiące pracowałem bez dokończenia kodu (i to jest uciążliwe). Ale w końcu znalazłem obejście. Chodzi o to, aby Xcode indeksował kod, ale aby ograniczyć użycie procesora za pomocą zewnętrznego narzędzia, takiego jakcputhrottle .

Więc najpierw musisz zainstalować cputhrottle w terminalu

napar zainstalować cputhrottle

Następnie ogranicz proces indeksowania Xcode w ten sposób (20 = 20%)

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

Przedstawiłem tutaj moje „rozwiązanie” ze szczegółami dotyczącymi trybu: Jak zapobiec używaniu przez Xcode 100% procesora podczas indeksowania dużych projektów


To pomaga, chociaż cputhrottle nie jest już w homebrew. Zamiast tego możesz użyć cpulimit, który ma nieco inną składnię: "sudo cpulimit -l 20 -p $ (pgrep -f com.apple.dt.SKAgent)" - Chociaż teraz mogę ponownie śledzić (wcześniej niemożliwe), Wolałbym dowiedzieć się, jak długo trwa indeksowanie i pominąć to w indeksowaniu, ale nie mam pojęcia, co to jest, jak się dowiedzieć ani jak coś pominąć (podejrzewam, że niektóre większe pliki binarne z linkami, a może nawet przyspiesz? ? Kompiluję tylko C ++, nie używam Swift) ..
Eike

Ok, będę musiał wiosłować z powrotem. Wydawało się, że pomogło, ale w rzeczywistości później dostałem dziwne zachowanie z cpulimitującym skagentem. To i tak dotyczy tylko objawu, więc nie jest zalecane.
Eike

Nadal tego używam. Innym wyborem jest całkowite wyłączenie indeksowania Xcode, ale to jest dla mnie najgorsze. Jeśli tego nie zrobię, Xcode indeksuje w 100% za każdym razem, gdy modyfikuję plik (czyli w zasadzie 24h / 24), a kiedy piszę w edytorze, drukuje 1 znak co 2 sekundy, nie nadający się do użytku.
jptsetung

Cóż, jest to skuteczna, choć brutalna metoda rozwiązania problemu. Jeśli to działa, to dobrze. Miałem awarie Xcode / swod po zrobieniu tego. Następnie wypróbowałem krok 3 w odpowiedzi Kijans (tj. Nie tylko usunąć dane pochodne, ale także usunąć .xcuserdata z .xcworkspace) i teraz znowu wszystko jest w porządku. Nie wiedziałem o tym ..
Eike

1

Miałem podobny problem w Xcode 6.4. Pasek postępu wskazywał, że „Indeksowanie” było „Wstrzymane”. Próbowano usunąć projekt.xcworkspace, a następnie usunąć pochodne dane, jak opisano powyżej. Wydawało się, że nie pomaga. Zauważając, że powyższe posty również sugerują naprawianie ostrzeżeń, a ponieważ odziedziczyłem ten ogromny projekt ze 180 ostrzeżeniami, powiedziałem sobie: „Jak to wygląda, do diabła, dobry dzień na naprawianie ostrzeżeń”. Gdy naprawiałem ostrzeżenia, pół godziny później zauważyłem, że pasek postępu „Indeksowanie” wzrósł z 10% do około 20%. Godzinę później było już 50%, potem kolejna godzina 80%, a po kolejnej pół godzinie było już gotowe! Wniosek: Dodaj „długi obiad lub drzemkę” do powyższych sugestii.


Myślę, że to dla mnie ostatnia deska ratunku.
Rishab

1

Doświadczyłem tego samego problemu w przypadku Xcode 7.0 beta. W moim przypadku wartości „Profil obsługi administracyjnej” i „Identyfikator pakietu produktów” w „Ustawieniach kompilacji” różniły się między wartościami PROJECT i TARGETS. Ustawiłem dla nich te same wartości. Użyłem też tych samych wartości dla CELÓW „appName” i „appNameTest”. Następnie zamknął projekt i ponownie go otworzył. To rozwiązało moją sprawę.


1

W moim przypadku usunięcie katalogu danych pochodnych nie pomogło. Najwyraźniej miałem plik zablokowany przez inny proces, ponieważ po zamknięciu kilku okien terminala i emacsa oraz zakończeniu procesu natywnego programu pakującego, wszystko się rozwiązało.


To samo tutaj, wcześniej przerwałem odbudowę Kartaginy. Najwyraźniej nie wszystkie procesy przestały działać, więc przypuszczam, że niektóre pliki pozostają w użyciu. Zamknięcie terminala i zamknięcie-ponowne otwarcie XCode załatwiło sprawę.
CyberDude

1

Dla mnie popełniłem głupi błąd. Piszę taką klasę:

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

Klasa dziedziczy samą siebie, która powoduje zamrożenie. Brak wskazówki dotyczącej wiadomości od Xcode.


To bardzo prawdopodobna przyczyna. Tak było w moim przypadku. Jestem prawie pewien, że spotkałem się z tym też wcześniej.
Formularz

1

Doświadczyłem tego problemu w niektórych projektach z Xcode 9.3.1 iw moim przypadku problem jest spowodowany szybkim kodem, który z jakiegoś powodu Xcode nie lubi. Ten problem jest trudny do rozwiązania, ponieważ trudno jest znaleźć plik powodujący problem.

Kiedy mam ten problem, usuwam niektóre pliki z projektu Xcode (usuwanie odniesień) i próbuję sprawdzić, czy indeksowanie działa. Mój proces, aby to zrobić

  1. Usuń niektóre pliki
  2. Zamknij Xcode
  3. Otwórz Xcode
  4. Jeśli indeksowanie zakończy się, spróbuj zmienić nazwę jakiejś metody, jeśli działa, prawdopodobnie pliki, które usunąłeś, mają coś dziwnego dla Xcode.

W moim przypadku miałem definicję klasy z reaktywnym rozszerzeniem w tym samym pliku iz jakiegoś powodu Xcode tego nie lubi, przeniosłem reaktywne rozszerzenie do innego pliku i teraz indeksowanie działa dobrze.


To naprawdę dobre rozwiązanie, ponieważ pozwala zidentyfikować wąskie gardło nawet w kodzie, którego nie napisałeś. W moim przypadku był to nieobsługiwany pod / lib i zajęło mi wiele dni, aby go zidentyfikować, ponieważ nie pojawiło się żadne ostrzeżenie, nawet z flagami „-Xfrontend -warn-long-expression-type-testing = 300”.
Cédric

0

Zatrzymaj także uruchomioną aplikację. jeśli masz inną aplikację działającą z Twoim xcode, najpierw ją zatrzymaj, a indeksowanie powinno być kontynuowane.


0

W moim przypadku przyczyną było to, że otworzyłem ten sam plik jednocześnie w głównym edytorze i asystencie . Kiedy zamknąłem Assistant Editor, to się udało. (Xcode w wersji 7.2.1)


0

Zamknij swój Xcode, zamknij dowolnego klienta git (drzewo źródłowe lub terminal), jeśli jest otwarty, i na koniec zrestartuj projekt.


0

Zmierzyłem się z tym ostatnio w XCode 7.3.1 - zauważyłem, że użycie pamięci RAM idzie w 100% do CleanMyMac3. Problem magicznie naprawił się po ponownym uruchomieniu komputera. Jednak szczerze mówiąc, już poszedłem naprzód i wypróbowałem zaakceptowaną odpowiedź, więc na wszelki wypadek będziesz chciał zrobić to samo przed ponownym uruchomieniem :-)


0

Naprawiłem to, po prostu usuwając aplikację z mojego urządzenia i przebudowując.


0

Miałem ten sam problem w Swift 2.2

Miało to związek z funkcją przeciążoną funkcją ogólną

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
}

wszystko, co musiałem zrobić, to usunąć jedno z nieużywanych przeciążeń

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

0

Mój przypadek: to nie był plik project.xcworkspace, nie był to folder danych pochodnych.

Zmarnowałem dużo czasu. Gorzej, brak komunikatu o błędzie. Brak wskazówek ze strony Xcode. Całkowicie zagubiony.

Wreszcie ta funkcja (z więcej niż 10 parametrami) jest odpowiedzialna.

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) {
}

Zwariować! Prawda jest taka, że ​​jest to niepokojące (ponieważ nie ma błędu składniowego ani żadnego typu)


0

W przypadku problemu z indeksowaniem XCode 9.3 - Odinstaluj XCode i zainstaluj ponownie od zera. Pracuje dla mnie.


1
Rozmiar XCode to nie kilka KB. To kilka GB.
iphondroid

0

Ten problem wystąpił, gdy na moim komputerze brakowało miejsca na wymianę. Zamknięto kilka programów i kart przeglądarki, a kompilacja nagle się udała po 30 minutach utknięcia w miejscu. Nie ma to nic wspólnego z danymi pochodnymi, zablokowanymi plikami itp. Po mojej stronie.


0

Wypróbowałem wszystkie wymienione rzeczy, indeksowanie ciągle się zawiesza. Pomogło mi to: jeśli twoje indeksowanie jest zawieszone i jeden lub więcej szybkich procesów pochłania 99% twojego procesora - po prostu zabij to szybkie zadanie (a), poczekaj chwilę, a postęp powinien się przesunąć. Może się powtarzać, aż dojdzie do końca, w moim przypadku zabiłem ten proces 7 razy, ale na koniec indeksowanie zostało zakończone!


0

Miałem ten problem w projekcie SwiftUI. Okazało się, że jeden z moich widoków SwiftUI zawierał nieprawidłowo zadeklarowaną zmienną. Miałem:

@EnvironmentObject var roomViewModel

gdzie potrzebowałem:

@EnvironmentObject var roomViewModel: RoomViewModel

Nie wystąpił błąd kompilatora, tylko niekończące się indeksowanie. Po naprawieniu błędu projekt szybko się zbudował.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.