Заголовок зонтика для модуля 'myFramework' не включает заголовок 'otherFramework.h'
Моя среда Swift/iOS9 'viewer_protocol' использует другую и внешнюю среду Objective-C (CocoaAsyncSocket). Я использую Карфаген для сборки CocoaAsyncSocket. Пока все работает нормально: у меня есть пример приложения внутри моего фреймворка Xcode Project, использующего мой фреймворк без проблем.
Теперь я хочу использовать мой фреймворк в другом проекте Xcode - хотя и с использованием Carthage. Я включаю только мой Framework как зависимость, и Carthage автоматически разрешает зависимости в CocoaAsyncSocket. Я встроил обе фреймворки в этот новый проект Xcode и собрал свое приложение: здесь все отлично работает - кроме одного предупреждения, от которого я не могу избавиться:
/Users/hibento/Repositories/viewer_protocol/<module-includes>:1:1:
Umbrella header for module 'viewer_protocol' does not include header 'GCDAsyncSocket.h'
Это мой каркасный заголовок:
#import <UIKit/UIKit.h>
//! Project version number for viewer_protocol.
FOUNDATION_EXPORT double viewer_protocolVersionNumber;
//! Project version string for viewer_protocol.
FOUNDATION_EXPORT const unsigned char viewer_protocolVersionString[];
// In this header, you should import all the public headers of your framework
using statements like #import <viewer_protocol/PublicHeader.h>
#import <CocoaAsyncSocket/CocoaAsyncSocket.h>
Как вы можете видеть, CocoaAsyncSocket.h импортирован. Кроме того, внутри моего фреймворка включен файл CocoaAsyncSocket.h:
![my framework's folder]()
Что мне здесь не хватает? Я использую несколько других внешних фреймворков внутри своей фреймворк, предупреждений для них нет - все эти внешние фреймворки написаны на Swift - CocoaAsyncSocket - это чистый Objective-C.
Это мой фреймворк module.modulemap:
framework module viewer_protocol {
umbrella header "viewer_protocol.h"
export *
module * { export * }
}
module viewer_protocol.Swift {
header "viewer_protocol-Swift.h"
}
Обновление
Я нашел решение: изменив оператор импорта в заголовке моего фреймворка с
#import <CocoaAsyncSocket/CocoaAsyncSocket.h>
в
#import "CocoaAsyncSocket/CocoaAsyncSocket.h"
Теперь Xcode находит файл заголовка, и предупреждение исчезает.
Ответы
Ответ 1
У меня была такая же проблема сегодня
проблема была
Заголовок Umbrella для модуля HockeySDK 'не включает заголовок' BITHockeyBaseViewController.h '
, и решение было
1.строить и запустить проект и перейти на Навигатор отчетов
2.Выберите предупреждение, нажмите подробнее >
это позволит вам указать имя файла, в котором вам нужно внести изменения
как вы можете видеть ниже снимок экрана
![введите описание изображения здесь]()
Итак, я только что обновил свой оператор импорта в файле AppDelegate.m
Новый
#import "HockeySDK/HockeySDK.h"
Старый
#import <HockeySDK/HockeySDK.h>
и проблема ушла.
надеюсь, что это поможет кому-то. которые приходят сюда для решения.
Ответ 2
Недавно я столкнулся с той же проблемой. По-видимому, у меня был файл заголовка как public
в целевом членстве, но он не был показан в заголовке зонтика. Исправлена проблема, создавая файл заголовка с project
доступом вместо public
.
Ответ 3
У меня была такая же проблема. Казалось, что это связано со старыми файлами сборки.
Для меня работал стандартный исправитель ошибок Xcode:
- Очистить проект
- Удаленные производные данные
- Перезапустить Xcode
Ответ 4
Для меня решение было следующим:
1) Каждая структура Objective C имеет 1 файл заголовка, который содержит все:
#import ...
#import ...
#import ...
2) Убедитесь, что этот файл импортирует отсутствующий заголовок.
3) Снова создайте проект, он должен удалить предупреждение.
Ответ 5
Просто для полноты, если ваш заголовок настроен на публикацию в:
Фазы сборки > Заголовки
Вы должны либо
Включите импорт в свой основной заголовок, как отмечали другие
ИЛИ
Переместите этот заголовок на "private", если его не нужно открывать
Ответ 6
Кроме того, у вас могут быть выставлены файлы в пределах области Public
фаз построения фреймов, которые должны быть действительно возвращены в область Project
.
Если вы не хотите, чтобы эти файлы находились в заголовке зонтика вашей инфраструктуры, чтобы они были общедоступны, вы можете вернуть это.
Goto Framework → Target → Build Phases и перетащите, чтобы переместить ненужные файлы заголовков из Public в Project.
![Screenshot]()
Ответ 7
Мы получили это недавно, и это произошло из-за коррупции в DerivedData. Удаление этой папки устранило проблему.
Ответ 8
Взгляните на это сообщение:
@import vs #import - iOS 7
В нем рассматриваются концепции импорта нового модуля.
У меня была собственная пользовательская среда и после принятия нового метода для импорта objective-c framework
старый:
#import <MyFramework/MyFramework.h>
новый:
@import MyFramework;
он позаботился о предупреждении/
Ответ 9
Для других :
В моем случае я уже перемещаю заголовки, которые я хочу выставить, из своего фреймворка из "проекта" в "общедоступный" (этапы сборки цели фреймворка)
Тогда Xcode дал мне это предупреждение.
Xcode говорит нам, что нам также нужно добавить #import "имя заголовка в предупреждении> в открытый файл заголовка, который был создан с помощью framework, чтобы клиенты (из framework) знали этот заголовок.
Итак, исправление:
1. Перейдите к общедоступному заголовочному файлу фреймворка (тот, который был создан xcode при создании фреймворка).
2. добавьте #import "the-name-of-the-header-in-the-warning.h"
Ответ 10
В моем случае (рамки Obj-c):
Umbrella header for module 'opus' does not include header 'opus_multistream.h'
Мне нужно было изменить:
@import opus.opus_defines;
в
@import opus;
(у меня нет #import "....h"
или #import <....h>
для фреймворков)
Ответ 11
попытка исправить ошибку сборки архива привела меня к этой ошибке и опубликовала
мое решение было действительно простым, но навсегда потребовалось выяснить.
- Когда я запустил $pod install, он создал рабочую область для меня в том же каталоге, что и файл .xcodeproj.
- однако я уже создал рабочую область для использования в качестве ее родительского каталога.
- так что я просто удалил свое старое рабочее пространство и пошел с тем, который создавал pods
![введите описание изображения здесь]()
надеюсь, что это поможет кому-то!
glhf!
Ответ 12
Для меня исправление было довольно простым, совершить все ваши изменения и построить снова. Предупреждение исчезло.