Включить немодульный заголовок внутри фрейм-модуля

Я использую Xcode 6,

1) Во-первых, я создаю динамическую библиотеку (CoreLibrary). Эта библиотека содержит файл RequestPoster.h.

2) Затем я создаю Cocoa Touch Framework и добавил эту динамическую библиотеку (CoreLibrary).

3) Затем эта структура добавляется в мой проект и дает ошибку в файле RequestPoster.h (CoreLibrary).

Ошибка: включить немодульный заголовок внутри classа модульного модуля:

ifaddrs.h, arpa / inet.h, sys / types.h>

Эти файлы не найдены в проекте.

Попытайтесь выполнить настройки сборки в разделе «objective» и установите «Разрешить немодульное включение в структурные модули» в значение «ДА».

Реальный ответ заключается в том, что местоположение импорта должно быть изменено владельцем библиотеки. Эти файлы ifaddrs.h, arpa / inet.h, sys / types.h импортируются в файл .h в фреймворке, который Xcode не нравится. Хранитель библиотеки должен переместить их в файл .m. См. Например, эту проблему в GitHub, где AFNetworking исправил ту же проблему: https://github.com/AFNetworking/AFNetworking/issues/2205

Убедитесь, что файлы заголовков общедоступны как часть общих заголовков структуры.

Goto Framework -> Target -> Build Phases и перетащите, чтобы переместить соответствующие файлы заголовков из Project в Public. Надеюсь, это поможет!

Скриншот

Вы можете установить Разрешить немодульное включение в Framework Modules в настройках сборки для уязвимого объекта в YES. Это настройка сборки, которую нужно изменить:

Элемент настроек сборки, который необходимо отредактировать

ПРИМЕЧАНИЕ . Вы должны использовать эту функцию, чтобы выявить основную ошибку, которая, как я обнаружила, часто вызвана дублированием глобального скобок с угловыми скобками, включает в себя файлы с некоторыми зависимыми отношениями, то есть:

 #import  // referred to in two or more dependent files 

Если для параметра « Разрешить немодульное включение» в «Модулях кадра» значение « ДА» приводит к тому, что набор ошибок «Х является двусмысленной ссылкой» или что-то в этом роде, вы должны иметь возможность отслеживать дублирующие дубликаты и исключать их. После того, как вы очистили свой код, установите Allow Un-moduleular в Frame Modules обратно на NO .

У меня была такая же проблема и решить ее, просто создав заголовочный файл. [Проблема]

Если вы работаете над несколькими модулями в своем проекте. Тогда ваш файл заголовка должен быть общедоступным для использования в других частях проектов. Вам нужно выбрать этот заголовочный файл и в представлении «Утилиты» проекта. Измените файл с Project / Private на Public. См. Изображение ниже:

Изменение области содержимого заголовка

На самом деле более простой способ исправить это – переместить оператор #import в начало .m файла вместо него (вместо того, чтобы иметь его в файле заголовка .h ). Таким образом, он не будет жаловаться, что он включает немодульный заголовочный файл. У меня была эта проблема, когда Allow non-module includes значение YES , НЕ работал для меня, поэтому, переместив его в файл реализации, он прекратил жаловаться. В любом случае это предпочтительный способ импорта и включения файлов заголовков. После того, как вы это сделали, установка этого параметра на NO должна работать.

В идеале мы должны попытаться настроить Allow non-module includes на NO . Установка этого значения в YES в большинстве случаев означает, что вы делаете что-то неправильно. Параметр переводится как «Разрешить импорт случайных файлов заголовков на диск, которые не являются частью модуля». Это применимо к очень немногим практическим случаям на практике, и поэтому этот параметр всегда должен быть NO (т. Е. Значением по умолчанию).

«Включить немодульный заголовок внутри фрейм-модуля»

Когда вы получите эту ошибку, решение в некоторых случаях может состоять в том, чтобы просто отметить файл, который вы пытаетесь импортировать как «общеansible» в инспекторе файлов «Целевое членство». По умолчанию используется «Проект», и, когда он установлен таким образом, это может привести к этой ошибке. Так было со мной при попытке импортировать заголовки Google Analytics в frameworks, например.

