Jak naprawić błąd PCH?


132

Kiedy próbuję zbudować moją aplikację Xcode, pojawia się ten komunikat o błędzie:

Plik PCH zbudowany z innej gałęzi ((clang-425.0.24)) niż kompilator ((clang-425.0.27))

Wcześniej się to nie zdarzało, ale była to pierwsza kompilacja po aktualizacji Xcode.

Inne aplikacje działają, ale nie ta konkretna.

Jeśli wyłączę "Precompile Prefix Header"ustawienie, działa.

Jak naprawić ten błąd i nadal zachować to ustawienie?

Odpowiedzi:


246

Często jest to problem z pamięcią podręczną. Zwykle można to rozwiązać, przytrzymując klawisz Option i wybierając opcję Produkt> Wyczyść folder kompilacji ...


3
To nie naprawiło błędu. Przeprowadziłem również pełne czyszczenie i usuwanie danych pochodnych.
— Ben S

6
Pracował dla mnie, z wyjątkiem tego, że był pod Product> Cleani nie potrzebowałem klawisza polecenia. (Xcode 4.6.1)
— Steve Haley

1
@SteveHaley Jest Product > Clean, ale wykonuje mniej dokładną pracę. Niektórzy ludzie mogą kupić za pomocą Product > Clean, dla większości Product > Clean Build Folder...jest to wystarczające, a inni potrzebują ręcznego usuwania, jak wskazano w odpowiedzi @Sedes poniżej.
— gaige

7
Znam jego stare pytanie, ale wyżej wymieniona poprawka mi nie pomogła. Wystarczy usunąć pochodne dane i ponownie zbudować projekt.
— Ankit Jain

2
czy możesz po prostu zrobić rm -rf / ios / build?
— SuperUberDuper

47

Usuń DerivedDatafolder projektu. Zajrzyj do preferencji Xcode -> Lokalizacje, aby zobaczyć, gdzie go zapisujesz.


Ważne jest, aby pamiętać, że DerivedDataniekoniecznie jest to miejsce, w którym znajduje się twój Buildfolder, to mi bardzo pomogło, dzięki!
— Nit

1
kasowania moduleCachewewnątrz DerivedDatazbyt
— whtlnv

Najpierw powinieneś spróbować „wyczyścić”, jak mówią inne odpowiedzi. Gdy to nie zadziała, po prostu rekurencyjnie usuwałbym cały DerivedDatafolder… „nuke z orbity… jedyny sposób, aby mieć pewność”. @whitelionV to również rm moduleCachei wszystko inne tam.
— wcochran

39

Wygląda na to, że produkt> Clean Build Folder ... (z wciśniętym klawiszem Option) działa dla większości ludzi. Zobacz wybraną odpowiedź autorstwa @gaige.

Jeśli nie jesteś podobny do większości ludzi (łącznie ze mną) i nadal powoduje to kłopoty, XCode prawdopodobnie zostawił twoje współdzielone, prekompilowane nagłówki gdzie indziej. U mnie były w folderze podobnym do tego:

/var/folders/<some random two characters>/<some random string>/C/com.apple.Xcode.502/SharedPrecompiledHeaders

Właśnie usunąłem cały folder SharedPrecompiledHeaders i to rozwiązało problem. Nie chciałbym tu jednak dotykać zbyt wiele ...


2
To rozwiązało ten problem. Dla mnie to dlatego, że mam kompilację opartą na wierszu poleceń.
— ThomasW

2
Jeśli tak jest w Twoim przypadku, możesz znaleźć ten folder w transkrypcji kompilacji Xcode. Szukałem ciąg „SharedPrecompiledHeaders”
— Jose Manuel Sanchez

6
Tak, to jest właściwe rozwiązanie. Szczególnie jeśli budujesz z wiersza poleceń lub masz skrypt budujący. Lokalizację prekompilowanego nagłówka można znaleźć w ustawieniach kompilacji, „Lokalizacje kompilacji” -> Ścieżka pamięci podręcznej prekompilowanych nagłówków.
— karim

Jak znaleźć katalog var?
— GoldenJoe,

1
@GoldenJoe Otwórz wyszukiwarkę Shift-Cmd-Gi wpisz/var
— Sedes

23

Przejdź do Preferencje Xcode-> Lokalizacje (jak wspomniano w odpowiedzi przez wcochran) i po prostu zmień nazwę swojego folderu DerivedData. Po prostu zmieniłem mój z „DerivedData” na „DerivedData2”, co zmusiło system do zaprzestania odwoływania się do starej lokalizacji. To rozwiązało problem, gdy żadna z pozostałych odpowiedzi nie zadziałała. Zobacz zdjęcie:

