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

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

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

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

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

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

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

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

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

4b9b3361

Ответ 1

Попробуйте выполнить настройки сборки в разделе "Цель" и установите "Разрешить немодульные включения в Framework-модулях" в "YES".

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

Ответ 2

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

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

Screenshot

Ответ 3

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

Создать параметр настройки, который вам нужно изменить

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

#import <Foo/Bar.h> // referred to in two or more dependent files

Если параметр Разрешить немодульное включение в модулях фрейма на ДА приводит к тому, что набор ошибок "Х является двусмысленной ссылкой" или что-то в этом роде, вы должны иметь возможность отслеживать дублирующие дубликаты и устранять их. После того, как вы очистили свой код, установите Разрешить немодульное включение в Frame Modules обратно на НЕТ.

Ответ 4

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

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

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

Ответ 5

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

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

Ответ 6

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

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

Ответ 7

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

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

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

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

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

ПОЧЕМУ НЕ просто установить разрешение немодульное на ДА?

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

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

Ответ 8

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

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

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

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

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

Ответ 9

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

s.user_target_xcconfig = {'CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES' = > 'YES'}

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

Ответ 10

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

#import "MyFile.h"

и не как #import <MyFramework/MyFile.h>.

Ответ 11

Если это необходимо для целей 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

Ответ 12

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

Ответ 13

Я также сталкивался с этой проблемой и первоначально думал, что это проблема CocoaPods, но это была проблема в настройках сборки приложений, когда кто-то (вероятно, я) установил ${PODS_ROOT} в Пути поиска по заголовку и установил его как recursive поиск. Это позволяло ему находить заголовки, которые не были предназначены для использования при создании приложения. Как только я настроил это на использование non-recursive, все было в порядке. использование поиска recursive - ужасный хак, чтобы попытаться найти правильные заголовки. Урок выучен.

Ответ 14

Я закончил тем, что переместил Заголовок Umbrella в конец списка Заголовков после проверки вышеупомянутых решений, и это работало в Xcode 9.3.

Ответ 15

Я решил это, удалив папку Modules из фреймворка.

  • Перейдите к расположению вашего фреймворка, которое присутствует в проекте приложения с помощью поиска

  • Перейдите в папку Test.framework (в приведенном выше случае это будет CoreLibrary.framework) и папку "Удалить Modules ".

  • Очистите и перестройте приложение, оно решит проблему.

Ответ 16

В моем случае я забыл добавить файл .h и .m в раздел "s.source_files" файла .podspecs.

после добавления этого в нем все работает нормально.

enter image description here

Ответ 17

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