ios - framework - Marco Swift: cabecera del paraguas ''[...].h'' no encontrada
En un marco personalizado que contiene código Objective-C y Swift , el compilador Swift arroja el siguiente error:
[build_path]/unextended-module.modulemap:2:19: error: umbrella header ''bugtest.h'' not found
umbrella header "bugtest.h"
^
<unknown>:0: error: could not build Objective-C module ''bugtest''
Descubrí que con el nuevo sistema Swift Build y Parallelize Build activado el esquema, obtendría errores como en esta pregunta. La solución fue vincular a los marcos que se habían importado en los archivos fuente rápidos. (Creo que anteriormente la aplicación se compilaría porque simplemente sucedió que los marcos estaban vinculados a algo creado previamente en la cola de compilación en serie).
Escribí un script para revisar todas las importaciones en todos los objetivos en un espacio de trabajo y asegurarme de que sus marcos se hayan vinculado a ese objetivo.
Elimine estos archivos del directorio del proyecto.
.xcworkspace
pods/
y
podfile.lock
actualizar el pod y construir el proyecto.
En XCode 7 Beta, con Swift2, también ocurrirá si su Encabezado de Framework no se declara como "Público"
Por ejemplo, tenía un Cocoa Touch Framework con una visibilidad de "Proyecto" para el archivo de encabezado, y el error "Umbrella Header ... not found" para todos los archivos rápidos en mi proyecto, una vez que tenía el encabezado "Public", el el error desapareció
En mi experiencia, debe elegir en los objetivos el marco que le está dando el error, no el objetivo del proyecto.
Luego compile, y después de compilar estará disponible en el objetivo del proyecto.
Esto sucederá cuando la configuración
Always Search User Paths
esté habilitada para el objetivo de Framework.
Establecerlo en
No
resolverá ese error.
En mi humilde opinión, este es un error en el compilador Swift y he archivado un radar con Apple.
Ver
rdar://21038443
Hay 4 formas diferentes en que esto puede suceder, ignorando errores en versiones anteriores de Xcode
- No tiene un encabezado general llamado $ (TARGET_NAME) .h en su proyecto
- Tiene un encabezado general, pero no está establecido como público. Ver la respuesta de arturgrigor
-
DEFINES_MODULE
no está establecido enYES
-
CLANG_ENABLE_MODULES
no está establecido enYES
Hay algunas respuestas excelentes aquí ya. @ Shadow_x99 fue muy útil. Sin embargo, si se me permitiera complementar con mi propia experiencia.
Un encabezado paraguas se identifica automáticamente en el proceso de construcción. No se especifica en la configuración de compilación del objetivo ni se hereda de la configuración del proyecto.
Entonces, para evitar este error que, a partir de XCode 7 , es el siguiente;
warning: no umbrella header found for target ''MyTarget'', module map will not be generated
Se deben tomar dos pasos importantes.
En primer lugar, el encabezado paraguas debe tener
el mismo nombre que el objetivo
.
Entonces, si su objetivo es un marco llamado
MyTarget
, debe haber un encabezado llamado
MyTarget.h
.
En segundo lugar, en las fases de
MyTarget
de
MyTarget
, como se menciona en esa respuesta, ese archivo de encabezado debe aparecer en la
sección pública
como se detalla anteriormente.
He estado trabajando en ello durante todo un día, pero vale la pena. Intenté todas las formas
aquí,
pero no lo resolví.
Creé
un nuevo proyecto, un experimento, y descubrí que la
ruta de búsqueda de encabezado de usuario
estaba configurada
$ {SRCROOT} recursiva
, y la cambié a
$ {SRCROOT} no recursiva
, cambié la ruta del encabezado de puente (por ejemplo,
#import "SVProgressHUD.h"
->
#import "Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.h"
), el error desapareció.
Lo arreglé haciendo que el Modo de compilación de la configuración de compilación del marco problemático sea Incremental.
Ninguna de las 9 respuestas me ayudó, así que intenté crear un nuevo proyecto que pudiera enviar a Apple para que presentara un error. Me sorprendió no poder reproducir el problema. Revisé la configuración de compilación y eran equivalentes. Aparentemente esto es algún tipo de error.
Si nada más ayuda , intente crear un nuevo proyecto e importe al menos algunas clases de Objective C y Swift de su proyecto actual, compare la configuración de compilación relacionada con el marco con los valores predeterminados del nuevo proyecto y eventualmente mueva todos los archivos al nuevo proyecto.
Para mí, configurar ''Usar mapas de encabezado'' en ''NO'' resolvió el problema
Para mí, el nivel de acceso era público pero también falla en el paraguas no encontrado. Moví la sección "Encabezados" de las "Fases de compilación" a la parte superior y comenzó a funcionar. Script para podfile:
post_install do |installer|
installer.pods_project.targets.each do |target|
phase_name = ''Headers''
target.build_phases.each do |phase|
if (phase.display_name.include? phase_name)
target.build_phases.unshift(phase).uniq! unless target.build_phases.first == phase
end
end
end
No tengo idea de por qué está sucediendo. Intenté proyectos ficticios, no está sucediendo. Solo en grandes con múltiples dependencias. Algo con compilar ANTES de copiar encabezados paraguas.
Puede que el problema se deba a la eliminación del script de encabezados en Fases de compilación
function removeHeaders() {
find $BUILD_ROOT/... -name ''*.h'' -exec rm -f {} /;
}
removeHeaders
Eliminar este script solucionó el problema.
Resolví esto cambiando el nombre de mi module.modulemap a moduleXYZ.modulemap y cambiando el nombre del archivo modulemap en la configuración del proyecto
Si está utilizando Xcode 7.1 y CocoaPods 0.39, parece que hay un cambio rápido en el compilador que afecta a algunos CocoaPods (Nimble, Quick, etc.) Pruebe algunas de las soluciones especificadas en este hilo: https://github.com/CocoaPods/CocoaPods/issues/4420 sin embargo, si ninguno de ellos funciona, intente usar Xcode 7.0.1 o 7.2 beta. Puede obtener ambos aquí: https://developer.apple.com/downloads/ .
Editar: en mi caso, para solucionar el problema, también tuve que degradar CocoaPods a 0.38.2.
Edición posterior: parece no estar relacionado con Xcode 7.1. Simplemente degradar CocoaPods a 0.38.2 debería ayudar:
sudo gem uninstall cocoapods -v 0.39
sudo gem install cocoapods -v 0.38.2
Su archivo de encabezado debe estar en la sección [Fases de compilación / Encabezados / Público].
Si su archivo de encabezado ya está en la sección [Fases de compilación / Encabezados / Público], muchas veces hacer lo siguiente resolvió mi problema:
- limpiar el proyecto
- mover el archivo de encabezado a la sección "privada" o "proyecto"
- mover el archivo de encabezado de nuevo a la sección "pública"
- reconstruir todo de nuevo
Tuve el mismo problema y ninguna de las respuestas sugeridas ayudó en mi caso, así que lo dejo aquí en caso de que alguien tenga el mismo problema.
Agregué un "Ejecutar script" en "Fases de compilación", pero terminé eliminándolo y ahí fue cuando comencé a recibir el error.
Mi solución terminó teniendo que limpiar el proyecto, reconstruir mi marco y luego mi proyecto de aplicación se compiló correctamente.
Una solución más: después de cambiar el nombre de una carpeta, la ubicación anterior aún puede aparecer en el archivo del proyecto para el archivo .h, incluso si actualizó la ubicación a través de la barra lateral de Xcode. Esta antigua ubicación provoca el error de encabezado paraguas.
Solución simple: elimine la referencia al archivo .h y vuelva a agregar. (¡y luego recuerda hacerlo público nuevamente!)