Swift Framework: заголовок Umbrella '[] .h' не найден

В пользовательской платформе, содержащей код 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'

person Tim Bodeit    schedule 20.05.2015    source источник


Ответы (23)


Обычно это происходит после переименования проекта или чего-то подобного. Проблема в том, что зонтичный заголовок больше не указан как Общедоступный заголовок. Проверьте прикрепленное изображение, чтобы узнать, как это исправить.

Исправить

person arturgrigor    schedule 23.11.2015
comment
Просто примечание для будущих читателей: чтобы вообще увидеть раздел «Заголовки» в «Фазах сборки», вам нужно щелкнуть по цели Pod. Основная цель приложения не будет содержать раздел «Заголовки». - person shmim; 29.01.2016
comment
Это полностью исправило это. Спасибо. Это должен быть утвержденный ответ. - person Gujamin; 06.02.2016
comment
Для меня уровень доступа был общедоступным, но он также не работает на зонтике, который не найден. Я переместил раздел заголовков этапов сборки наверх, и он начал работать. - person Aleksei Minaev; 10.02.2016
comment
Заголовок моего зонтика уже был публичным. Перемещение раздела вверх тоже не помогло. - person Rafael Bugajewski; 12.02.2016
comment
Если вы выполняли переименование / реорганизацию проекта, проверьте настройки заголовка оригинала, поскольку XCode, похоже, делает лучшее предположение на основе файлов. У меня было показано 6 заголовков уровня проекта, но исходный проект показал, что мне нужны два из них на общедоступном уровне и ни один из остальных. - person Buzzwig; 30.03.2016
comment
Этот ответ помог мне, но на самом деле не решил для меня проблему, т.е. е. umbrella header not found. В итоге я удалил файл заголовка на этапе сборки заголовков и добавил его обратно (убедившись, что это снова public). Это то, что наконец сработало для меня. - person mharper; 08.06.2016
comment
У меня была аналогичная проблема, когда Карфаген обновил одну из моих импортированных фреймворков. Я предполагаю, что у XCode проблемы с отслеживанием изменений в указанном пути фреймворка. Простой перезапуск XCode устранил проблему для меня. - person Tony; 01.03.2017
comment
Для меня заголовок был как в проектном, так и в публичном разделах. И мне пришлось удалить его из раздела "Проект". - person algrid; 07.11.2018

В Xcode 7 Beta со Swift 2 это также произойдет, если ваш заголовок Framework не объявлен как "Public"

Например, у меня была Cocoa Touch Framework с видимостью «Project» для файла заголовка и с ошибкой «Umbrella Header ... not found» для всех файлов Swift в моем проекте, когда у меня был заголовок «Public», ошибка исчезла

person Claude Houle    schedule 29.06.2015
comment
В моем случае, когда я столкнулся с этой проблемой, этот ответ показался мне более правильным, и он сработал для меня. - person greymouser; 21.07.2015
comment
Я согласен. Это правильный ответ. Убедитесь, что файл ‹project› .h имеет правильное целевое членство и уровень доступа (общедоступный). - person user965972; 10.10.2015
comment
@ Shadow_x99, как установить заголовок как общедоступный, мой вопрос размещен по адресу stackoverflow.com/questions/36084291/ - person user2727195; 19.03.2016
comment
На самом деле это вариант ответа @arturgrigor, за исключением того, что Xcode сам выполняет изменение. Конечный результат должен быть таким же. - person original_username; 28.03.2017

Это может произойти 4 различными способами, игнорируя ошибки в предыдущих версиях Xcode.

  • В вашем проекте нет зонтичного заголовка с именем $ (TARGET_NAME) .h
  • У вас есть заголовок зонтика, но он не установлен как общедоступный. См. ответ Arturgrigor
  • DEFINES_MODULE не установлен в YES
  • CLANG_ENABLE_MODULES не установлен в YES
person Claus Jørgensen    schedule 07.09.2016
comment
Пятая причина, которую я только что обнаружил: сам зонтик_header.h не должен проверяться ни в одной цели (как и Info.plist) - person nalexn; 24.07.2018
comment
У меня все в этом списке настроено правильно, но это не удается. - person Erik Aigner; 27.08.2018
comment
другая проблема, мой заголовок зонтика был в mytarget / mytarget.h должен быть в корне с module.modulemap, если вы его используете - person Nick H247; 23.03.2021

Это произойдет, когда для цели Framework включен параметр Always Search User Paths.

