Xcode не удалось создать предварительно скомпилированный заголовок?

avatar
user1849661
8 апреля 2018 в 09:53
9915
2
2

заранее спасибо за помощь, которую вы мне окажете.

Вчера я искал это полдня в Интернете и два часа сегодня, и я ничего не нашел (кроме тех двух ссылок, которые не помогли FMDatabase.h не найден при использовании библиотеки route-me & Не удалось сгенерировать предварительно скомпилированный заголовок для связующего заголовка)

Итак, вот моя проблема: у меня только что был в руках проект, над которым работал предыдущий разработчик, и когда я пытаюсь его запустить, у меня здесь две ошибки:

не удалось создать предварительно скомпилированный заголовок '/Users/me/Library/Developer/Xcode/DerivedData/Alavoc-arfzuirebtfstncdztyvgvtpcbgw/Build/Intermediates.noindex/PrecompiledHeaders/Alavoc-Bridge-Header-swift_1I75NH5N40QPS-clang_30E4RG2TSVLXF.pch' для соединительного заголовка '/Users/me/Downloads/Alavoc-ios-master/Alavoc/bridge/Alavoc-Bridge-Header.h'

/Users/me/Downloads/Alavoc-ios-master/Alavoc/externalLib/customClass/customClassViewController.h:13:9: ошибка: файл FMDB/FMDB.h не найден

Есть также одна фатальная ошибка, написанная следующим образом (даже если я насчитал только две ошибки, эта появляется в журнале выше двух других, описанных ранее)

фатальная ошибка: файл модуля '/Users/me/Library/Developer/Xcode/DerivedData/ModuleCache/30E4RG2TSVLXF/Foundation-3DFYNEBRQSXST.pcm' устарела и нуждается в восстановлении: примечание о несоответствии подписи: импортировано '/Users/me/Library/Developer/Xcode/DerivedData/Alavoc-arfzuirebtfstncdztyvgvtpcbgw/Build/Intermediates.noindex/PrecompiledHeaders/Alavoc-Bridge-Header-swift_1I75NH5N40QPS-clang_30E4RG2TSVLXF.pch' /Users/me/Downloads/Alavoc-ios-master/Alavoc/bridge/Alavoc-Bridge-Header.h:13:9: примечание: в файле, включенном из /Users/me/Downloads/Alavoc-ios-master/Alavoc/bridge/Alavoc-Bridge-Header.h:13: #import "customClassViewController.h"

customClassViewController.h строка 13:

#import <FMDB/FMDB.h>

Думаю, эти ошибки связаны. У вас есть идеи, откуда это могло взяться?

Заранее спасибо за вашу помощь, ребята, я очень ценю это!

Изменить для battlmonster (новые ошибки):

Вот две ошибки (файл не найден (в Alavoc-Bridge-Header.h FMDB.h не найден)) и не удалось создать предварительно скомпилированный заголовок:

фатальная ошибка: файл '/Users/me/Downloads/Alavoc-ios-master/Alavoc/bridge/Alavoc-Bridge-Header.h' был изменен с момента прекомпилированного заголовка '/Users/me/Library/Developer/Xcode/DerivedData/Alavoc-arfzuirebtfstncdztyvgvtpcbgw/Build/Intermediates.noindex/PrecompiledHeaders/Alavoc-Bridge-Header-swift_1I75NH5N40QPS-clang_30E4RG2TSVLXF.pch' было построено примечание: пожалуйста, перекомпилируйте предварительно скомпилированный заголовок '/Users/me/Library/Developer/Xcode/DerivedData/Alavoc-arfzuirebtfstncdztyvgvtpcbgw/Build/Intermediates.noindex/PrecompiledHeaders/Alavoc-Bridge-Header-swift_1I75NH5N40QPS-clang_30E4RG2TSVLXF.pch' /Users/me/Downloads/Alavoc-ios-master/Alavoc/bridge/Alavoc-Bridge-Header.h:29:9: ошибка: файл FMDB/FMDB.h не найден

импорт

    ^ 1 error generated. <unknown>:0: error: failed to emit precompiled header

'/Users/me/Library/Developer/Xcode/DerivedData/Alavoc-arfzuirebtfstncdztyvgvtpcbgw/Build/Intermediates.noindex/PrecompiledHeaders/Alavoc-Bridge-Header-swift_1I75NH5N40QPS-clang_30E4RG2TSVLXF.pch для соединительного заголовка '/Users/me/Downloads/Alavoc-ios-master/Alavoc/bridge/Alavoc-Bridge-Header.h'

