PCH hatası nasıl düzeltilir?


132

Uygulamamı içinde oluşturmaya çalıştığımda Xcodeşu hata mesajını alıyorum:

Derleyiciden ((clang-425.0.27)) farklı bir daldan ((clang-425.0.24)) oluşturulan PCH dosyası

Daha önce olmadı, ancak bu Xcode'u güncelledikten sonraki ilk yapıydı.

Diğer uygulamalar çalışır, ancak bu özel uygulama değil.

"Precompile Prefix Header"Ayarı kapatırsam işe yarıyor.

Bu hatayı nasıl düzeltirim ve yine de bu ayarı açık tutabilirim?

Yanıtlar:


246

Bu genellikle bir önbelleğe alma sorunudur. Genellikle Seçenek tuşunu basılı tutup Ürün> Yapı Klasörünü Temizle ... seçilerek çözülebilir .


3
Bu benim için hatayı düzeltmedi. Ayrıca tam bir temizlik yapıyorum ve türetilen verileri siliyorum.
Ben S

6
Product> Altında Cleanolması ve komut anahtarına gerek olmaması dışında benim için çalıştı . (Xcode 4.6.1)
Steve Haley

1
@SteveHaley Bir var Product > Clean, ama daha az kapsamlı bir iş yapıyor. Bazı insanlar satın alabilir Product > Clean, çünkü çoğu Product > Clean Build Folder...yeterlidir ve diğerleri aşağıdaki @Sedes yanıtında belirtildiği gibi el ile kaldırmaya ihtiyaç duyar.
gaige

7
Eski sorusunu biliyorum, ancak yukarıda belirtilen düzeltme bana yardımcı olmadı. Sadece Türetilmiş Verileri silerek ve projeyi tekrar oluşturarak iyi çalışır.
Ankit Jain

2
sadece rm -rf / ios / build yapabilir misin?
SuperUberDuper

47

DerivedDataProje klasörünü silin . Nereye kaydettiğinizi görmek için Xcode tercihleri ​​-> Konumlar altına bakın.


Bunun DerivedDatamutlaka Buildklasörünüzün olduğu yer olmadığını unutmamak önemlidir , bu bana çok yardımcı oldu, teşekkürler!
Nit

1
moduleCacheiçini DerivedDatade sil
whtlnv

Önce diğer cevapların söylediği gibi "temizlemeyi" denemelisiniz. Bu işe yaramadığında, tüm DerivedDataklasörü yinelemeli olarak silerim ... "yörüngeden nükleer ... emin olmanın tek yolu." @whitelionV bu da rm moduleCacheve oradaki her şey olur.
wcochran

39

Görünüşe göre Ürün> Temiz Yapı Klasörü ... (Seçenek tuşuna basılıyken) çoğu insan için çalışıyor. @Gaige tarafından seçilen yanıtı görün.

Çoğu insandan farklıysanız (kendim dahil) ve bu hala sorun yaşamanıza neden oluyorsa, XCode muhtemelen paylaşılan önceden derlenmiş başlıklarınızı başka bir yerde bırakmıştır. Benim için buna benzer bir klasördeydiler:

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

SharedPrecompiledHeaders klasörünün tamamını sildim ve bu benim için sorunları çözdü. Yine de burada başka bir şeye dokunmam ...


2
Bu benim için bu sorunu çözdü. Benim için bunun nedeni komut satırına dayalı bir yapıma sahip olmam.
ThomasW

2
Sizin durumunuz buysa, bu klasörü Xcode oluşturma transkriptinde bulabilirsiniz. "SharedPrecompiledHeaders" dizesini aradım
José Manuel Sánchez

6
Evet, bu doğru çözüm. Özellikle komut satırından derliyorsanız veya bir derleme betiğiniz varsa. Önceden derlenmiş üstbilgi konumu, derleme ayarlarında, "Yapı yerleri" -> Önceden derlenmiş üstbilgiler önbelleğe alınmış yolda bulunabilir.
karim

Var dizinini nasıl bulursunuz?
GoldenJoe

1
@GoldenJoe Open Finder Shift-Cmd-Gve yazın/var
Sedes

23

