วิธีแก้ไขข้อผิดพลาด PCH


134

เมื่อฉันพยายามสร้างแอปของXcodeฉันฉันได้รับข้อความแสดงข้อผิดพลาดนี้:

ไฟล์ PCH ที่สร้างจากสาขาอื่น ((clang-425.0.24)) กว่าคอมไพเลอร์ ((clang-425.0.27))

ไม่เคยเกิดขึ้นมาก่อน แต่นี่เป็นการสร้างครั้งแรกหลังจากอัปเดต Xcode

แอปอื่น ๆ ใช้งานได้ แต่ไม่ใช่แอปนี้โดยเฉพาะ

ถ้าฉันปิดการ"Precompile Prefix Header"ตั้งค่ามันก็ใช้ได้

ฉันจะแก้ไขข้อผิดพลาดนี้ได้อย่างไรและยังคงเปิดการตั้งค่านั้นอยู่

คำตอบ:


246

ปัญหานี้มักเป็นปัญหาในการแคช โดยปกติแล้วจะสามารถแก้ไขได้โดยกดปุ่มOptionค้างไว้แล้วเลือกProduct> Clean Build Folder ...


3
สิ่งนี้ไม่ได้แก้ไขข้อผิดพลาดให้ฉัน ฉันยังดำเนินการล้างข้อมูลทั้งหมดและลบข้อมูลที่ได้รับ
Ben S

6
ทำงานให้ฉันยกเว้นมันอยู่ภายใต้Product> Cleanและไม่จำเป็นต้องใช้คีย์คำสั่ง (Xcode 4.6.1)
Steve Haley

1
@SteveHaley มีProduct > Cleanแต่งานไม่ละเอียด บางคนสามารถซื้อด้วยProduct > Cleanส่วนใหญ่Product > Clean Build Folder...ก็เพียงพอแล้วและคนอื่น ๆ ต้องการการลบด้วยตนเองตามที่ระบุไว้ในคำตอบของ @Sedes ด้านล่าง
gaige

7
ฉันรู้ว่าเป็นคำถามเก่า แต่การแก้ไขดังกล่าวข้างต้นไม่ได้ช่วยฉัน เพียงแค่ลบข้อมูลที่ได้รับและสร้างโครงการอีกครั้งก็ใช้ได้ดี
Ankit Jain

2
คุณสามารถทำ rm -rf / ios / build ได้ไหม
SuperUberDuper

48

ลบDerivedDataโฟลเดอร์สำหรับโครงการ ดูภายใต้การตั้งค่า Xcode -> สถานที่เพื่อดูว่าคุณบันทึกไว้ที่ไหน


สิ่งสำคัญคือต้องทราบว่าDerivedDataไม่จำเป็นต้องอยู่ที่Buildโฟลเดอร์ของคุณสิ่งนี้ช่วยฉันได้มากขอบคุณ!
Etheryte

1
ลบmoduleCacheภายในDerivedDataด้วย
whtlnv

ก่อนอื่นคุณควรพยายาม "ทำความสะอาด" ตามที่คำตอบอื่น ๆ กล่าว เมื่อวิธีนี้ไม่ได้ผลฉันก็แค่ลบDerivedDataโฟลเดอร์ทั้งหมดซ้ำ ๆ... "nuke จากวงโคจร ... วิธีเดียวที่จะแน่ใจ" @whitelionV นี่จะ rm moduleCacheและทุกอย่างในนั้นด้วย
wcochran

39

ดูเหมือนว่าProduct> Clean Build Folder ... (โดยกดปุ่ม Option) จะใช้ได้กับคนส่วนใหญ่ ดูคำตอบที่เลือกโดย @gaige

หากคุณไม่เหมือนคนส่วนใหญ่ (รวมตัวเองด้วย) และสิ่งนี้ยังคงทำให้คุณมีปัญหา XCode อาจทิ้งส่วนหัวที่คอมไพล์ไว้ล่วงหน้าที่แชร์ไว้ที่อื่น สำหรับฉันพวกเขาอยู่ในโฟลเดอร์ที่คล้ายกับสิ่งนี้:

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