У меня была одна и та же проблема, и мне ничего не помогло. Поэтому я надеюсь, что мой ответ будет полезен для кого-то. В моем случае проблема была в настройке ALWAYS_SEARCH_USER_PATHS. Когда он был настроен на НЕТ, проект был построен и работал нормально. Но поскольку один из модhive требует, чтобы он был установлен в YES, я получал ошибку

Включить немодульный заголовок внутри фрейм-модуля

После пары чашек кофе и дневного исследования я узнал, что согласно известным выпускам выпусков Xcode 7.1 Beta 2 :

• Если вы получите сообщение об ошибке «Включить немодульный заголовок внутри фрейм-модуля» для ранее скомпилированной структуры, убедитесь, что для параметра «Всегда искать пользовательские пути» установлено значение «Нет». По умолчанию используется значение «Да» только по причинам, связанным с наследством. (22784786)

Я использовал XCode 7.3, но, похоже, эта ошибка еще не исправлена.

та же проблема делает crazy.finally, я нахожу, что «import xxx.h» в реализации вместо интерфейса может исправить проблему. И если вы используете Cocoapods для управления вашим проектом. вы можете добавить

s.user_target_xcconfig = {‘CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES’ => ‘YES’}

в вашем файле «xxx.podspec».

Если вам нужно это для целей CocoaPods, добавьте эти строки в Podfile :

 post_install do |installer| installer.pods_project.targets.each do |target| target.build_configurations.each do |config| target.build_settings(config.name)['CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES'] = 'YES' end end end 

Если вы видите эту ошибку в заголовке зонтика при построении динамической структуры , убедитесь, что вы импортируете файл как:

#import "MyFile.h"

а не как #import .

В случае, если вы разрабатываете свою собственную структуру:

Почему это происходит?

Если какой-либо из общедоступных файлов заголовков, упомянутых в вашем модуле.modulemap, содержит инструкции импорта, которые не упоминаются в модуле mapmap, это даст вам ошибку. Поскольку он пытается импортировать некоторый заголовок, который не объявляется модульным (в модуле.modulemap), он нарушает модульность структуры.

КАК это можно исправить?

Просто включите заголовок, который дал ошибку вашему модулю.modulemap и снова построил!

ПОЧЕМУ НЕ УСТАНАВЛИВАЕТСЯ, чтобы немодульное ДА?

Потому что на самом деле это не решение, так как вы рассказываете о своем проекте «эта структура должна была быть модульной, но это не так. Используйте ее как-то, мне все равно». Это не устраняет проблему модульности вашей библиотеки.

Для получения дополнительной информации проверьте это сообщение в блоге или обратитесь к документам clang .

Для меня это была досадная проблема. Никакие предложения, казалось, не помогли моему конкретному случаю, так как мне нужно было включить «немодульные» заголовки в отдельный файл заголовка файла. Работа вокруг, которую я использовал, заключалась в том, что она вставляла вызов импорта в файл заголовка префикса.

В итоге я переместил заголовок Umbrella в нижнюю часть списка заголовков после проверки вышеуказанных решений и работал в Xcode 9.3.

Я смог очистить десятки этих ошибок, используя Git clean. Вот команда: git clean -dffx && git reset --hard

  • Получение времени, прошедшего в Objective-C
  • Objective-C: Как изменить class объекта во время выполнения?
  • Как я могу «разрезать» прозрачное отверстие в UIImage?
  • Как настроить размер содержимого UIScrollView динамически
  • iOS 8 Снимок снимка, который не был отображен, приводит к созданию пустого моментального снимка
  • Метод доступа после завершения анимации UIImageView
  • SEL выполняет выбор и аргументы
  • UISwitch в ячейке UITableView
  • Как масштабировать UIImageView пропорционально?
  • iPhone: обнаружение бездействия пользователя / время простоя с момента последнего касания экрана
  • Сравнение двух NSDates и игнорирование временной составляющей
  • Давайте будем гением компьютера.