Xcode Tercihleri-> Konumlar'a gidin (wcochran tarafından verilen yanıtta belirtildiği gibi) ve DerivedData klasörünüzü yeniden adlandırın. Ben sadece benimkini "DerivedData" dan "DerivedData2" ye değiştirdim ve bu da sistemi eski konuma başvurmayı bırakmaya zorladı. Diğer cevapların hiçbiri işe yaramadığında bu benim için sorunu çözdü. Resme bakın:

görüntü açıklamasını buraya girin


15

Diğer seçeneklerin hiçbiri benim için işe yaramadı, işte onu düzelten şey:

Önbellek klasörünü sildim /Users/(Yourname)/Library/Developer/Xcode/DerivedData/ModuleCache/(yeniden adlandırmak da işe yarıyor).

Hatanız şöyle görünüyorsa, hatada belirtilen klasörü silmeyi deneyin:

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


Evet haklısın. Yukarıdakilerin hiçbiri benim için işe yaramıyor. Sadece bahsettiği klasörü silin ve yeniden oluşturun, hepsi bu.
Zhang Buzz

Bu doğru cevap. DerivedData'yı temizle / sil, projeyi başka bir yola taşıdıktan sonra benim için çalışmıyor.
Bill Chan


13

İos proje dizininizde ModuleCache klasörünü oluşturup silin . Tekrar çalıştırın , beklendiği gibi çalışmalıdır. Özet -react-native run-iosrm -rf ios/build/ModuleCache


Evet, react-native ve derleme çalışmaları Xcode'dan değil, npm run ios kullanılarak CLI'den değil. Önbelleği önerilen şekilde kaldırmak sorunu çözdü.
dakt

6

Xcode'u yükselttikten sonra bunu birden fazla projeyle alıyordum. Derleme Klasörünü Temizle ve Temizlemenin hiçbir etkisi olmadı - @sedes yanıtı ve @ josema.vitaminew'nin yorumu benim için yaptı. Ancak biraz kurnazlık kullanmadığınız sürece yanıltıcı olabilir, bu yüzden işte adım adım bir kısayol:

  1. başarısız olan yapı günlüğüne git
  2. bulmak için cmd-f "SharedPrecompiledHeaders" kullanın (devasa, korkunç ve karmaşık bir komut satırının ortasında olacaktır)
  3. "SharedPrecompiledHeaders" metnini ve ÖNCEKİ tüm karakterleri sürükleyip seçin, ancak bu yol bitinin başlangıcına (hala büyük metin bloğunun ortasında) gelene kadar SONRA DEĞİL, örneğin benim için: "/ var / klasörler / 03 /n71d4r551jv40j5nb8r9fjy80000gn/C/com.apple.Xcode.501/SharedPrecompiledHeaders
  4. Finder'ı aç
  5. menü: Git -> Klasöre git ...
  6. seçilen yolu kopyala / yapıştır
  7. "SharedPrecompiledHeaders" içinde TÜM alt klasörleri silin (bu güvenlidir: yalnızca önbelleğe alınmış verilerdir)

... ve şimdi tüm projeleriniz "Sabit" olacak, ancak kendilerini ilk seferinde sıfır önbelleğe alma ile yeniden inşa etmek zorunda kalacaklar (bu nedenle YALNIZCA SONRAKİ derleme normalden daha yavaş olacaktır).


5

benim durumumda SharedPrecompiledHeaders altındaki tüm dosyalardan bu şekilde kurtuldum ve her şey yolunda gitmeye başladı:

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

Bu, bir senaryoda kolayca kullanabileceğim bir şey, bu yüzden hoşuma gidiyor ... Herhangi bir kötü durum keşfetmedim [henüz]
Matt

5

Swift Paket Yöneticisi ile bir proje oluşturmaya çalışırken bu hatayla karşılaştım.

Çözüm sadece .builddizini silmektir .


4

Özellikle komut satırından derlerseniz veya bir derleme betiğiniz varsa, xcode hedefini temizlemek yeterli değildir. Bu klasörü sildiniz.

Önceden derlenmiş üstbilgi konumu şurada bulunabilir:

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

Bu klasörü şununla sil:

#rm -fr SharedPrecompiledHeaders

görüntü açıklamasını buraya girin


Önbellek yolum / build / ModuleCache / derleme klasöründeydi. Eski konumdan kaldırmak işe yaramadı
TheJeff

3

Temizlenerek çözülmediyse. Bu bir önbellek oluşturma sorunu - Seçenek tuşunu basılı tutun ve Ürün> Derleme Klasörünü Temizle'ye gidin. Bu benim sorunumu çözdü.


