Estoy usando Xcode 6,
1) En primer lugar, estoy creando una biblioteca dinámica (CoreLibrary). Esta biblioteca contiene el archivo RequestPoster.h.
2) Luego creé un Cocoa Touch Framework y agregué esta biblioteca dinámica (CoreLibrary).
3) Luego, este marco se agrega a mi proyecto y da error en el archivo RequestPoster.h (CoreLibrary).
Error: Incluir un encabezado no modular dentro de la clase de módulo de marco:
ifaddrs.h, arpa / inet.h, sys / types.h>
Estos archivos no se encuentran en el proyecto.
ifaddrs
, están obligados a importar ifaddrs.h./usr/include/libproc.h
?Asegúrese de que los archivos de encabezado estén disponibles públicamente como parte de los encabezados públicos del marco.
Goto Framework -> Target -> Build Fases y arrastre para mover los archivos de encabezado relevantes de Project a Public. ¡Espero que ayude!
fuente
Puede establecer Permitir inclusiones no modulares en Módulos marco en Configuración de compilación para el objetivo afectado en SÍ. Esta es la configuración de compilación que necesita editar:
NOTA : debe utilizar esta función para descubrir el error subyacente, que con frecuencia se debe a la duplicación de las inclusiones globales entre corchetes en los archivos con alguna relación dependiente, es decir:
Si establecer Permitir inclusiones no modulares en Módulos de trama en SÍ da como resultado un conjunto de errores "X es una referencia ambigua" o algo por el estilo, debería poder rastrear los duplicados infractores y eliminarlos. Una vez que haya limpiado su código, establezca Permitir inclusiones no modulares en Módulos de trama nuevamente en NO .
fuente
Tuve el mismo problema y lo resolví simplemente haciendo público el archivo de encabezado.
Si está trabajando en múltiples módulos en su proyecto. Luego, su archivo de encabezado debe ser público para ser utilizado en otras partes de los proyectos. Lo que necesita es seleccionar ese archivo de encabezado y en la vista de Utilidades del proyecto. Cambie el archivo de Proyecto / Privado a Público. Ver imagen a continuación:
fuente
"Incluir encabezado no modular dentro del módulo marco"
Cuando obtiene este error, la solución en algunas circunstancias puede ser simplemente marcar el archivo que está intentando importar como "público" en el inspector de archivos "Membresía de destino". El valor predeterminado es "Proyecto", y cuando se configura de esta manera puede causar este error. Ese fue el caso conmigo cuando intenté importar los encabezados de Google Analytic en un marco, por ejemplo.
fuente
En realidad, una forma más fácil de solucionar esto es mover la
#import
declaración a la parte superior del.m
archivo (en lugar de tenerla en su.h
archivo de encabezado). De esta manera, no se quejará de que incluye un archivo de encabezado no modular. Tenía este problema por el queAllow non-module includes
establece enYES
sí no trabajo para mí, por lo que al moverlo al archivo de implementación, se detuvo en las protestas. De hecho, esta es la forma preferida de importar e incluir archivos de encabezado de todos modos. Una vez que hayas hecho esto, volver a configurar estoNO
debería funcionar.Idealmente, deberíamos tratar de aspirar a
Allow non-module includes
establecerloNO
. Establecer estoYES
en la mayoría de los casos significa que estás haciendo algo mal. La configuración se traduce como "Permitir la importación de archivos de encabezado aleatorio en el disco que de otro modo no forman parte del módulo". Esto se aplica a muy pocos casos de uso en la práctica, por lo que esta configuración siempre debe serNO
(es decir, el valor predeterminado).fuente
En caso de que esté desarrollando su propio marco:
¿Por qué está pasando esto?
Si alguno de los archivos de encabezado públicos que ha mencionado en su module.modulemap tiene declaraciones de importación que no son mencionan en modulemap, esto le dará el error. Como intenta importar algún encabezado que no se declara como modular (en module.modulemap), rompe la modularidad del marco.
¿Cómo puedo arreglarlo?
¡Solo incluya el encabezado que le dio el error a su module.modulemap y vuelva a compilar!
¿POR QUÉ NO simplemente establecer permitir no modular a SÍ?
Porque no es realmente una solución aquí, con eso le dices a tu proyecto "se suponía que este marco era modular pero no lo es. Úselo de alguna manera, no me importa". Esto no soluciona el problema de modularidad de su biblioteca.
Para obtener más información, consulte esta publicación de blog o consulte los documentos de clang .
fuente
Si necesita esto para los objetivos de CocoaPods, agregue estas líneas en
Podfile
:fuente
Allow Non-modular Includes in Framework Modules
solo funciona en código objc. No funciona a la velocidad.Después de un período de investigación, descubrí que swift puede pasar el parámetro de advertencia a clang, así
OTHER_SWIFT_FLAGS
que-Xcc -Wno-error=non-modular-include-in-framework-module
configúrelo para inhibir el error de importación de swift.solo para alguien que tiene el mismo problema
fuente
Tuve el mismo problema y nada de lo anterior me ayudó. Así que espero que mi respuesta sea útil para alguien. En mi caso, el problema estaba en la configuración ALWAYS_SEARCH_USER_PATHS. Cuando se estableció en NO, el proyecto se construyó y funcionó bien. Pero en la medida en que uno de los pod requirió que se estableciera en YES, recibí un error
Después de un par de tazas de café y todo el día investigando, descubrí que de acuerdo con los problemas conocidos de Xcode 7.1 Beta 2, notas de la versión :
Sin embargo, estaba usando XCode 7.3, pero parece que este error aún no se ha solucionado.
fuente
el mismo problema se vuelve loco. Finalmente, encuentro que poner la 'importación xxx.h' en la implementación en lugar de la interfaz puede solucionar el problema. Y si usa Cocoapods para administrar su proyecto, puede agregar
en su archivo 'xxx.podspec'.
fuente
Si ve este error en un encabezado general al crear un marco dinámico , asegúrese de importar su archivo como:
#import "MyFile.h"
y no como
#import <MyFramework/MyFile.h>
.fuente
También me encontré con este problema y originalmente pensé que era un problema de CocoaPods, pero era un problema en la configuración de compilación de aplicaciones donde alguien (probablemente yo) había establecido
${PODS_ROOT}
en Rutas de búsqueda de encabezado y lo configuró para que fuera unarecursive
búsqueda. Esto le permitía encontrar encabezados que no estaban destinados a ser utilizados al compilar la aplicación. Una vez que configuré esto para usar,non-recursive
todo estuvo bien. usar larecursive
búsqueda es un truco terrible para tratar de encontrar los encabezados adecuados. Lección aprendida.fuente
Este fue un tipo de problema molesto para mí. Ninguna sugerencia pareció ayudar a mi caso particular, ya que necesitaba incluir los encabezados "no modulares" en mi archivo de encabezado de archivo individual. La solución que usé fue pegar la llamada de importación en el archivo de encabezado de prefijo.
fuente
Terminé moviendo el Umbrella Header al final de la lista de Headers después de verificar las soluciones anteriores, y eso funcionó en Xcode 9.3.
fuente
Lo resolví eliminando la
Modules
carpeta del marco.Navegue hasta su ubicación de marco que está presente en el Proyecto de aplicación utilizando el buscador
Vaya dentro de la
Test.framework
carpeta (en el caso anterior seráCoreLibrary.framework
) y elimine laModules
carpeta.Limpie y vuelva a compilar la aplicación, resolverá el problema.
fuente
En mi caso, olvidé agregar el archivo .h y .m en la sección "s.source_files" del archivo .podspecs.
después de agregar esto, funciona bien.
fuente
intente en
@import FrameworkName
lugar de#import "FrameworkName.h"
fuente
Pude eliminar docenas de estos errores usando Git clean. Aquí está el comando:
git clean -dffx && git reset --hard
fuente