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"), ошибка исчезла.