Swift debugger no muestra valores de variables al importar marco ObjC


Cuando creo un nuevo proyecto de "Juego" de OS X con Sprite Kit, y establezco un punto de interrupción en cualquier lugar que pueda ver los valores de las variables muy bien:

introduzca la descripción de la imagen aquí

Luego cambio el código para importar mi propio framework (TilemapKit) que es un framework Objective-C puro:

import SpriteKit
import TilemapKit

class GameScene: SKScene {
    override func didMoveToView(view: SKView) {
        print("dang!")
    }
}

No se han realizado otros cambios. Ni siquiera estoy usando ninguno de los códigos de TilemapKit (todavía). Cuando se activa el punto de interrupción, veo esto:

introduzca la descripción de la imagen aquí

Todo el proyecto deja de ser depurable en cuanto a la observación valores de la variable va. Este comportamiento es perfectamente consistente. Sin la importación de framework puedo depurar de nuevo.

Ya que estoy en Xcode 7 beta (7A121l) y OS X 10.11 developer preview Sé que esto podría ser simplemente un error (temporal).

Los mosaicos de línea de comandos están configurados para usar la versión Xcode 7.0, por cierto. Intenté habilitar módulos en el objetivo del framework, me aseguré de que el objetivo de implementación fuera el mismo (10.11), deshabilité el desforrado de símbolos. Agregué un encabezado de Puente y # importé el TilemapKit marco en él (eliminar la importación de Swift en ese caso todavía me daría la aplicación no depurable, por lo que no parece importar cómo o dónde importe el marco).

¿Alguien tiene alguna sugerencia sobre qué podría causar este comportamiento y cómo podría arreglarlo, o al menos cómo podría tratar de reducir el problema?

¿Es más probable que el culpable esté conectado a la configuración de compilación del proyecto frente a la del marco? ¿Necesito habilitar algo en el proyecto de la aplicación para hacer es compatible con marcos ObjC? (Ya tengo-ObjC en las Otras banderas de enlace)


ACTUALIZACIÓN:

Corrí po self en la consola de depuración y encontré este aviso:

<built-in>:3:6: error: module 'TilemapKit' was built in directory '/TilemapKit.framework' but now resides in directory './TilemapKit.framework'
#define __clang_major__ 7
     ^
missing required module 'TilemapKit'
Debug info from this module will be unavailable in the debugger.

¿Cómo ha cambiado el directorio de compilación del framework? ¿Y por qué importaría eso y cómo arreglarlo?

PD: el mismo marco en una nueva aplicación ObjC se puede depurar perfectamente.

Author: LearnCocos2D, 2015-07-04

6 answers

Recibí un mensaje de un desarrollador de Apple indicando que han observado este problema, y que podría ser solucionado moviendo el .marco a una subcarpeta del proyecto.

Aparentemente el error module .. was built in directory aparece solo si el .framework está en la misma carpeta que el .xcodeproj aka $(PROJECT_DIR).

Sin embargo, mover el marco a una subcarpeta no solucionó el problema en mi caso, pero todavía vale la pena intentarlo hasta que esto se arregle en una versión beta de Xcode 7 más reciente (todavía ocurre en beta 3).

 21
Author: LearnCocos2D,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-08-19 14:21:12

En mi caso, esto estaba sucediendo debido a las sentencias redundantes import en mi proyecto.

Mi proyecto mezcla archivos swift y objc, por lo que tengo instrucciones de importación en el archivo bridging_header.h.

En mi bridging_header.h tenía #import blah.h

En uno de los archivos swift, estaba importando una cabecera redundante desde un framework @import blah // From blah.framework

Eliminé la importación redundante del archivo swift, que parece haberlo arreglado.

 14
Author: Hugo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-04-18 23:45:57

Puedo confirmar que esto está sucediendo en Xcode Versión 7.0 beta 4 (7A165t). Tuve que eliminar mi marco ObjC para obtener valores de depuración para devolver. Si eliminar el framework no es una opción, el método de impresión es una depuración de la vieja escuela, pero aún funciona.

 0
Author: Justin Domnitz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-08-18 12:25:45

Tuve este problema hace un tiempo. En mi caso el Prefijo.pch estaba siendo incluido dentro de la cabecera del puente.h. Esto no es un problema por lo, pero dentro de mi Prefijo.pch hubo muchos C includes que hacen que el lldb falle al importar el Bridging-Header. Así que eliminé el prefijo " # import.pch "del Bridging-Header y copiado solo el "# includes " a los archivos obj-c que necesito usar en swift.

 0
Author: Charles Barros,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-04 18:49:12
  1. El nivel de optimización no se establece en Ninguno para la configuración de depuración. Asegúrese de configurarlo en Ninguno para las aplicaciones Objective-C como se muestra en la Figura 1 y para las aplicaciones Swift como se muestra en la Figura 2.

Figura 1 y Figura 2

  1. El menú emergente Configuración de compilación está configurado para Liberar en el panel Configuración de ejecutar acción del editor de scheme. En Xcode, abra el editor de esquemas seleccionando Producto > Esquema > Editar esquema select, seleccione la acción Ejecutar para su aplicación en el panel acciones de esquema y, a continuación, configure Cree la configuración para Depurar como se ve en la Figura 3.

Gráfico 3

 0
Author: Ar No,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-19 03:38:03

Vaya a Editar Esquema en la esquina superior izquierda.

Y cambie las configuraciones para Depurar, si es release aqui

 -4
Author: Meet,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-07-10 06:23:11