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 заголовок. Проверьте прикрепленное изображение, чтобы узнать, как это исправить.
в 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.
еще одно решение: после переименования папки старое местоположение все еще может быть указано в файле проекта .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") независимо.
Если 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, решил мою проблему:
- очистить проект
- переместите файл заголовка в раздел" private "или" project"
- переместите файл заголовка обратно в раздел" public"
- снова все восстанавливать.
удалите эти файлы из каталога проекта.
.xcworkspace
pods/
и podfile.lock
обновите модуль и создайте проект.
ни один из 9 ответов помог мне, поэтому я попытался создать новый проект, который я мог бы отправить для файл ошибка. Я был удивлен, что не смог воспроизвести проблему. Я проверил настройки сборки, и они были эквивалентны. Видимо, это какая-то ошибка.
Если больше ничего не помогает, попробуйте создать новый проект и импортировать хотя бы некоторые классы Objective C & Swift из текущего проекта, сравните настройки сборки, связанные с платформой, со значениями по умолчанию из нового проекта и в конечном итоге переместите все файлы в новый проект.
Я работал над этим целый день, но это того стоит.Я перепробовал все способы здесь но я не решить. Я создал новый проект, эксперимент, и я узнал Путь Поиска Заголовка Пользователя был установлен ${SRCROOT} рекурсивный, и я изменил его на ${SRCROOT} нерекурсивный, изменен путь заголовка моста (например,#import "SVProgressHUD.h"
->#import "Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.h"
), ошибка ушла.