Swift Framework: заголовок зонта '[…] .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'
90 голосов | спросил Tim Bodeit 20 Maypm15 2015, 19:14:51

16 ответов


0

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

Если установить значение No, это устранит эту ошибку.

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

ответил Tim Bodeit 20 Maypm15 2015, 19:14:51
0

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

 Исправить

ответил arturgrigor 23 12015vEurope/Moscow11bEurope/MoscowMon, 23 Nov 2015 10:33:40 +0300 2015, 10:33:40
0

В бета-версии XCode 7 с Swift2 это также может произойти, если ваш Framework Framework не объявлен как «Public»

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

ответил Claude Houle 29 J0000006Europe/Moscow 2015, 22:48:13
0

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

  • В вашем проекте нет зонтичного заголовка с именем $ (TARGET_NAME) .h
  • У вас есть зонтичный заголовок, но он не является общедоступным. См. ответ arturgrigor
  • DEFINES_MODULE не установлено в YES
  • CLANG_ENABLE_MODULES не установлено в YES
ответил Claus Jørgensen 8 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowThu, 08 Sep 2016 01:13:34 +0300 2016, 01:13:34
0

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

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

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

ответил Aleksei Minaev 10 FebruaryEurope/MoscowbWed, 10 Feb 2016 17:45:34 +0300000000pmWed, 10 Feb 2016 17:45:34 +030016 2016, 17:45:34
0

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

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

ответил Bartłomiej Semańczyk 23 FebruaryEurope/MoscowbThu, 23 Feb 2017 14:23:48 +0300000000pmThu, 23 Feb 2017 14:23:48 +030017 2017, 14:23:48
0

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

ответил xySVerma 24 +03002015-10-24T17:41:09+03:00312015bEurope/MoscowSat, 24 Oct 2015 17:41:09 +0300 2015, 17:41:09
0

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

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

ответил Danra 29 MarpmTue, 29 Mar 2016 13:24:29 +03002016-03-29T13:24:29+03:0001 2016, 13:24:29
0

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

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

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

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

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

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

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

ответил Max MacLeod 18 FebruaryEurope/MoscowbThu, 18 Feb 2016 18:42:21 +0300000000pmThu, 18 Feb 2016 18:42:21 +030016 2016, 18:42:21
0

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

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

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

ответил Ana Figueira 25 J000000Wednesday18 2018, 17:47:05
0

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

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

https://github.com/Jon889/SwiftImportChecker

ответил Jonathan. 28 32018vEurope/Moscow11bEurope/MoscowWed, 28 Nov 2018 04:42:04 +0300 2018, 04:42:04
0

Если вы используете 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
ответил Marius 28 +03002015-10-28T06:45:43+03:00312015bEurope/MoscowWed, 28 Oct 2015 06:45:43 +0300 2015, 06:45:43
0

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

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

  1. очистить проект
  2. переместите файл заголовка в раздел "private" или "project"
  3. переместите файл заголовка обратно в "публичный" раздел
  4. восстановите все заново
ответил Andrei A. 26 Jpm1000000pmTue, 26 Jan 2016 17:15:13 +030016 2016, 17:15:13
0

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

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

ответил Subhash 1 +03002018-10-01T11:33:23+03:00312018bEurope/MoscowMon, 01 Oct 2018 11:33:23 +0300 2018, 11:33:23
0

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

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

ответил Rafael Bugajewski 12 FebruaryEurope/MoscowbFri, 12 Feb 2016 18:27:21 +0300000000pmFri, 12 Feb 2016 18:27:21 +030016 2016, 18:27:21
0

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

ответил ShengBo.Cai 28 J0000006Europe/Moscow 2017, 10:30:50

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132