Làm thế nào để sửa lỗi PCH?


132

Khi tôi cố gắng xây dựng ứng dụng của mình Xcode, tôi nhận được thông báo lỗi này:

Tệp PCH được xây dựng từ một nhánh khác ((clang-425.0.24)) so với trình biên dịch ((clang-425.0.27))

Nó không xảy ra trước đây, nhưng đây là bản dựng đầu tiên sau khi cập nhật Xcode.

Các ứng dụng khác hoạt động, nhưng không phải là ứng dụng cụ thể này.

Nếu tôi tắt "Precompile Prefix Header"cài đặt, nó hoạt động.

Làm cách nào để khắc phục lỗi này mà vẫn giữ cài đặt đó?

Câu trả lời:


246

Đây thường là một vấn đề bộ nhớ đệm. Thông thường có thể giải quyết bằng cách giữ phím Tùy chọn và chọn Sản phẩm> Làm sạch Thư mục Xây dựng ...


3
Điều này đã không sửa lỗi cho tôi. Tôi cũng đã thực hiện dọn dẹp hoàn toàn và xóa dữ liệu dẫn xuất.
Ben S

6
Làm việc cho tôi, ngoại trừ nó ở dưới Product> Cleanvà không cần phím lệnh. (Xcode 4.6.1)
Steve Haley

1
@SteveHaley Có một Product > Clean, nhưng nó làm một công việc ít kỹ lưỡng hơn. Một số người có thể mua với Product > Cleanhầu hết Product > Clean Build Folder...là đủ và những người khác cần xóa thủ công như được nêu trong câu trả lời @Sedes bên dưới.
gaige

7
Tôi biết câu hỏi cũ của nó, nhưng sửa chữa được đề cập ở trên không giúp tôi. Chỉ cần xóa dữ liệu phái sinh và xây dựng dự án một lần nữa hoạt động tốt.
Ankit Jain

2
bạn có thể làm rm -rf / ios / build không?
SuperUberDuper

47

Xóa DerivedDatathư mục cho dự án. Xem bên dưới tùy chọn Xcode -> Vị trí để xem bạn lưu nó ở đâu.


Điều quan trọng cần lưu ý DerivedDatalà không nhất thiết Buildthư mục của bạn ở đâu , điều này đã giúp tôi rất nhiều, cảm ơn!
Nit

1
xóa moduleCachebên trong DerivedDataquá
whtlnv

Trước tiên bạn nên cố gắng "làm sạch" như các câu trả lời khác nói. Khi điều này không hoạt động, tôi chỉ cần xóa đệ quy toàn bộ DerivedDatathư mục ... "nuke từ quỹ đạo ... chỉ có cách chắc chắn." @whitelionV điều này cũng sẽ rm moduleCachevà mọi thứ khác trong đó.
wcochran

39

Có vẻ như Sản phẩm> Thư mục Bản dựng sạch ... (với phím Tùy chọn được nhấn) hoạt động với hầu hết mọi người. Xem câu trả lời được chọn bởi @gaige.

Nếu bạn không giống như hầu hết mọi người (bao gồm cả tôi) và điều này vẫn gây rắc rối cho bạn thì XCode có thể đã để lại các tiêu đề được biên dịch trước được chia sẻ của bạn ở nơi khác. Đối với tôi, họ đã ở trong một thư mục tương tự như thế này:

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

Tôi vừa xóa toàn bộ thư mục SharedPrecompiledHeaders và điều đó đã giải quyết mọi thứ cho tôi. Tôi sẽ không chạm vào nhiều thứ khác ở đây mặc dù ...


2
Điều này đã khắc phục vấn đề này cho tôi. Đối với tôi đó là bởi vì tôi có một bản dựng điều khiển dòng lệnh.
ThomasW

2
Nếu đây là trường hợp của bạn, bạn có thể tìm thấy thư mục đó trong bảng điểm xây dựng Xcode. Tôi đã tìm chuỗi "SharedPrecompiledHeaders"
José Manuel Sánchez

6
Vâng, đây là giải pháp đúng. Đặc biệt nếu bạn xây dựng từ dòng lệnh hoặc bạn có một tập lệnh xây dựng. Vị trí tiêu đề được biên dịch trước có thể được tìm thấy trong cài đặt bản dựng, "Vị trí xây dựng" -> Đường dẫn được lưu trong bộ đệm được lưu trước.
karim

Làm thế nào để bạn tìm thấy thư mục var?
GoldenJoe

1
@GoldenJoe Trình tìm kiếm mở Shift-Cmd-Gvà nhập/var
Sedes

23

