Я использую Xcode 6,
1) Сначала я создаю динамическую библиотеку (CoreLibrary). Эта библиотека содержит файл RequestPoster.h.
2) Затем я создаю Cocoa Touch Framework и добавляю эту динамическую библиотеку (CoreLibrary).
3) Затем этот фреймворк добавляется в мой проект и выдает ошибку в файле RequestPoster.h (CoreLibrary).
Ошибка: включить немодульный заголовок в класс модуля фреймворка:
ifaddrs.h, arpa / inet.h, sys / types.h>
Этих файлов нет в проекте.
ifaddrs
, они привязаны к импорту ifaddrs.h./usr/include/libproc.h
?Убедитесь, что файлы заголовков общедоступны как часть общедоступных заголовков фреймворка.
Goto Framework -> Target -> Build Phases и перетащите соответствующие файлы заголовков из Project в Public. Надеюсь, это поможет!
источник
Вы можете установить для параметра Разрешить немодульные включения в модулях платформы в настройках сборки для затронутой цели значение ДА. Это параметр сборки, который вам нужно изменить:
ПРИМЕЧАНИЕ . Вы должны использовать эту функцию, чтобы обнаружить основную ошибку, которая, как я обнаружил, часто вызывается дублированием глобальных включений в угловых скобках в файлах с некоторыми зависимыми отношениями, то есть:
#import <Foo/Bar.h> // referred to in two or more dependent files
Если установка « Разрешить немодульные включения в модули фрейма» на « ДА» приводит к набору ошибок типа «X - неоднозначная ссылка» или чего-то в этом роде, вы сможете отследить нарушающие дубликаты и устранить их. После того, как вы очистили свой код, установите для параметра Разрешить немодульные включения в модулях фрейма значение НЕТ .
источник
У меня была такая же проблема, и я решил ее, просто опубликовав файл заголовка.
Если вы работаете над несколькими модулями в своем проекте. Затем ваш файл заголовка должен быть общедоступным, чтобы его можно было использовать в других частях проектов. Что вам нужно, так это выбрать этот файл заголовка и в представлении служебных программ проекта. Измените файл с Project / Private на Public. См. Изображение ниже:
источник
«Включить немодульный заголовок в модуль фреймворка»
Когда вы получаете эту ошибку, решение в некоторых случаях может заключаться в том, чтобы просто пометить файл, который вы пытаетесь импортировать, как «общедоступный» в инспекторе файлов «Целевое членство». По умолчанию это «Проект», и при такой настройке это может вызвать эту ошибку. Так было со мной, например, когда я пытался импортировать заголовки Google Analytic во фреймворк.
источник
На самом деле, более простой способ исправить это - вместо этого переместить
#import
оператор в начало.m
файла (вместо того, чтобы помещать его в файл.h
заголовка). Таким образом, он не будет жаловаться на то, что включает немодульный заголовочный файл. У меня была эта проблема , когдаAllow non-module includes
установлен вYES
сделал НЕ работать для меня, так что , перемещая его в файл реализации, он перестал жаловаться. Фактически, это предпочтительный способ импорта и включения файлов заголовков. После того, как вы это сделаете, верните это значение вNO
рабочее состояние.В идеале мы должны стремиться к тому, чтобы
Allow non-module includes
начатьNO
. Установка этого значенияYES
в большинстве случаев означает, что вы делаете что-то не так. Параметр переводится как «Разрешить импорт случайных файлов заголовков на диск, которые не являются частью модуля». На практике это применимо к очень немногим случаям использования, поэтому этот параметр должен быть всегдаNO
(т.е. значение по умолчанию).источник
Если вы разрабатываете свой собственный фреймворк:
Почему это происходит?
Если в каком-либо из общедоступных файлов заголовков, которые вы упомянули в своем module.modulemap, есть операторы импорта, которые не упомянуты в modulemap, это приведет к ошибке. Поскольку он пытается импортировать какой-либо заголовок, который не объявлен как модульный (в module.modulemap), он нарушает модульность фреймворка.
КАК я могу это исправить?
Просто включите заголовок, который вызвал ошибку, в ваш module.modulemap и выполните сборку снова!
ПОЧЕМУ НЕ просто установите allow non-modular на YES?
Поскольку на самом деле это не совсем решение, вы говорите своему проекту: «Этот фреймворк должен был быть модульным, но это не так. Используйте его как-нибудь, мне все равно». Это не решает проблему модульности вашей библиотеки.
Для получения дополнительной информации проверьте это сообщение в блоге или обратитесь к документации clang .
источник
Allow Non-modular Includes in Framework Modules
работает только в коде objc. не работать в быстром темпе.После периода исследований я обнаружил, что swift может передавать параметр предупреждения в clang, поэтому установите
OTHER_SWIFT_FLAGS
значение-Xcc -Wno-error=non-modular-include-in-framework-module
предотвращения ошибки быстрого импорта.только для тех, у кого такая же проблема
источник
Если вам это нужно для целей 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
источник
У меня была такая же проблема, и ничего из вышеперечисленного мне не помогло. Так что я надеюсь, что мой ответ будет кому-то полезен. В моем случае проблема заключалась в настройке ALWAYS_SEARCH_USER_PATHS. Когда он был установлен на NO, проект строился и работал нормально. Но поскольку один из модулей требовал, чтобы он был установлен на ДА, я получал ошибку
После пары чашек кофе и целого дня исследований я обнаружил, что согласно известным проблемам Xcode 7.1 Beta 2 примечания к выпуску :
Я использовал XCode 7.3, но похоже, что эта ошибка еще не исправлена.
источник
та же проблема сводит с ума. наконец, я обнаружил, что в реализации вместо интерфейса можно добавить 'import xxx.h'. И если вы используете Cocoapods для управления своим проектом. вы можете добавить
в вашем файле xxx.podspec.
источник
Если вы видите эту ошибку в заголовке зонтика при создании динамической структуры , убедитесь, что вы импортируете свой файл как:
#import "MyFile.h"
а не как
#import <MyFramework/MyFile.h>
.источник
Я тоже столкнулся с этой проблемой и первоначально думал, что это проблема CocoaPods, но это была проблема в настройках сборки приложений, где кто-то (возможно, я) установил
${PODS_ROOT}
пути поиска заголовков и установил его какrecursive
поиск. Это позволяло ему находить заголовки, которые не были предназначены для использования при создании приложения. Как только я настроил это на использование,non-recursive
все было в порядке. использованиеrecursive
поиска - ужасный прием, пытающийся найти правильные заголовки. Урок выучен.источник
Меня это немного раздражало. Никакие предложения, похоже, не помогли в моем конкретном случае, поскольку мне нужно было включить «немодульные» заголовки в мой индивидуальный файл заголовка. Работа, которую я использовал, заключалась в том, чтобы вставить вызов импорта в файл заголовка префикса.
источник
Я закончил тем, что переместил Umbrella Header в конец списка заголовков после проверки вышеуказанных решений, и это сработало в Xcode 9.3.
источник
Я решил удалить
Modules
папку из фреймворка.Перейдите в расположение вашей платформы, которое присутствует в проекте приложения, с помощью средства поиска.
Зайдите в
Test.framework
папку (в приведенном выше случае это будетCoreLibrary.framework
) и удалитеModules
папку.Очистите и заново соберите приложение, это решит проблему.
источник
В моем случае я забыл добавить файлы .h и .m в раздел «s.source_files» файла .podspecs.
после добавления этого в него все работает нормально.
источник
попробуй
@import FrameworkName
вместо#import "FrameworkName.h"
источник
У меня была аналогичная проблема! При запуске моего целевого приложения все работало нормально, но при переходе к тестовой цели и попытке запустить тесты выскакивала ошибка «Включить немодульный заголовок внутри модуля фреймворка». Я попробовал все решения, размещенные здесь, но ни одно из них не сработало. В конце я прокрутил все настройки сборки и прочитал описание каждой из них, относящейся к заголовкам.
Переключение
USE_HEADERMAP
наNO
сделал трюк!Я надеюсь, что это будет полезно для всех!
источник
Мне удалось устранить десятки этих ошибок с помощью Git clean. Вот команда:
git clean -dffx && git reset --hard
источник