ฉันเพิ่งลบโฟลเดอร์ SharedPrecompiledHeaders ทั้งหมดและนั่นช่วยแก้ปัญหาให้ฉันได้ ฉันจะไม่ไปสัมผัสที่นี่มากนักว่า ...


2
สิ่งนี้ช่วยแก้ปัญหานี้ให้ฉันได้ สำหรับฉันมันเป็นเพราะฉันมีบิลด์ที่ขับเคลื่อนด้วยบรรทัดคำสั่ง
ThomasW

2
หากเป็นกรณีของคุณคุณจะพบโฟลเดอร์นั้นในการถอดเสียงสร้าง Xcode ฉันมองหาสตริง "SharedPrecompiledHeaders"
José Manuel Sánchez

6
ใช่นี่คือทางออกที่ถูกต้อง โดยเฉพาะอย่างยิ่งถ้าคุณสร้างจากบรรทัดคำสั่งหรือคุณมีสคริปต์สร้าง ตำแหน่งส่วนหัวที่คอมไพล์ไว้ล่วงหน้าสามารถพบได้ในการตั้งค่ารุ่น "สร้างตำแหน่ง" -> เส้นทางแคชของส่วนหัวที่คอมไพล์ไว้ล่วงหน้า
karim

คุณค้นหาไดเร็กทอรี var ได้อย่างไร
GoldenJoe

1
@GoldenJoe Open Finder Shift-Cmd-Gและพิมพ์/var
Sedes

24

ไปที่ Xcode Preferences-> Locations (ตามที่กล่าวไว้ในคำตอบโดย wcochran) และเปลี่ยนชื่อโฟลเดอร์ DerivedData ของคุณ ฉันเพิ่งเปลี่ยนของฉันจาก "DerivedData" เป็น "DerivedData2" และนั่นทำให้ระบบหยุดการอ้างอิงตำแหน่งเดิม สิ่งนี้แก้ไขให้ฉันเมื่อไม่มีคำตอบอื่น ๆ ได้ผล ดูรูป:

ป้อนคำอธิบายภาพที่นี่


16

ไม่มีตัวเลือกอื่นใดที่ใช้ได้ผลสำหรับฉันนี่คือสิ่งที่แก้ไขได้:

ฉันลบโฟลเดอร์แคชที่ /Users/(Yourname)/Library/Developer/Xcode/DerivedData/ModuleCache/ (เปลี่ยนชื่อมันใช้งานได้ด้วย)

ลองลบโฟลเดอร์ที่กล่าวถึงในข้อผิดพลาดหากข้อผิดพลาดของคุณมีลักษณะดังนี้:

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


ใช่คุณถูก. ข้างต้นไม่ได้ผลสำหรับฉัน เพียงแค่ลบโฟลเดอร์ที่กล่าวถึงและสร้างใหม่เพียงเท่านี้
Zhang Buzz

นี่คือคำตอบที่ถูกต้อง ล้าง / ลบ DerivedData ไม่ทำงานสำหรับฉันหลังจากย้ายโปรเจ็กต์ไปยังเส้นทางอื่น
Bill Chan

14

ในไดเร็กทอรีโปรเจ็กต์ ios ของคุณไปที่สร้างและลบโฟลเดอร์ModuleCache เรียกใช้react-native run-iosอีกครั้งควรทำงานตามที่คาดไว้ สรุป -rm -rf ios/build/ModuleCache


ใช่เช่นกันใน react-native และ build ทำงานจาก Xcode แต่ไม่ใช่จาก CLI โดยใช้ npm run ios การลบแคชตามที่แนะนำช่วยแก้ปัญหาได้
dakt


6

