Как исправить ошибку PCH?


132

Когда я пытаюсь создать свое приложение Xcode, я получаю следующее сообщение об ошибке:

Файл PCH, созданный из другой ветки ((clang-425.0.24)), чем компилятор ((clang-425.0.27))

Раньше этого не происходило, но это была первая сборка после обновления Xcode.

Другие приложения работают, но не этот конкретный.

Если отключить "Precompile Prefix Header"настройку, работает.

Как мне исправить эту ошибку и оставить этот параметр включенным?

Ответы:


246

Часто это проблема кеширования. Обычно это можно решить, удерживая клавишу Option и выбрав « Продукт»> «Очистить папку сборки» ...


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
Я знаю его старый вопрос, но вышеупомянутое исправление мне не помогло. Просто удалите производные данные и снова создайте проект.
Анкит Джайн

2
можно просто сделать rm -rf / ios / build?
SuperUberDuper

47

Удалите DerivedDataпапку для проекта. Посмотрите в настройках Xcode -> Locations, чтобы увидеть, где вы его сохраните.


Важно отметить, что DerivedDataэто не обязательно то место, где находится ваша Buildпапка, это мне очень помогло, спасибо!
Nit

1
удалить moduleCacheвнутри DerivedDataтоже
whtlnv

Вы должны сначала попытаться «очистить», как говорят другие ответы. Когда это не сработает, я бы просто рекурсивно удалил всю DerivedDataпапку ... "ядерная бомба с орбиты ... единственный способ убедиться". @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"
Хосе Мануэль Санчес

6
Да, это правильное решение. Особенно, если вы строите из командной строки или у вас есть скрипт сборки. Местоположение предварительно скомпилированных заголовков можно найти в настройках сборки, «Расположение сборки» -> Путь к кэшированию предварительно скомпилированных заголовков.
Карим

Как найти каталог var?
GoldenJoe

1
@GoldenJoe Откройте Finder Shift-Cmd-Gи введите/var
сентябрь

23

Перейдите в Xcode Preferences-> Locations (как указано в ответе wcochran) и просто переименуйте свою папку DerivedData. Я просто изменил свой с «DerivedData» на «DerivedData2», и это заставило систему перестать ссылаться на старое местоположение. Это исправило это для меня, когда ни один из других ответов не сработал. Смотрите картинку:

введите описание изображения здесь


15

Ни один из других вариантов не работал для меня, вот что это исправило:

Я удалил папку с кешем в /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


Да ты прав. У меня ничего из вышеперечисленного не работает. Просто удалите упомянутую папку и перестройте, вот и все.
Чжан Базз

Это правильный ответ. Очистить / удалить DerivedData у меня не работает после перемещения проекта на другой путь.
Билл Чан


13

В каталоге проекта 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 / folder / 03 /n71d4r551jv40j5nb8r9fjy80000gn/C/com.apple.Xcode.501/SharedPrecompiledHeaders
  4. открыть Finder
  5. меню: Перейти -> Перейти в папку ...
  6. скопировать / вставить выбранный путь
  7. в "SharedPrecompiledHeaders" удалите ВСЕ подпапки (это безопасно: это только кэшированные данные)

... и теперь все ваши проекты будут "фиксированными", но в первый раз придется перестраивать себя с нулевым кэшированием (поэтому ТОЛЬКО СЛЕДУЮЩАЯ сборка будет медленнее, чем обычно).


5

в моем случае я избавился от всех файлов в SharedPrecompiledHeaders таким образом, и все стало работать нормально:

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

Это то, что я могу легко использовать в сценарии, поэтому мне это нравится ... Я не обнаружил никаких плохих случаев [пока]
Мэтт

5

Я столкнулся с этой ошибкой при попытке создать проект с помощью Swift Package Manager.

Решение - просто удалить .buildкаталог.


4

Особенно, если вы выполняете сборку из командной строки или у вас есть сценарий сборки, очистки целевого объекта xcode недостаточно. Вы удалили эту папку.

Местоположение предварительно скомпилированного заголовка можно найти в

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

Удалить эту папку с помощью,

#rm -fr SharedPrecompiledHeaders

введите описание изображения здесь


Мой путь к кешу находился в папке сборки / build / ModuleCache /. Удаление его из старого местоположения не
помогло

3

Если это не решено очисткой. Это проблема с кешем сборки - удерживайте клавишу Option и перейдите в Продукт> Очистить папку сборки. Это решило мою проблему.


3

В моем случае Xcode создавал папку DerivedData в основном пакете моего проекта (/ Users / Path_to_your_project_source_code / YourProjectName / DerivedData)

Я просто удалил эту папку из пакета с исходным кодом, и теперь она работает.

Чтобы проверить, перейдите в Настройки Xcode-> Местоположение и посмотрите, выбрано ли DerivedData значение «Relative». См. Картинку ниже введите описание изображения здесь


3

Для меня это всегда будет происходить, когда я копирую свой проект в другое место. Я бы сделал это, чтобы подтолкнуть его в репо или что-то в этом роде.

Мне нужно удалить папку сборки (rm -rf Build /) в старом и новом местах, чтобы она заработала. Это имеет смысл, потому что в папке Build будут данные, не относящиеся к новому расположению.

Очистка производных данных или удаление папок sharedPrecompiledHeaders в данном случае не помогли.



2

Очистка и / или удаление производных данных у меня не сработало. Что действительно работало, так это касание / сохранение файла .pch (добавьте символ, затем удалите его), чтобы заставить его перестроиться. Это добилось цели.


Это сработало для меня. Я удалил каталог SharedPrecompiledHeaders, чистую сборку, папку чистой сборки и т. Д. Это было в Xcode 5.1
migs647

Где находится файл PCH?
TheJeff

2

Если чистая сборка у вас не работает, поищите файлы PCH /var/folders/../SharedPrecompiledHeadersи удалите файлы PCH, которые у меня сработали.


2
Существует ответ, идентичный этому, с более подробной информацией, размещенной выше @sedes. Пожалуйста, постарайтесь не публиковать повторяющиеся ответы.
michaellindahl

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 и собрал проект.

Это, казалось, решило проблему для меня.


Не могли бы вы немного уточнить?
Ричард Далли

Закрытие Xcode, запуск rm -rf ~/Library/Developer/Xcode/DerivedDataв Терминале, а затем открытие Xcode сделали это за меня. Я также убедился, что все мои местоположения (Xcode -> Preferences -> Locations) были заданы по умолчанию.
sman591,

1

ОБНОВЛЕНО

Это отлично сработало для меня:

  • Закройте свой проект или рабочее место.
  • В Finder: ⇧shift + ⌘cmd + G
  • Вставить: ~ / Библиотека / Разработчик / Xcode / DerivedData /
  • Удалите папку ModuleCache и очистите корзину.
  • Откройте свой проект.
  • Очистить: ⇧shift + ⌘cmd + K
  • Сборка: ⌘cmd + B

Xcode 7.3.1
ссылка здесь


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.