Chuyển đến Tùy chọn Xcode-> Vị trí (như được đề cập trong câu trả lời của wcochran) và chỉ cần đổi tên thư mục DeruredData của bạn. Tôi chỉ đơn giản là thay đổi khai thác của tôi từ "DeruredData" thành "DeruredData2" và điều đó buộc hệ thống phải ngừng tham chiếu vị trí cũ. Điều này đã sửa nó cho tôi khi không có câu trả lời nào khác hoạt động. Xem ảnh:

nhập mô tả hình ảnh ở đây


15

Không có tùy chọn nào khác phù hợp với tôi, đây là cái đã sửa:

Tôi đã xóa thư mục bộ đệm tại /Users/(Yourname)/Library/Developer/Xcode/DerivedData/ModuleCache/(đổi tên nó cũng hoạt động).

Hãy thử xóa thư mục được đề cập trong lỗi, nếu lỗi của bạn trông giống như thế này:

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


Vâng, bạn đúng. Không có cái nào ở trên làm việc cho tôi. Chỉ cần xóa thư mục mà nó đã đề cập và xây dựng lại, đó là nó.
Zhang Buzz

Đây là câu trả lời chính xác. Làm sạch / xóa DerivingData không hoạt động đối với tôi sau khi chuyển dự án sang đường dẫn khác.
Bill Chan


13

Trong thư mục dự án ios của bạn, hãy đi đến xây dựng và xóa thư mục ModuleCache . Chạy react-native run-ioslại, nó sẽ hoạt động như mong đợi. Tóm lược -rm -rf ios/build/ModuleCache


Đúng, cũng trên Reac -igen và build hoạt động từ Xcode nhưng không phải từ CLI sử dụng npm chạy ios. Xóa bộ nhớ cache theo đề xuất đã giải quyết vấn đề.
dakt

6

Sau khi nâng cấp Xcode tôi đã nhận được điều này với nhiều dự án. Clean Build Folder và Clean không có tác dụng - câu trả lời của @sedes và nhận xét của @ josema.vitaminew đã làm điều đó cho tôi. Nhưng nó có thể khó khăn trừ khi bạn sử dụng một chút xảo quyệt, vì vậy đây là một phím tắt từng bước:

  1. đi đến nhật ký xây dựng thất bại
  2. sử dụng cmd-f "SharedPrecompiledHeaders" để tìm nó (nó sẽ ở giữa một dòng lệnh phức tạp khủng khiếp lớn)
  3. kéo-chọn văn bản "SharedPrecompiledHeaders" và tất cả các ký tự TRƯỚC nhưng KHÔNG SAU KHI cho đến khi bạn bắt đầu bit đường dẫn đó (vẫn ở giữa khối văn bản lớn), ví dụ như đối với tôi: "/ var / thư mục / 03 /n71d4r551jv40j5nb8r9fjy80000gn/C/com.apple.Xcode.501/SharedPrecompiledHeaders
  4. mở Finder
  5. menu: Đi -> Chuyển đến thư mục ...
  6. sao chép / dán đường dẫn đã chọn
  7. trong "SharedPrecompiledHeaders" xóa TẤT CẢ các thư mục con (điều này an toàn: đó chỉ là dữ liệu được lưu trong bộ nhớ cache)

... và bây giờ tất cả các dự án của bạn sẽ là "Đã sửa", nhưng sẽ phải tự xây dựng lại lần đầu tiên với bộ nhớ đệm bằng 0 (vì vậy CHỈ xây dựng NEXT sẽ chậm hơn bình thường).


5

trong trường hợp của tôi, tôi đã loại bỏ tất cả các tệp trong SharedPrecompiledHeaders theo cách này và mọi thứ bắt đầu hoạt động tốt:

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

Đây là điều mà tôi có thể dễ dàng sử dụng trong một kịch bản, vì vậy tôi như nó ... Tôi đã không phát hiện ra bất cứ trường hợp xấu [nhưng]
Matt

5

Tôi đã gặp lỗi này khi cố gắng xây dựng một dự án với Trình quản lý gói Swift.

Giải pháp chỉ là xóa .buildthư mục.


4

Đặc biệt nếu bạn xây dựng từ dòng lệnh hoặc bạn có tập lệnh xây dựng, việc xóa mục tiêu xcode là không đủ. Bạn đã xóa thư mục này.

Vị trí tiêu đề được biên dịch trước có thể được tìm thấy trong

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

Xóa thư mục này với,

#rm -fr SharedPrecompiledHeaders

nhập mô tả hình ảnh ở đây


Đường dẫn bộ đệm của tôi nằm trong thư mục build / build / ModuleCache /. Loại bỏ nó khỏi vị trí cũ không thực hiện được mẹo
TheJeff