Источник
battlmonstr
8 апреля 2018 в 20:10
0

Было бы полезно, если бы вы показали код customClassViewController.h вокруг строки 13, потому что это то, на что вы указываете ошибку.

user1849661
10 апреля 2018 в 09:35
0

Спасибо большое за ответ дружище! строка 13 customClasshViewController.h выглядит следующим образом: «#import <FMDB/FMDB.h>»

Ответы (2)

avatar
battlmonstr
10 апреля 2018 в 20:43
11

Эта ошибка связана с неправильно сформированным заголовком моста. Заголовок моста — это специальный заголовочный файл, в котором перечислены все файлы заголовков Objective-C с классами, которые должны быть доступны из кода Swift. Все определения заголовков мостов предварительно скомпилированы таким образом, чтобы их можно было использовать в Swift. В вашем случае связующим заголовком является «Alavoc/bridge/Alavoc-Bridging-Header.h», и он включает заголовок для customClassViewController.h (из Alavoc/externalLib/customClass), который указывает, что ваш коллега-разработчик хочет, чтобы customClassViewController был доступен в коде Swift.

Теперь сбивающая с толку вещь в заголовке моста заключается в том, что он не рекурсивно включает все, т.е. он просто смотрит на первый уровень определений, и если вы импортируете что-то в своем импорте, что вы хотите в Swift, вы должны добавить это к заголовку моста явно, иначе вы, вероятно, получите предупреждение (или иногда ошибку). Допустим, у вас есть #import "A.h" в заголовке моста, а внутри "A.h" есть #import "B.h", тогда вам, вероятно, придется добавить "B.h" в заголовок моста.

Теперь в вашем примере A = customClassViewController и B = FMDB, и обычно вам нужно добавить FMDB в заголовок моста, но дело в том, что вы, скорее всего, не хотите экспортировать FMDB в Swift через ваш заголовок моста, потому что это не предназначено для этого (это для вашего собственного кода objc, а не для сторонних библиотек).

Решением будет удаление строки 13 из вашего "customClassViewController.h". Это, вероятно, исправит компиляцию связующего заголовка, но, вероятно, сломает customClassViewController, поэтому вам нужно включить FMDB в «customClassViewController.m» и, скорее всего, адаптировать «customClassViewController.h», чтобы он не имел ничего, связанного с FMDB (или предварительно объявите эти использования с @class X;).

Если вы переместите #import <FMDB/FMDB.h> в файлы реализации (.m) и все равно получите error: 'FMDB/FMDB.h' file not found, вероятно, путь к FMDB не указан в ваших путях поиска заголовков.

Чтобы решить последнюю проблему, просто укажите правильный путь в «Пути поиска заголовков» в настройках сборки Xcode. Допустим, FMDB находится в /Users/me/Downloads/Alavoc-ios-master/Alavoc/ASDASD/FMDB (и у вас есть /Users/me/Downloads/Alavoc-ios-master/Alavoc/ASDASD/FMDB/FMDB.h внутри), затем вам нужно открыть настройки проекта Xcode — выберите цель слева — выберите «Настройки сборки» вверху — найдите параметр «Пути поиска заголовков» и добавьте /Users/me/Downloads/Alavoc-ios-master/ Путь Alavoc/ASDASD

user1849661
10 апреля 2018 в 21:42
0

Большое спасибо за ответ, все стало ясно. Поэтому я прокомментировал строку 13 в customClassViewController.h и добавил импорт <FMDB/FMDB.h> в customClassViewController.m. Но все еще есть ошибка о том, что файл FMDB/FMDB.h все еще не найден, я не понимаю? Возможно, именно это делает невозможным создание предварительно скомпилированного заголовка? (Все еще есть ошибка, говорящая о том, что не удалось создать предварительно скомпилированный заголовок)

battlmonstr
10 апреля 2018 в 22:26
0

Если это один и тот же файл и строка, возможно, вам следует очистить и пересобрать проект. Если это что-то новое - найдите.

user1849661
10 апреля 2018 в 22:32
0

