Swift Framework: заголовок зонтика' [...].ч' не найден

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

16 ответов


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

Fix


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

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


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

  • у вас нет заголовка зонтика с именем $(TARGET_NAME).H в вашем проекте
  • у вас есть заголовок зонтика, но он не установлен как общедоступный. посмотреть arturgrigor по
  • DEFINES_MODULE не установлено YES
  • CLANG_ENABLE_MODULES не установлено YES

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

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

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


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

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

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


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

enter image description here


для меня установка "использовать карты заголовков" на " нет " решила проблему


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

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


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

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

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

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

два необходимо предпринять важные шаги.

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

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


Я просто столкнулся с этим снова. На этот раз мне удалось заставить вещи работать, построив структуру проблем (на скриншоте она называется "RangeMap") независимо.

enter image description here

Если Xcode не перечисляет схему для вашей структуры проблем в раскрывающемся списке, перейдите в "продукт - > схема - > ManageSchemes "и проверьте" показать."

после этого Xcode смог снова построить мой основной проект.


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

Я добавил "запустить скрипт" в "фазы сборки", но в конечном итоге удалил его, и именно тогда я начал получать ошибку.

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


Если вы используете 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/.

Edit: в моем случае, чтобы исправить проблему, мне также пришлось понижение CocoaPods до 0.38.2.

Later edit: похоже, это не связано с Xcode 7.1. Просто понижение CocoaPods до 0.38.2 должно помочь:

sudo gem uninstall cocoapods -v 0.39
sudo gem install cocoapods -v 0.38.2

ваш файл заголовка должен находиться в разделе [этапы сборки/заголовки/Public].

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

  1. очистить проект
  2. переместите файл заголовка в раздел" private "или" project"
  3. переместите файл заголовка обратно в раздел" public"
  4. снова все восстанавливать.

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

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


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

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


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