Подтвердить что ты не робот

Заголовок зонтика для модуля '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 находит файл заголовка, и предупреждение исчезает.

4b9b3361

Ответ 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

Для меня исправление было довольно простым, совершить все ваши изменения и построить снова. Предупреждение исчезло.