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.