3

Nếu nó không được giải quyết bằng cách làm sạch. Đó là sự cố bộ đệm xây dựng - giữ phím Tùy chọn và điều hướng đến Sản phẩm> Làm sạch Thư mục Xây dựng. Điều đó đã khắc phục vấn đề của tôi.


3

Trong trường hợp của tôi, Xcode đã tạo thư mục DeruredData trong gói chính của dự án của tôi (/ Users / Path_to_your_project_source_code / YourProjectName / DeruredData)

Tôi vừa xóa thư mục này khỏi gói mã nguồn của mình và bây giờ nó đang hoạt động.

Để kiểm tra Chuyển đến Tùy chọn Xcode-> Vị trí và xem liệu DeruredData có được chọn thành "Tương đối" không. Xem hình dưới đây nhập mô tả hình ảnh ở đây


3

Đối với tôi điều này sẽ luôn xảy ra khi tôi sao chép dự án của mình sang một vị trí khác. Tôi sẽ làm điều này để đẩy nó vào một repo hoặc một cái gì đó.

Tôi phải xóa thư mục Build (rm -rf Build /) ở vị trí cũ và mới để nó hoạt động. Điều này có ý nghĩa vì thư mục Build sẽ có dữ liệu không liên quan đến vị trí mới.

Làm sạch dữ liệu phái sinh hoặc xóa các thư mục sharedPrecompiledHeaders không thực sự làm điều đó trong trường hợp này.


2

bạn nên giữ "shift + lệnh + C", và sau đó bạn sẽ xây dựng thành công


2

Làm sạch và / hoặc xóa dữ liệu dẫn xuất không làm việc cho tôi. Những gì đã làm là chạm / lưu tệp .pch (thêm một ký tự, sau đó xóa nó) để buộc nó được xây dựng lại. Điều này đã lừa


Điều này làm việc cho tôi. Tôi đã xóa thư mục
SharedPrecompiledHeaders

Tệp PCH ở đâu?
TheJeff

2

Nếu việc xây dựng sạch không hiệu quả với bạn, hãy tìm các tệp PCH trong /var/folders/../SharedPrecompiledHeadersvà xóa các tệp PCH, hoạt động cho tôi.


2
Có một câu trả lời giống hệt với câu trả lời chi tiết ở trên được đăng bởi @sedes. Hãy cố gắng không đăng câu trả lời trùng lặp.
michaellindahl

2

Bạn có thể thử làm sạch sản phẩm hoặc thư mục bản dựng:

SHIFT+ COMMAND+K

OPTION+ SHIFT+ COMMAND+K


2

Nếu bạn đang thực hiện xây dựng dòng lệnh thông qua xcodebuild, sau đó xem -derivedDataPath BUILD_DIRtùy chọn được sử dụng. Nếu vậy, thư mục ModuleCache.noindex của bạn sẽ nằm trong BUILD_DIR thay vì vị trí Xcode thông thường. Xóa thư mục ModuleCache.noindex và bạn sẽ hoàn tất.

Tôi gặp phải tình huống này vì tôi đang xây dựng một ứng dụng React Native và ứng dụng khách iOS thường được xây dựng từ dòng lệnh thông qua bộ công cụ React Native.


1

Tôi đã thử làm sạch dự án và làm sạch thư mục xây dựng mà cả hai đều không hoạt động.

Sau đó, tôi thoát hoàn toàn xCode, xóa thư mục dữ liệu dẫn xuất tại vị trí tiêu chuẩn của nó: ~ / Library / Developer / Xcode / DerivingData, bắt đầu lại xCode và xây dựng dự án.

Điều đó dường như đã giải quyết vấn đề cho tôi.


Bạn có thể giải thích một chút xin vui lòng?
Richard Dally

Đóng Xcode, chạy rm -rf ~/Library/Developer/Xcode/DerivedDatatrong Terminal và sau đó mở Xcode đã giúp tôi. Tôi cũng đảm bảo các vị trí của mình (Xcode -> Tùy chọn -> Vị trí) đều được mặc định.
sman591

1

CẬP NHẬT

Điều này làm việc hoàn hảo cho tôi:

  • Đóng dự án hoặc không gian làm việc của bạn.
  • Trong Finder: ⇧shift + cmd + G
  • Dán: ~ / Thư viện / Nhà phát triển / Xcode / DeruredData /
  • Xóa thư mục ModuleCache và thùng rác trống.
  • Mở dự án của bạn.
  • Sạch sẽ: shift + cmd + K
  • Xây dựng: ⌘cmd + B


Tham khảo xCode 7.3.1 tại đây


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.