alertas alerta xcode lldb swift3 xcode8 swift2.3

xcode - alerta - uialertcontroller swift 4



No se puede depurar el módulo/marco Swift integrado en la aplicación Objective-C (10)

Títulos alternativos (para ayudar a buscar)

  • No se puede depurar el marco Swift 2.3 vinculado a una aplicación Objective-C en Xcode 8
  • error in auto-import: failed to get module ''XYZ'' from AST context Xcode 8
  • Xcode 8 no puede depurar el marco Swift
  • warning: Swift error in module <XYZ>
  • Solución para; Xcode Debugger no puede depurar aplicaciones escritas en Objective-C solamente, pero ese enlace contra marcos escritos solo en Swift. (28312362)

Tengo una aplicación escrita en Objective-C que vincula algunos módulos (marcos) escritos en Swift 2.x.

Pregunta

Todo (depuración, etc.) funciona bien en xcode7 , sin embargo, al pasar a xcode8 y actualizar los módulos para usar swift2.3 no swift2.3 depurar los módulos.

LLDB informó estos errores:

warning: Swift error in module XYZ. Debug info from this module will be unavailable in the debugger. error: in auto-import: failed to get module ''ABC'' from AST context

Esto no ocurre si enlace los módulos a una aplicación creada en Swift 2.3.


tl: dr

Agregue una configuración definida por el usuario en "Configuración de compilación" para su objetivo de la aplicación.

SWIFT_VERSION = 2.3

Más información

No estoy seguro si esto es un error de Xcode 8 o si se trata de la política de Apple (para probar una fuerza de desarrolladores para Swift 3.0?). Pero ... de manera predeterminada, Xcode 8 instala las versiones de Swift 3.0 de las bibliotecas de tiempo de ejecución estándar Swift.

Cuando se trata de depurar con LLDM, los módulos de Swift 2.3 no se cargan (en el tiempo de ejecución de Swift 3.0).

Obligar a la aplicación a utilizar Swift 2.3 (o Swift heredado como lo llama Apple) soluciona el problema.

Las aplicaciones Swift tienen esta configuración expuesta por Xcode pero tienes que agregarla manualmente para una aplicación Objective-C.

Asesoramiento adicional

Porte su código de Swift 2.3 a Swift 3.0 lo antes posible, Apple no admitirá 2.x por mucho tiempo.


Como sugiere Tim https://.com/a/41876400/1840269 la causa de nuestro problema era una cuestión de duplicados.

Teníamos una categoría de obj-c wrapper para SDWebImage que se utilizó tanto de obj-c como de Swift. Al importar la categoría de Swift todo explotó debido a la redefinición / importación duplicada ya que el pod de SDWebImage ya se expuso como un módulo de Swift.

¿La solución? Reimplementamos la categoría obj-c como una extensión Swift, y la usamos tanto en Swift como en obj-c agregando @objc al frente de la extensión e importando el archivo #import "product-Swift.h" de obj- do.

Y tal vez comience con la comprobación: https://developer.apple.com/library/content/qa/qa1947/_index.html .


Discutí este problema con un ingeniero de Apple llamado Sean en la WWDC 2017.

Mi equipo pasó semanas tratando de resolver esto, y terminó siendo un error en el compilador de Apple, que nunca podríamos haber descubierto por nosotros mismos. Además, tiene una solución MUY fácil.

Resulta que hay un error con la forma en que los indicadores de compilación se agregan desde los marcos y el proyecto, y el proyecto "puro Objective-C" lo "activa".

Solución: agregue un único archivo Swift vacío ("Whatever.swift", o lo que sea) en su proyecto Objective-C, convirtiéndolo en not-pure-objective-c más (nuevo-> archivo-> Swift file, no cree el encabezado de puente. El archivo solo contendrá la importación de Foundation).

Y eso es. Problema resuelto.


En mi caso, hubo un error de compilación en el código "C" que se informó en LLDB, después de corregir el error, LLDB comenzó a funcionar nuevamente.


En mi caso, tuve que eliminar el Objective-C Bridging header del archivo de configuración de compilación. Mi archivo de encabezado Bridging no hizo nada ... así que estaba bien.


Intenta reiniciar Xcode. En mi caso, resolvió un problema.


Me encontré con el error in auto-import: failed to get module ''XYZ'' from AST context mensaje de error in auto-import: failed to get module ''XYZ'' from AST context al intentar depurar en un simulador 9.3. El cambio a un simulador 10.2 resolvió el problema.


Me encontré con esto cuando construí un marco con Carthage. Intentar depurar imprimiría el error, que hacía referencia a una dependencia de marco Obj-C.

Encontré esta publicación de blog que sugería agregar una de las siguientes configuraciones de construcción definidas por el usuario a mi proyecto:

Para la depuración: REMOVE_HEADERS_FROM_EMBEDDED_BUNDLES = NO

Para publicación: REMOVE_HEADERS_FROM_EMBEDDED_BUNDLES = YES

Esto solucionó el problema para mí.


Para mí fue tan simple como doloroso y llevó mucho tiempo:

import SDWebImage fue el PROBLEMA , porque uno de los marcos tenía SDWebImage ya empaquetado (y no pude verlo), y ese marco resultó ser Objective-C, y la aplicación era Swift. También agregué SDWebImage al proyecto, porque lo uso en las clases que escribo, y eso fue lo que creó el desastre que el depurador xCode no pudo manejar. Así que, básicamente, asegúrate de que no tienes NINGUNO DIVULGADO de CUALQUIER manera, yo verificaría cosas comunes como SDWebImage por ejemplo.