To NIE jest problem z wersją beta. Jestem na Xcode 6.0.1, wersja produkcyjna. Problem polega na tym, że kiedy próbuję zbudować lub uruchomić kod, nad którym pracuję, Xcode przestaje odpowiadać przez długi czas, a SourceKitService zużywa ponad 400% procesora (zgodnie z monitorem aktywności). Ten problem jest nowy od kilku dni, chociaż, co dziwne, korzystałem z Xcode 6.0, odkąd został oficjalnie wydany 17 września. Zaktualizowałem do 6.0.1, mając nadzieję, że będzie zawierał poprawkę dla tego problemu.
Masz jakiś pomysł, jaki może być problem?
Odpowiedzi:
Napotkałem ten problem z Xcode 6.1.1 wcześniej po południu (nie beta, oficjalna wydana wersja). Uruchomiłem kod na Playground i podejrzewałem, że to jest przyczyna. Procesor został ustalony na prawie 100%, a Xcode nie był w stanie ukończyć kompilacji.
Oto co zrobiłem:
1. Otwarto „Monitor aktywności”, który pokazał SourceKitService jako główny procesor.
2. W „Activity Monitor” dwukrotnie kliknąłem SourceKitService i kliknąłem sekcję „Otwórz pliki i porty”, co pokazało, że pracuje na plikach w katalogu / Users / myname / Library / Developer / Xcode / DerivedData / ModuleCache / dla określonego folderu.
3. Usunięto określony folder (z wiersza poleceń, używając rm -rf). Pamięć podręczna jest ponownie generowana w oparciu o Czy mogę bezpiecznie usunąć zawartość folderu danych pochodnych Xcode? .
4. Ponownie używając Monitora aktywności, wymuś zamknięcie SourceKitServer. Zobaczyłem już dobrze znany znak w Xcode, informujący, że SourceKitService uległ awarii (dlatego SourceKitService brzmiał znajomo!).
5. Powtórz krok 3.
Mac znów jest spokojny. Żadne dane nie zostały utracone, a Xcode nie musiał nawet być restartowany (co próbowałem bez powodzenia). Najważniejsze jest to, że ModuleCache wydaje się pobierać SourceKitService w pętli, a usunięcie folderu wydaje się to naprawiać. Mam nadzieję, że to działa również dla Ciebie.
Przypis:
Nawiasem mówiąc, przyczyną problemu z SourceKitService było to, że miałem zbyt długą deklarację tablicy w mojej klasie Swift. Miałem ponad 200 wpisów w tablicy. Zmniejszono go do 30 i błąd zniknął. Więc problem mógł powstać z powodu przepełnienia stosu w kodzie Apple (gra słów zamierzona).
źródło
Widziałem problem, ponieważ deklarowałem tablicę z około 60 elementami, która wyglądała tak:
Poprzez jawne opisanie typu w następujący sposób:
Udało mi się to zatrzymać. Myślę, że musi to mieć coś wspólnego z wnioskami typu Swift i sprawdzaniem typów, które powodują, że przechodzi w pętlę, gdy napotka długą tablicę.
To było w Xcode 6.2. Usunąłem też ModuleCache, jak opisano powyżej i teraz wszystko jest w porządku.
źródło
return ["a", "b", "c", "d", "e", "f"]
do funkcji, która zwraca[String]
, nadal miałoby to problem z wnioskiem o typie?Ten problem zdarzył się 10 razy, 8 razy, gdy podłączyłem rzeczywiste urządzenie i nie uruchomiłem symulatora.
Nie jestem pewien, czy moje rozwiązanie jest dobre, ale wydaje mi się, że problem wynikał z przełączania się między symulatorem a rzeczywistym urządzeniem. Może to zabrzmieć dziwnie, ale było tak, jakby powodowało zakłócenia między plikami pamięci podręcznej .
Co rozwiązało mój problem:
Alt + Shift + Command + K
Command + Shift + K
.Zasadniczo, zanim spróbujesz uruchomić na jakimkolwiek nowym urządzeniu, po prostu usuń dowolną pamięć podręczną.
EDYTOWAĆ
Po prostu miałem problem bez połączenia urządzenia. Po prostu zamknąłem Xcode i otworzyłem go ponownie, a problem zniknął. Nie jestem pewien, czy zgaduję, że może to być problem z ponownym indeksowaniem po pobraniu / ściągnięciu i scaleniu nowego kodu.
źródło
Rozwiązałem inny problem, który powodował, że SourceKitService zużywał do 13 GB pamięci ...
Miałem String (linia formatu z wieloma argumentami:
po wymianie na to działało dobrze (bez gromadzenia się pamięci i normalnego zużycia procesora)
źródło
Natknąłem się na ten problem z Xcode 9 i zbadałem kilka rozwiązań. Dla mnie wyłączenie kontroli źródła wydawało się działać.
Xcode -> Preferences -> Source Control -> uncheck "Enable Source Control"
Jeśli to nie zadziała, polecam użycie polecenia renice na terminalu . Więcej na ten temat tutaj
wyłączanie kontroli źródła
Inne kroki, które próbowałem, ale nie pomogły:
źródło
U mnie działało, aby usunąć dane pochodne. Wybierz „Produkt” z menu, przytrzymaj klawisz Alt i wybierz „Wyczyść folder kompilacji”. Skrót: Alt + Shift + Command + K.
źródło
rm -rf ~/Library/Developer/Xcode/DerivedData/ModuleCache/*
Zwróć uwagę na różnicę między zaakceptowaną odpowiedzią LNI a tą:
źródło
Spędzam 4 godziny na rozwiązywaniu problemów w długiej kompilacji mojego projektu. Pierwsza próba zajmuje 42 minuty.
/Users/myname/Library/Developer/Xcode/DerivedData/ModuleCache/
Wyczyszczam całą pamięć podręczną, zgodnie z sugestią @LNI, po ponownym uruchomieniuSourceKitService
i wprowadzeniu kilku zmian w kodzie:1) Do
Z
2) Do
Z
3)
Do
Z
W rezultacie czas kompilacji - 3 minuty, nie tak szybko, ale lepiej przez 42 minuty.
W rezultacie przed
SourceKitService
- zajmij ~ 5,2 GB pamięci, a po ~ 0,37 GBźródło
Miałem ten sam problem z SourceKitService.
Rozwiązałem. NIGDY NIE DODAJ PODGLĄDÓW ZA POMOCĄ FOR LOOP.
Aby wykryć problem, którego używam: https://github.com/RobertGummesson/BuildTimeAnalyzer-for-Xcode
źródło
Nie twórz słownika w swift bez określenia typów danych lub z [String: Any]
Jeśli użyjemy typu „Any”, kompilator może napotkać nieskończoną pętlę sprawdzania typu danych.
Nie spowoduje to żadnego błędu kompilacji, sprawi, że nasz Mac zawiesi się przy „kompilowaniu szybkich plików źródłowych”, uzyskując dużo pamięci dla zadań o nazwie „swift” i „SourceKitService”.
źródło
Miałem do czynienia z takim problemem. Usługa zestawu źródłowego zużywała 10 GB. Szybki proces w monitorze aktywności osiąga ponad 6 GB wykorzystania. Używałem następującego kodu:
var details: [String: Any] = ["1": 1, "2": 2, "3": 3, "4": 4, "5": 5, "6": 6, "7": 7, „8”: 8, „9”: 9, „10”: 10, „11”: 11, „12”: 12, „13”: 13, „14”: 14, „15”: 15, „16”: 16]
Zmieniłem kod na następujący, aby rozwiązać ten problem:
szczegóły var: [String: Any] = [:]
szczegóły ["1"] = 1
szczegóły ["2"] = 2
szczegóły ["3"] = 3
szczegóły ["4"] = 4
szczegóły ["5"] = 5
szczegóły ["6"] = 6
szczegóły ["7"] = 7
szczegóły ["8"] = 8
szczegóły ["9"] = 9
szczegóły ["10"] = 10
szczegóły ["11"] = 11
szczegóły ["12"] = 12
szczegóły ["13"] = 13
szczegóły ["14"] = 14
szczegóły ["15"] = 15
szczegóły ["16"] = 16
źródło
Problem nadal występuje w XCode 10.0. Możesz to naprawić, wyłączając opcję „Pokaż zmiany kontroli źródła” w opcjach kontroli źródła.
źródło
W obliczu tego samego problemu
Xcode 7.2 (7C68)
Rozwiązaniem było zaimplementowanie metody protokołu, którą moja klasa miała w definicji.
źródło
Jest to nadal problem w xcode w wersji 7.3.1 (7D1014). Przyczyną dla mnie była, jak wskazała LNI, zbyt długa tablica, właściwie nie tak długa. Rozwiązałem swój problem, dzieląc tablicę na różne tablice, takie jak to:
źródło
Miałem ten sam problem z XCode 8.2.1 (8C1002) i następującym kodem:
i te rozszerzenia:
Rozwiązałem to, komentując tę linię w TestViewController:
Znalezienie go zajęło mi ponad godzinę, mam nadzieję, że zaoszczędzę trochę czasu komuś innemu. Złożyłem raport o błędzie do Apple pod numerem 30103533
źródło
Miałem ten sam problem po migracji projektu do Swift 3, znajdź rozwiązanie, że zajęło to trochę czasu z powodu słowników i tablic utworzonych bez typu danych.
źródło
Takie zachowanie pojawiło się w moim projekcie, gdy przypadkowo zadeklarowałem klasę, która odziedziczyła po sobie. Xcode 8.2.1 przy użyciu języka Swift 3.
źródło
Miałem też ten problem, w moim przypadku deklarowałem dużą tablicę w ten sposób:
Rozwiązałem problem, dodając pozycje 1 w wierszu zamiast wszystkich jednocześnie:
to rozwiązało problem.
źródło
W przypadku projektów w ramach celu C:
Miałem ten sam problem i nie ma kodu Swift w naszym projekcie, więc nie był to moduł sprawdzania wnioskowania o typie.
Wypróbowałem tutaj każde inne rozwiązanie i nic nie działało - to, co KOŃCOWO naprawiłem to dla mnie, to ponowne uruchomienie komputera w trybie odzyskiwania i uruchomienie naprawy dysku. Wreszcie mogę znów pracować w spokoju!
Domyślam się, że stało się to z powodu zepsutych linków symbolicznych, prawdopodobnie wskazujących na siebie i powodujących, że usługa działa w nieskończonej pętli.
źródło
Mam podobny problem z Xcode 8.2.1 - z sekcją ponad 1000 wierszy kodu zakomentowanych za pomocą / * * /. Skomentowanie sekcji spowodowało problem, a usunięcie zakomentowanego kodu rozwiązało problem.
źródło
Wpadłem na coś podobnego, łącząc wiele ?? operatory, aby zapewnić domyślne dla opcjonalnych wartości ciągów.
Eksperymentowałem z poniższym kodem debugowania, gdy wentylator mojego zaufanego MacBooka Pro z połowy 2010 roku zaczął ciężko pracować. SourceKitService pochłaniał każdy cykl procesora, jaki mógł uzyskać. Komentowanie i usuwanie komentarzy w obraźliwej linijce było bardzo jasne, czym dławi się SourceKitService. Wygląda na to, że używasz więcej niż jednego? dostarczenie przez operatora wartości domyślnej jest problemem na starym komputerze. Problem polega na tym, że po prostu tego nie rób. Podziel go na wiele przypisań, co sprawia, że brzydki kod debugowania jest jeszcze brzydszy.
placeMark jest instancją klasy CLPlacemark. Właściwości użyte tutaj zwracają opcjonalne ciągi.
Używałem Xcode w wersji 8.3.2 (8E2002) działającego na systemie operacyjnym 10.12.4 (16E195)
źródło
"\() \()"
Zamiast tego warto byłoby spróbować (interpolacja ciągów)Przekształcenie długich tablic w funkcje wydaje mi się rozwiązywać problem:
do:
źródło
uruchomić w terminalu:
możesz również utworzyć polecenie terminala, używając tego aliasu:
a potem po prostu biegnij
źródło
https://www.logcg.com/en/archives/2209.html
SourceKitService przejął kontrolę nad wnioskami typu Swift.
zmienić na jawny typ
Zużycie procesora SourceKitService natychmiast spada。
źródło
Zdarzyło mi się w XCode 11.4.1 podczas wywoływania skryptów @dynamicMemberLookup wewnątrz bloku SwiftUI @ViewBuilder.
źródło
Miałem ten sam problem i był on spowodowany błędem programowania.
W moim przypadku implementowałem protokoły porównywalne i wyrównane, a parametry lhs.param i rhs.param nie odpowiadały parametrom klas lhs i rhs.
źródło