หลังจากอัปเกรด Xcode ฉันได้รับสิ่งนี้จากหลายโครงการ Clean Build Folder และ Clean ไม่มีผลใด ๆ - ความคิดเห็นของ @sedes และ @ josema.vitaminew ทำเพื่อฉัน แต่อาจเป็นเรื่องยุ่งยากเว้นแต่คุณจะใช้ไหวพริบเล็กน้อยดังนั้นนี่คือทางลัดทีละขั้นตอน:

  1. ไปที่บันทึกการสร้างที่ล้มเหลว
  2. ใช้ cmd-f "SharedPrecompiledHeaders" เพื่อค้นหา (มันจะอยู่ตรงกลางของบรรทัดคำสั่งที่ซับซ้อนน่ากลัวขนาดใหญ่)
  3. ลาก - เลือกข้อความ "SharedPrecompiledHeaders" และอักขระทั้งหมดก่อน แต่ไม่หลังจากนั้นจนกว่าคุณจะไปถึงจุดเริ่มต้นของพา ธ บิตนั้น (ยังอยู่ตรงกลางของข้อความขนาดใหญ่) เช่นสำหรับฉัน: "/ var / โฟลเดอร์ / 03 /n71d4r551jv40j5nb8r9fjy80000gn/C/com.apple.Xcode.501/SharedPrecompiledHeaders
  4. เปิด Finder
  5. เมนู: ไป -> ไปที่โฟลเดอร์ ...
  6. คัดลอก / วางเส้นทางที่เลือก
  7. ใน "SharedPrecompiledHeaders" ลบโฟลเดอร์ย่อยทั้งหมด (ปลอดภัย: เป็นข้อมูลแคชเท่านั้น)

... และตอนนี้โปรเจ็กต์ทั้งหมดของคุณจะ "คงที่" แต่จะต้องสร้างตัวเองใหม่ในครั้งแรกด้วยการแคชเป็นศูนย์ (ดังนั้นการสร้าง NEXT เท่านั้นจะช้ากว่าปกติ)


6

ฉันพบข้อผิดพลาดนี้เมื่อพยายามสร้างโครงการด้วย Swift Package Manager

วิธีแก้ไขก็แค่ลบ.buildไดเร็กทอรี


5

ในกรณีของฉันฉันลบไฟล์ทั้งหมดภายใต้SharedPrecompiledHeadersด้วยวิธีนี้และทุกอย่างก็เริ่มทำงานได้ดี:

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

นี่เป็นสิ่งที่ฉันสามารถใช้ในสคริปต์ได้อย่างง่ายดายดังนั้นฉันจึงชอบมัน ... ฉันยังไม่พบกรณีที่ไม่ดีใด ๆ [เลย]
Matt

4

โดยเฉพาะอย่างยิ่งหากคุณสร้างจากบรรทัดคำสั่งหรือคุณมีสคริปต์การสร้างการทำความสะอาดเป้าหมาย xcode นั้นไม่เพียงพอ คุณได้ลบโฟลเดอร์นี้

ตำแหน่งส่วนหัวที่คอมไพล์ไว้ล่วงหน้าสามารถพบได้ในไฟล์

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

ลบโฟลเดอร์นี้ด้วย

#rm -fr SharedPrecompiledHeaders

ป้อนคำอธิบายภาพที่นี่


เส้นทางแคชของฉันอยู่ในโฟลเดอร์ build / build / ModuleCache / การลบออกจากตำแหน่งเดิมไม่ได้เป็นการหลอกลวง
TheJeff

3

หากยังไม่สามารถแก้ไขได้ด้วยการทำความสะอาด เป็นปัญหาในการสร้างแคช - กดปุ่ม Option ค้างไว้แล้วไปที่ Product> Clean Build Folder นั่นช่วยแก้ปัญหาของฉัน


3

ในกรณีของฉัน Xcode กำลังสร้างโฟลเดอร์ DerivedData ในบันเดิลหลักโครงการของฉัน (/ Users / Path_to_your_project_source_code / YourProjectName / DerivedData)

ฉันเพิ่งลบโฟลเดอร์นี้ออกจากชุดซอร์สโค้ดของฉันและตอนนี้มันใช้งานได้

ตรวจสอบไปที่ Xcode Preferences-> Locations และดูว่า DerivedData ถูกเลือกเป็น "Relative" หรือไม่ ดูภาพด้านล่าง ป้อนคำอธิบายภาพที่นี่


3

สำหรับฉันสิ่งนี้จะเกิดขึ้นเสมอเมื่อฉันคัดลอกโครงการไปที่อื่น ฉันจะทำเพื่อผลักดันให้เป็น repo หรืออะไรสักอย่าง

ฉันต้องลบโฟลเดอร์ Build (rm -rf Build /) ในตำแหน่งเก่าและใหม่เพื่อให้มันใช้งานได้ มันสมเหตุสมผลเพราะโฟลเดอร์ Build จะมีข้อมูลที่ไม่เกี่ยวข้องกับตำแหน่งใหม่

