Swift Framework: Umbrella header '[...]. H' not found
В пользовательской структуре, содержащей как Objective-C, так и Swift, компилятор Swift выдает следующую ошибку:
[build_path]/unextended-module.modulemap:2:19: error: umbrella header 'bugtest.h' not found
umbrella header "bugtest.h"
^
<unknown>:0: error: could not build Objective-C module 'bugtest'
Ответы
Ответ 1
Это произойдет, когда параметр Always Search User Paths
включен для целевой среды Framework.
Установка этого параметра в No
приведет к устранению этой ошибки.
IMHO это ошибка в Swift Compiler, и я подал радар с Apple.
См. rdar://21038443
Ответ 2
Это обычно происходит после переименования проекта или чего-то в этом роде. Проблема заключается в том, что заголовок зонтика больше не отображается как заголовок Public. Проверьте прикрепленное изображение, чтобы узнать, как это исправить.
![Fix]()
Ответ 3
В XCode 7 Beta, с Swift2, это также произойдет, если ваш заголовок Framework не объявлен как "Public"
Например, у меня была Cocoa Touch Framework с видимостью "Project" для файла заголовка, а ошибка "Umbrella Header... not found" для всех быстрых файлов в моем проекте, как только у меня был заголовок "Публикация", ошибка исчезла.
Ответ 4
Существует 4 разных способа, которые могут произойти, игнорируя ошибки в предыдущих версиях Xcode
- У вас нет заголовка зонтика с именем $(TARGET_NAME).h в вашем проекте
- У вас есть заголовок зонтика, но он не установлен как открытый. См. ответ arturgrigor
-
DEFINES_MODULE
не установлен на YES
-
CLANG_ENABLE_MODULES
не установлен на YES
Ответ 5
Для меня уровень доступа был общедоступным, но он также не удался по зонтику, который не найден. Я переместил раздел "Заголовки" "Фазы сборки" на верх, и он начал работать.
Script в podfile:
post_install do |installer|
installer.pods_project.targets.each do |target|
phase_name = 'Headers'
target.build_phases.each do |phase|
if (phase.display_name.include? phase_name)
target.build_phases.unshift(phase).uniq! unless target.build_phases.first == phase
end
end
end
Не знаю, почему это происходит. Пробовал фиктивные проекты - не происходит. Только на больших с несколькими зависимостями.
Что-то с компиляцией перед копированием заголовков зонтиков.
Ответ 6
Определенно вам необходимо публиковать общедоступные фреймворки:
![введите описание изображения здесь]()
Ответ 7
Для меня настройка "Использовать карты заголовков" на "НЕТ" разрешила проблему
Ответ 8
Еще одно решение: после переименования папки старое местоположение все еще может быть указано в файле проекта для файла .h, даже если вы обновили местоположение через боковую панель Xcode. Это старое местоположение вызывает ошибку заголовка зонда.
Простое решение: удалите ссылку на файл .h и снова добавьте. (а затем запомните, чтобы он стал общедоступным!)
Ответ 9
Здесь уже есть отличные ответы. @Shadow_x99 был очень полезен. Однако, если бы мне разрешили дополнить свой опыт.
Заголовок зонда автоматически идентифицируется в процессе сборки. Это не указано в настройках целевой сборки или унаследовано от параметров проекта.
Итак, чтобы избежать этой ошибки, которая - с XCode 7 - выглядит следующим образом:
warning: no umbrella header found for target 'MyTarget', module map will not be generated
необходимо предпринять два важных шага.
Во-первых, заголовок зонтика должен иметь то же имя, что и целевой. Поэтому, если ваша цель - это инфраструктура с именем MyTarget
, должен быть заголовок с именем MyTarget.h
.
Во-вторых, на этапах сборки для MyTarget
- как указано в этом ответе - этот заголовочный файл должен быть указан в разделе , как описано выше.
Ответ 10
Я обнаружил, что с включенной схемой New Swift Build System и Parallelize Build будут появляться ошибки, как в этом вопросе. Решением было сделать ссылку на фреймворки, которые были импортированы в быстрые исходные файлы. (Я думаю, что ранее приложение собиралось, потому что просто случилось, что платформы были связаны с чем-то, что было построено ранее в очереди последовательной сборки).
Я написал скрипт для прохождения всех операций импорта во всех целях в рабочей области и проверки того, что их платформы были связаны с этой целью.
https://github.com/Jon889/SwiftImportChecker
Ответ 11
У меня была та же проблема, и ни один из предложенных ответов не помог в моем случае, поэтому я оставляю это здесь на случай, если у кого-то есть такая же проблема.
Я добавил "Выполнить сценарий" в "Этапы сборки", но в итоге удалил его и то, когда начал получать сообщение об ошибке.
Мое решение закончилось тем, что мне пришлось очистить проект, перестроить фреймворк, а затем мой проект приложения был построен правильно.
Ответ 12
Если вы используете Xcode 7.1 и CocoaPods 0.39, похоже, это быстрое изменение компилятора, которое влияет на некоторые CocoaPods (Nimble, Quick и т.д.). Попробуйте некоторые из решений, указанных в этом потоке: https://github.com/CocoaPods/CocoaPods/issues/4420 однако, если ни один из них не работает, попробуйте использовать Xcode 7.0.1 или 7.2 beta. Вы можете получить оба из них здесь: https://developer.apple.com/downloads/.
Изменить: В моем случае, чтобы исправить проблему, мне также пришлось понизить CocoaPods до 0,38.2.
Далее редактирование: похоже, это не относится к Xcode 7.1. Простое понижение CocoaPods до 0,38.2 должно помочь:
sudo gem uninstall cocoapods -v 0.39
sudo gem install cocoapods -v 0.38.2
Ответ 13
Ваш файл заголовка должен находиться в разделе [Сборка фаз/Заголовки/Публикация].
Если ваш файл заголовка уже находится в разделе [Сборка фаз/Заголовки/Публикация], во много раз выполнение этой проблемы решило мою проблему:
- очистить проект
- переместите файл заголовка в раздел "private" или "project"
- переместите файл заголовка обратно в раздел "public"
- восстановить все снова
Ответ 14
Удалите эти файлы из каталога проекта. .xcworkspace
pods/
и podfile.lock
обновить модуль и построить проект.
Ответ 15
Возможно, проблема возникла из-за сценария удаления заголовков на этапах сборки.
function removeHeaders() {
find $BUILD_ROOT/... -name '*.h' -exec rm -f {} \;
}
removeHeaders
Удаление этого скрипта решило проблему.
Ответ 16
Я исправил это, установив режим компиляции проблемных настроек сборки фреймворка в пошаговый.
Ответ 17
Я решил эту проблему, переименовав мой module.modulemap в moduleXYZ.modulemap и изменив имя файла modulemap в настройках проекта.
Ответ 18
Ни один из 9 ответов не помог мне, поэтому я попытался создать новый проект, который я мог бы отправить в Apple, чтобы сообщить об ошибке. Я был удивлен, что не смог воспроизвести проблему. Я проверил настройки сборки, и они были эквивалентны. По-видимому, это какая-то ошибка.
Если ничего больше не помогает, попробуйте создать новый проект и импортируйте по крайней мере некоторые классы Objective C и Swift из вашего текущего проекта, сравните настройки сборки, связанные с каркасом, со значениями по умолчанию из нового проекта и в конечном итоге переместите все файлы к новому проекту.
Ответ 19
Я работаю над этим целый день, но это того стоит. Я пробовал все здесь, но я не решил его. Я создал новый проект, эксперимент, и я узнал, что Путь поиска заголовка пользователя установлен ${SRCROOT} рекурсивный, и я изменил его на ${SRCROOT } нерекурсивный, изменил маршрут заголовка моста (например, #import "SVProgressHUD.h"
→ #import "Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.h"
), ошибка исчезла.