3

Benim durumumda, Xcode, proje ana paketimde DerivedData klasörünü oluşturuyordu (/ Kullanıcılar / Projenizin_Kaynak_kodu / ProjenizinAdı / DerivedData)

Bu klasörü kaynak kod paketimden yeni sildim ve şimdi çalışıyor.

Xcode Tercihleri-> Konumlar'a gidin ve DerivedData'nın "Göreli" olarak seçilip seçilmediğini kontrol etmek için. Aşağıdaki resme bakın görüntü açıklamasını buraya girin


3

Benim için bu, projemi başka bir yere kopyaladığımda her zaman olur. Bunu bir depoya veya başka bir şeye itmek için yapardım.

Çalışmasını sağlamak için eski ve yeni konumlardaki Build klasörünü (rm -rf Build /) silmem gerekiyor. Bu mantıklıdır, çünkü Yapı klasöründe yeni konumla ilgisi olmayan veriler olacaktır.

Türetilmiş Verileri temizlemek veya sharedPrecompiledHeaders klasörlerini silmek bu durumda gerçekten işe yaramadı.


2

"shift + command + C" tuşlarını basılı tutmanız gerekir ve ardından başarılı bir şekilde


2

Elde edilen verileri temizlemek ve / veya silmek benim için işe yaramadı. İşe yarayan şey, yeniden oluşturulmaya zorlamak için .pch dosyasına dokunmak / kaydetmek (bir karakter ekleyin, sonra silin). Bu hile yaptı.


Bu benim için çalıştı. SharedPrecompiledHeaders dizinini, temiz derlemeyi, temiz derleme klasörünü vb.
Sildim

PCH dosyası nerede?
TheJeff

2

Temiz bir derleme yapmak sizin için işe yaramazsa, içindeki PCH dosyalarını arayın /var/folders/../SharedPrecompiledHeadersve benim için çalışan PCH dosyalarını kaldırın.


2
Yukarıda @sedes tarafından yayınlanan daha fazla ayrıntıyla aynı cevap var. Lütfen yinelenen yanıtlar göndermemeye çalışın.
michaellindahl

2

Ürünü veya yapı klasörünü temizlemeyi deneyebilirsiniz:

SHIFT+ COMMAND+K

OPTION+ SHIFT+ COMMAND+K


2

Üzerinden bir komut satırı derlemesi yapıyorsanız xcodebuild, o zaman-derivedDataPath BUILD_DIR seçeneğin kullanılıp kullanılmadığına bakın. Eğer öyleyse, ModuleCache.noindex dizininiz normal Xcode konumu yerine BUILD_DIR'de olacaktır. ModuleCache.noindex dizinini silin ve hazır olacaksınız.

Bu durumla karşılaştım çünkü bir React Native uygulaması oluşturuyorum ve iOS istemcisi genellikle React Native araç seti aracılığıyla komut satırından oluşturuldu.


1

Projeyi ve her ikisi de çalışmayan yapı klasörünü temizlemeyi denedim.

Bundan sonra, xCode'dan tamamen çıktım, türetilmiş veri klasörünü standart konumunda sildim: ~ / Library / Developer / Xcode / DerivedData, xCode'u yeniden başlattım ve projeyi oluşturdum.

Bu benim için sorunu çözmüş gibiydi.


Biraz detaylandırır mısınız lütfen?
Richard Dally

Xcode'u kapatmak, rm -rf ~/Library/Developer/Xcode/DerivedDataTerminal'de çalıştırmak ve ardından Xcode'u açmak benim için yaptı. Ayrıca konumlarımın (Xcode -> Tercihler -> Konumlar) tümünün varsayılan olduğundan emin oldum.
sman591

1

GÜNCELLENMİŞ

Bu benim için mükemmel çalıştı:

  • Projenizi veya çalışma alanınızı kapatın.
  • Finder'da: ⇧shift + ⌘cmd + G
  • Yapıştır: ~ / Library / Developer / Xcode / DerivedData /
  • ModuleCache klasörünü silin ve çöp kutusunu boşaltın.
  • Projenizi açın.
  • Temiz: ⇧shift + ⌘cmd + K
  • Yapı: ⌘cmd + B

xCode 7.3.1
referansı burada


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.