การล้างข้อมูลที่ได้มาหรือการลบโฟลเดอร์ sharedPrecompiledHeaders ไม่ได้ทำในกรณีนี้จริงๆ



2

การทำความสะอาดและ / หรือการลบข้อมูลที่ได้มาไม่ได้ผลสำหรับฉัน สิ่งที่ทำได้คือแตะ / บันทึกไฟล์. pch (เพิ่มอักขระแล้วลบออก) เพื่อบังคับให้สร้างใหม่ นี่เป็นเคล็ดลับ


สิ่งนี้ได้ผลสำหรับฉัน ฉันลบไดเร็กทอรี SharedPrecompiledHeaders, clean build, clean build folder และอื่น ๆ สิ่งนี้อยู่ใน Xcode 5.1
migs647

ไฟล์ PCH อยู่ที่ไหน
TheJeff

2

หากการสร้างใหม่ทั้งหมดไม่ได้ผลสำหรับคุณให้มองหาไฟล์ PCH ใน/var/folders/../SharedPrecompiledHeadersและลบไฟล์ PCH ซึ่งเหมาะกับฉัน


2
มีคำตอบที่เหมือนกันกับรายละเอียดเพิ่มเติมด้านบนที่โพสต์โดย @sedes โปรดพยายามอย่าโพสต์คำตอบที่ซ้ำกัน
michaellindahl

2

ปรับปรุง

สิ่งนี้ใช้ได้ผลอย่างสมบูรณ์สำหรับฉัน:

  • ปิดโครงการหรือพื้นที่ทำงานของคุณ
  • ใน Finder: ⇧shift + ⌘cmd + G
  • วาง: ~ / Library / Developer / Xcode / DerivedData /
  • ลบโฟลเดอร์ ModuleCache และถังขยะว่างเปล่า
  • เปิดโครงการของคุณ
  • ทำความสะอาด: ⇧shift + ⌘cmd + K
  • สร้าง: ⌘cmd + B


อ้างอิงxCode 7.3.1 ที่นี่


2

คุณอาจลองทำความสะอาดผลิตภัณฑ์หรือสร้างโฟลเดอร์:

SHIFT+ COMMAND+K

OPTION+ SHIFT+ COMMAND+K


2

หากคุณกำลังสร้างบรรทัดคำสั่งผ่านxcodebuildให้ดูว่า-derivedDataPath BUILD_DIRมีการใช้ตัวเลือกนี้หรือไม่ ในกรณีนี้ไดเร็กทอรี ModuleCache.noindex ของคุณจะอยู่ใน BUILD_DIR แทนตำแหน่ง Xcode ปกติ ลบไดเร็กทอรี ModuleCache.noindex และคุณจะพร้อมใช้งาน

ฉันเจอสถานการณ์นี้เพราะฉันกำลังสร้างแอป React Native และโดยทั่วไปไคลเอนต์ iOS จะสร้างจากบรรทัดคำสั่งผ่านชุดเครื่องมือ React Native


1

ฉันได้ลองทำความสะอาดโปรเจ็กต์และทำความสะอาดโฟลเดอร์บิลด์ซึ่งทั้งสองไม่ได้ผล

หลังจากนั้นฉันออกจาก xCode โดยสมบูรณ์ลบโฟลเดอร์ข้อมูลที่ได้รับในตำแหน่งมาตรฐาน: ~ / Library / Developer / Xcode / DerivedData เริ่ม xCode อีกครั้งและสร้างโครงการ

ดูเหมือนจะช่วยแก้ปัญหาให้ฉันได้


ช่วยอธิบายให้ละเอียดหน่อยได้ไหม?
Richard Dally

การปิด Xcode ทำงานrm -rf ~/Library/Developer/Xcode/DerivedDataใน Terminal แล้วเปิด Xcode ก็ทำเพื่อฉัน ฉันยังตรวจสอบให้แน่ใจว่าตำแหน่งของฉัน (Xcode -> ค่ากำหนด -> สถานที่ตั้ง) เป็นค่าเริ่มต้นทั้งหมด
sman591

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.