wprowadź opis obrazu tutaj


15

Żadna z innych opcji nie działała dla mnie, oto co to naprawiło:

Usunąłem folder pamięci podręcznej w /Users/(Yourname)/Library/Developer/Xcode/DerivedData/ModuleCache/(zmiana nazwy też działa).

Spróbuj usunąć folder wymieniony w błędzie, jeśli twój błąd wygląda mniej więcej tak:

PCH was compiled with module cache path '/Users/User/Library/Developer/Xcode/DerivedData/ModuleCache/75YIWZVTEAO8', but the path is currently '/Users/Stan/Library/Developer/Xcode/DerivedData/ModuleCache/75YIWZVTEAO8


Tak masz rację. Żadne z powyższych nie działa dla mnie. Po prostu usuń wspomniany folder i odbuduj, to wszystko.
— Zhang Buzz

To jest poprawna odpowiedź. Wyczyść / usuń DerivedData nie działa po przeniesieniu projektu na inną ścieżkę.
— Bill Chan


13

W katalogu projektu ios przejdź do budowania i usuwania folderu ModuleCache . Uruchom react-native run-iosponownie, powinno działać zgodnie z oczekiwaniami. Podsumowanie -rm -rf ios/build/ModuleCache


Tak, również w przypadku react-native i build działa z Xcode, ale nie z CLI przy użyciu npm run ios. Usunięcie pamięci podręcznej zgodnie z sugestią rozwiązało problem.
— dakt

6

Po aktualizacji Xcode otrzymywałem to z wieloma projektami. Clean Build Folder i Clean nie przyniosły żadnego efektu - odpowiedź @sedes i komentarz @ josema.vitaminew zrobiły to za mnie. Ale może to być trudne, chyba że użyjesz odrobiny sprytu, więc oto skrót krok po kroku:

  1. przejdź do dziennika kompilacji, który się nie powiódł
  2. użyj cmd-f "SharedPrecompiledHeaders", aby go znaleźć (będzie w środku ogromnej, okropnej złożonej linii poleceń)
  3. przeciągnij-zaznacz tekst "SharedPrecompiledHeaders" i wszystkie znaki PRZED, ale NIE PO nim, aż dojdziesz do początku bitu ścieżki (nadal w środku dużego bloku tekstu) np. dla mnie: "/ var / folders / 03 /n71d4r551jv40j5nb8r9fjy80000gn/C/com.apple.Xcode.501/SharedPrecompiledHeaders
  4. otwórz Finder
  5. menu: Idź -> Idź do katalogu ...
  6. skopiuj / wklej wybraną ścieżkę
  7. w „SharedPrecompiledHeaders” usuń WSZYSTKIE podfoldery (jest to bezpieczne: są to tylko dane z pamięci podręcznej)

... a teraz wszystkie twoje projekty zostaną „naprawione”, ale za pierwszym razem będą musiały zostać odbudowane bez buforowania (więc TYLKO NASTĘPNA kompilacja będzie wolniejsza niż normalnie).


5

w moim przypadku pozbyłem się wszystkich plików z SharedPrecompiledHeaders w ten sposób i wszystko zaczęło działać dobrze:

sudo find /var/folders/ -type d -name "SharedPrecompiledHeaders" | xargs -n 1 -I dir sudo find dir -name \* -type f -delete

To jest coś, czego mogę łatwo użyć w skrypcie, więc podoba mi się ... Nie odkryłem [jeszcze] żadnych złych przypadków
— Matt

5

Napotkałem ten błąd podczas próby zbudowania projektu za pomocą Swift Package Manager.

Rozwiązaniem jest po prostu usunięcie .buildkatalogu.


4

Szczególnie, jeśli budujesz z wiersza poleceń lub masz skrypt kompilacji, wyczyszczenie celu xcode nie wystarczy. Usunąłeś ten folder.

Prekompilowaną lokalizację nagłówka można znaleźć w pliku

Target -> build settings => "Build locations" -> Precompiled headers cached path

Usuń ten folder za pomocą,

#rm -fr SharedPrecompiledHeaders

wprowadź opis obrazu tutaj


Moja ścieżka pamięci podręcznej znajdowała się w folderze kompilacji / build / ModuleCache /. Usunięcie go ze starej lokalizacji nie
— pomogło