Я очистил проект и снова собрал его, но файл FMDB/FMDB.h все еще не найден и не может быть испущен (я думаю, это связано с тем, что FMDB не может быть найден). Есть идеи? :(

battlmonstr
11 апреля 2018 в 13:10
0

Опубликуйте новое сообщение об ошибке. Если вы удалили строку импорта, она не может быть прежней (если только вам не нужно удалить ее где-то еще).

user1849661
11 апреля 2018 в 13:43
0

Хорошо, я отредактировал свой пост, так как я не могу опубликовать здесь ошибку (слишком длинный)

battlmonstr
11 апреля 2018 в 20:43
0

Это та же ошибка, чувак. Разберись сам. Там написано: Alavoc-Bridge-Header.h:29:9. Это означает открыть Alavoc-Bridge-Header.h, строку 29, столбец 9.

user1849661
11 апреля 2018 в 23:08
0

Потому что FMDB импортируется в заголовок моста, братан... Ты не говорил мне удалить его оттуда? :(

user1849661
12 апреля 2018 в 09:51
0

Я прокомментировал FMDB в связующем заголовке, и теперь в LevelViewController.swift появилась новая ошибка: «нет такого модуля CNNPopUpController». к предыдущему прокомментировал приятель.

battlmonstr
12 апреля 2018 в 22:02
0

Итак, вы исправили 2 ошибки и теперь получаете новую, не связанную с FMDB или соединяющими заголовками. Может быть, где-то есть чат, где люди могут вам помочь.

user1849661
12 апреля 2018 в 23:13
0

В customClassViewController.m еще не найден файл FMDB/FMDB.h, я его не понимаю. Иногда появляется ошибка (когда я нахожусь в представлении customClassViewController.m, а иногда она не появляется, когда я нахожусь в другом быстром файле при создании проекта). Сейчас CNNPopupController и FMDB не найдены. Куда бы я ни ставил FMDB, он не нашелся. Но файл явно находится здесь, в проекте ... Он появляется, если я нахожусь в файле, который импортирует его, когда я запускаю сборку. В противном случае он не появляется. Действительно странно...

battlmonstr
13 апреля 2018 в 09:29
1

О, но тогда это намного проще. Просто укажите правильный путь в «Пути поиска заголовков» в настройках сборки Xcode. Допустим, FMDB находится в /Users/me/Downloads/Alavoc-ios-master/Alavoc/ASDASD/FMDB (и у вас есть /Users/me/Downloads/Alavoc-ios-master/Alavoc/ASDASD/FMDB/FMDB.h внутри), затем вам нужно открыть настройки проекта Xcode — выберите цель слева — выберите «Настройки сборки» вверху — найдите параметр «Пути поиска заголовков» и добавьте /Users/me/Downloads/Alavoc-ios-master/ Путь Alavoc/ASDASD есть.

user1849661
13 апреля 2018 в 11:04
0

Итак, я раскомментировал строки #import FMDB, которые вы сказали мне прокомментировать. Я отменил все изменения, которые я сделал раньше, я указал правильный путь, как вы мне сказали, и OMG, вы гений, большое вам спасибо. Ошибки, связанные с FMDB, ИСЧЕЗЛИ! Ура! :) В какой бы файл я ни вставил и не построил проект (соединяющий заголовок или customClassViewController), я не получаю ошибок, так что YAY! Большое спасибо :)

user1849661
13 апреля 2018 в 11:05
0

Но теперь у меня все еще есть этот модуль CNPPopupController, который не появляется, я не знаю почему, но я думаю, что это совершенно не связано, поэтому я сделаю для этого еще один пост. Не могли бы вы опубликовать свой комментарий как ответ, чтобы я мог проголосовать за него как за ответ? Заранее спасибо!

battlmonstr
13 апреля 2018 в 16:18
0

Обновил ответ, спасибо. Да, CNPPopupController должен быть отдельным вопросом.

avatar
cpl_maverick
10 апреля 2018 в 10:01
0

Если вы используете Coapod и это фреймворк, вам НЕ рекомендуется включать это в предварительно скомпилированный заголовок.

Вместо файлов objc используйте:

@import framework_name;

user1849661
10 апреля 2018 в 16:16
0

Спасибо за помощь, но теперь я не понимаю? Что я не должен включать в предварительно скомпилированный заголовок?

cpl_maverick
13 апреля 2018 в 03:53
0

У меня нет четких деталей прямо сейчас и по этому поводу. Я считаю, что это должно быть так, как говорит батлмонстр. Кроме того, цель PCH никогда не состоит в том, чтобы люди могли импортировать .h для удобства. Судя по его названию, он фактически импортирует файлы перед компиляцией, что отличается от импорта .h. Поэтому мой совет: если у вас нет очень веской причины, по которой вы должны импортировать их до компиляции, иначе: 1. Используйте файл global.h, который содержит все, и импортируйте его везде. 2. Вы действительно импортируете то, что вам нужно, когда вам нужно. .