Установка No устранит эту ошибку.

ИМХО, это ошибка в Swift Compiler, и я отправил радар в Apple.
См. rdar : // 21038443

person Tim Bodeit    schedule 20.05.2015
comment
Спасибо! Это тот, который меня тоже достал. - person Chris Hatton; 05.10.2015
comment
Это сработало для меня. Дополнительным признаком является то, что он не удался сразу после очистки, но был успешным, если вы попытались повторить попытку без очистки. - person Ky Leggiero; 08.11.2017

Для меня уровень доступа был общедоступным, но он также не работает на зонтике, который не найден. Я переместил раздел «Заголовки» в «Фазы сборки» наверх, и он начал работать. Скрипт к подфайлу:

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

Понятия не имею, почему это происходит. Пробовал на фиктивных проектах - не получается. Только на больших с множеством зависимостей. Что-то с компиляцией ПЕРЕД копированием зонтичных заголовков.

person Aleksei Minaev    schedule 10.02.2016
comment
У меня сработало перемещение заголовков над исходными кодами компиляции. xCode 8.2.1. - person Rob Paterson; 22.01.2017
comment
У меня тоже сработало перемещение фазы заголовков наверх. - person Søren Mortensen; 04.03.2017
comment
Недопустимый Podfile файл: синтаксическая ошибка, неожиданный конец ввода, ожидается ключевое_слово_end. - person Volodymyr Kulyk; 16.01.2019

Определенно вы должны сделать свою структуру общедоступной:

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

person Bartłomiej Semańczyk    schedule 23.02.2017
comment
Прекрасно работает. Большое спасибо! - person kkiermasz; 23.08.2018
comment
Каков контекст этого скриншота? Что вы нажимаете, чтобы попасть туда? - person pkamb; 18.12.2019
comment
@pkamb Прошло некоторое время, но я отвечу на всякий случай, вам нужно открыть файл (отсутствующий заголовок) в Xcode, а затем: CMD + Opt + 0, чтобы открыть меню справа, затем выберите вкладку Identity и Тип - person rusito23; 29.01.2021

Для меня установка "Использовать карты заголовков" на "НЕТ" решила проблему.

person xySVerma    schedule 24.10.2015
comment
… И в моем случае установка ДА устранила проблему. К сожалению, похоже, что по этому параметру нет документации, но по умолчанию установлено «да», и я не уверен, почему для одной из моих целей было установлено значение «нет». - person robotspacer; 01.03.2017

Еще одно решение: после переименования папки старое местоположение все еще может быть указано в файле проекта для файла .h, даже если вы обновили местоположение через боковую панель Xcode. Это старое расположение вызывает ошибку заголовка зонтика.

Простое решение: удалите ссылку на файл .h и снова добавьте. (а затем не забудьте снова сделать это общедоступным!)

person Danra    schedule 29.03.2016

Я обнаружил, что с включенной схемой New Swift Build System и Parallelize Build я получаю ошибки, подобные этому вопросу. Решение состояло в том, чтобы связать фреймворки, которые были импортированы в исходные файлы Swift. (Я думаю, что раньше приложение собиралось, потому что так случилось, что фреймворки были связаны с чем-то, созданным ранее в очереди последовательной сборки).

Я написал сценарий, чтобы выполнить весь импорт во всех целевых объектах в рабочей области и убедиться, что их фреймворки связаны с этой целью.

https://github.com/Jon889/SwiftImportChecker

person Jonathan.    schedule 28.11.2018

Здесь уже есть отличные ответы. @ Shadow_x99 был очень полезен. Однако, если бы мне было позволено дополнить его своим собственным опытом.

Заголовок зонтика определяется автоматически в процессе сборки. Он не указан в настройках целевой сборки и не унаследован от настроек проекта.

Итак, чтобы избежать этой ошибки, которая - с XCode 7 - выглядит следующим образом;

warning: no umbrella header found for target 'MyTarget', module map will not be generated

Необходимо сделать два важных шага.

Во-первых, заголовок зонтика должен иметь то же имя, что и цель. Так что, если ваша цель - фреймворк с именем MyTarget, должен быть заголовок с именем MyTarget.h.

Во-вторых, на этапах сборки для MyTarget - как указано в этом ответе - этот файл заголовка должен быть указан в общедоступном разделе, как описано выше.

person Max MacLeod    schedule 18.02.2016

Ваш заголовочный файл должен находиться в разделе [Build Phases / Headers / Public].