3

Jeśli nie zostanie rozwiązany przez czyszczenie. Jest to problem z pamięcią podręczną kompilacji - przytrzymaj klawisz Option i przejdź do pozycji Produkt> Wyczyść folder kompilacji. To rozwiązało mój problem.


3

W moim przypadku Xcode tworzył folder DerivedData w głównym pakiecie mojego projektu (/ Users / Path_to_your_project_source_code / YourProjectName / DerivedData)

Właśnie usunąłem ten folder z mojego pakietu kodu źródłowego i teraz działa.

Aby sprawdzić Idź do Preferencje Xcode-> Lokalizacje i sprawdź, czy wybrano DerivedData na „Względne”. Zobacz zdjęcie poniżej wprowadź opis obrazu tutaj


3

U mnie tak się dzieje zawsze, gdy kopiuję projekt w inne miejsce. Zrobiłbym to, aby wrzucić to do repozytorium lub coś w tym stylu.

Muszę usunąć folder Build (rm -rf Build /) w starej i nowej lokalizacji, aby działał. Ma to sens, ponieważ folder Build będzie zawierał dane nieistotne dla nowej lokalizacji.

Czyszczenie danych pochodnych lub usuwanie folderów sharedPrecompiledHeaders tak naprawdę nie robiło tego w tym przypadku.


2

powinieneś przytrzymać "shift + command + C", a wtedy zbudujesz pomyślnie


2

Czyszczenie i / lub usuwanie danych pochodnych nie działa dla mnie. To, co zadziałało, to dotknięcie / zapisanie pliku .pch (dodaj znak, a następnie usuń go), aby wymusić jego odbudowę. To załatwiło sprawę.


To zadziałało dla mnie. Usunąłem katalog SharedPrecompiledHeaders, czystą kompilację, czysty folder kompilacji itp. To było na Xcode 5.1
— migs647

Gdzie jest plik PCH?
— TheJeff

2

Jeśli wykonanie czystej kompilacji nie działa, poszukaj plików PCH w /var/folders/../SharedPrecompiledHeadersi usuń pliki PCH, które działały dla mnie.


2
Jest odpowiedź identyczna z tą, z bardziej szczegółowymi informacjami zamieszczonymi powyżej przez @sedes. Spróbuj nie publikować zduplikowanych odpowiedzi.
— michaellindahl

2

Możesz spróbować wyczyścić produkt lub folder kompilacji:

SHIFT+ COMMAND+K

OPTION+ SHIFT+ COMMAND+K


2

Jeśli budujesz z wiersza poleceń za pośrednictwem xcodebuild, sprawdź, czy plik-derivedDataPath BUILD_DIR opcja jest używana. Jeśli tak, twój katalog ModuleCache.noindex będzie w BUILD_DIR zamiast w normalnej lokalizacji Xcode. Usuń katalog ModuleCache.noindex i wszystko będzie gotowe.

Wpadłem na tę sytuację, ponieważ buduję aplikację React Native, a klient iOS jest zwykle budowany z wiersza poleceń za pośrednictwem zestawu narzędzi React Native.


1

Próbowałem wyczyścić projekt i wyczyścić folder kompilacji, które nie działały.

Następnie całkowicie zamknąłem xCode, usunąłem folder danych pochodnych w jego standardowej lokalizacji: ~ / Library / Developer / Xcode / DerivedData, ponownie uruchomiłem xCode i zbudowałem projekt.

Wydawało się, że to rozwiązało problem.


Czy mógłbyś to trochę rozwinąć?
— Richard Dally

Zamknięcie Xcode, uruchomienie rm -rf ~/Library/Developer/Xcode/DerivedDataw Terminalu, a następnie otwarcie Xcode zrobiło to za mnie. Upewniłem się również, że moje lokalizacje (Xcode -> Preferencje -> Lokalizacje) są domyślne.
— sman591

1

AKTUALIZACJA

To zadziałało idealnie dla mnie:

  • Zamknij projekt lub obszar roboczy.
  • W Finderze: ⇧shift + ⌘cmd + G.
  • Wklej: ~ / Library / Developer / Xcode / DerivedData /
  • Usuń folder ModuleCache i opróżnij kosz.
  • Otwórz swój projekt.
  • Czysty: ⇧shift + ⌘cmd + K.
  • Kompilacja: ⌘cmd + B

Xcode 7.3.1
odniesienie tutaj


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.