Swift Framework: Umbrella header' [...].ч' не найден


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

16 ответов:

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

Fix

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

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

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

  • у вас нет заголовка зонтика с именем $(TARGET_NAME).H в вашем проекте
  • у вас есть заголовок зонтика, но он не установлен как публичный. смотрите ответ артургригора
  • 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

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

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

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 не перечисляет схему для вашей структуры проблем в раскрывающемся списке, перейдите к" Product -> Scheme -> ManageSchemes "и проверьте" Show."

после этого 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.

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

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

ваш файл заголовка должен быть в разделе [Build Phases/Headers/Public].

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

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

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

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

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

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

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