tutorial framework custom create awesome ios swift ios-frameworks

ios - framework - Marco Swift: cabecera del paraguas ''[...].h'' no encontrada



ios create framework (20)

Definitivamente debe establecer su marco de trabajo en público:

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.

https://github.com/Jon889/SwiftImportChecker


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 generalmente ocurre después de un cambio de nombre del proyecto o algo así. El problema es que el encabezado general ya no aparece como un encabezado público . Verifique la imagen adjunta para ver cómo solucionar esto.


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 en YES
  • CLANG_ENABLE_MODULES no está establecido en YES

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:

  1. limpiar el proyecto
  2. mover el archivo de encabezado a la sección "privada" o "proyecto"
  3. mover el archivo de encabezado de nuevo a la sección "pública"
  4. 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!)