Если ваш файл заголовка уже находится в разделе [Build Phases / Headers / Public], много раз выполнение следующих действий решило мою проблему:

  1. очистить проект
  2. переместите файл заголовка в раздел "частный" или "проект"
  3. переместите файл заголовка обратно в "публичный" раздел
  4. перестроить все заново
person Andrei A.    schedule 26.01.2016
comment
Ничего себе, это единственный, который сработал из этих десятков ответов, и кажется, что это будет наименее вероятным, спасибо! - person Paolo; 17.04.2019

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

Я добавил «Выполнить сценарий» в «Фазы сборки», но в итоге удалил его, и именно тогда я начал получать ошибку.

Мое решение закончилось тем, что мне пришлось очистить проект, перестроить мою структуру, а затем мой проект приложения был построен правильно.

person Ana Figueira    schedule 25.07.2018

По моему опыту, вы должны выбрать в качестве целей фреймворк, который выдает ошибку, а не цель проекта.
Затем скомпилируйте, и после компиляции он будет доступен для цели проекта.

person Eironeia    schedule 31.07.2019

Если вы используете Xcode 7.1 и CocoaPods 0.39, похоже, есть быстрое изменение компилятора, которое влияет на некоторые CocoaPods (Nimble, Quick и т. Д.). Попробуйте некоторые из решений, указанных в этом потоке: https://github.com/CocoaPods/CocoaPods/issues/4420, однако, если ни один из них не работает, попробуйте использовать Xcode 7.0. .1 или 7.2 бета. Вы можете получить их оба здесь: 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
person Marius    schedule 28.10.2015
comment
Спасибо @Marius Ursache. Следуя вашим инструкциям, я решил проблему. - person Vick Swift; 12.11.2015

Я решил это, переименовав свой module.modulemap в moduleXYZ.modulemap и изменив имя файла modulemap в настройках проекта.

person retterdesapok    schedule 02.07.2019

В моем случае я просто построил конкретный фреймворк с его схемой. А затем перестройте весь проект, и проблема решена.

person Hudi Ilfeld    schedule 18.05.2020

убедитесь, что пути импорта в настройках сборки включают файл, который вы пытаетесь включить ...

person Little Watchman    schedule 09.08.2020

Ни одно из этих исправлений выше не было успешным, но после длительного исследования cocoapods я обнаружил, что эта проблема была вызвана конфигурацией git, в которой символические ссылки не создавались в файловой системе git. Эти символические ссылки необходимы, чтобы Xcode знал, где находятся заголовки для фреймворка.

Исправление:

git config --global core.symlinks true

и сбросить файловую систему для git git reset --hard HEAD

а затем сделайте чистую сборку.

person amleszk    schedule 11.07.2021

Удалите эти файлы из каталога проекта. .xcworkspace pods/ и podfile.lock

обновите модуль и соберите проект.

person Subhash    schedule 01.10.2018

Я исправил это, установив режим компиляции проблемных настроек сборки фреймворка на инкрементный.

person Ghislain Leblanc    schedule 26.06.2019

В моем случае проблема была вызвана скриптом удаления заголовков на этапах сборки

function removeHeaders() {  
    find $BUILD_ROOT/...  -name '*.h' -exec rm -f {} \;  
}  
removeHeaders

Удаление этого скрипта устранило проблему.

person phnmnn    schedule 16.05.2019

Ни один из 9 ответов мне не помог, поэтому я попытался создать новый проект, который можно было бы отправить в Apple, чтобы сообщить об ошибке. Я был удивлен, что не смог воспроизвести проблему. Я проверил настройки сборки, и они были эквивалентны. Видимо это какой-то баг.

Если больше ничего не помогает, попробуйте создать новый проект и импортировать хотя бы несколько классов Objective C и Swift из текущего проекта, сравните настройки сборки, связанные с фреймворком, со значениями по умолчанию из нового проекта и в конечном итоге переместите все файлы в новый проект.

person Rafael Bugajewski    schedule 12.02.2016

Я работал над этим целый день, но оно того стоит. Я перепробовал все способы здесь, но я не решил это. Я создал новый проект, эксперимент и обнаружил, что Путь поиска заголовка пользователя был установлен как $ {SRCROOT} рекурсивный, и изменил его на $ {SRCROOT } нерекурсивный, изменил путь заголовка моста (например, #import "SVProgressHUD.h" -> #import "Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.h"), ошибка исчезла.

person ShengBo.Cai    schedule 28.06.2017