xcode - online - tipos de datos en swift
El depurador Swift no muestra valores variables al importar el marco ObjC (6)
- El nivel de optimización no está configurado en Ninguno para la configuración de depuración. Asegúrese de configurarlo en Ninguna para las aplicaciones Objective-C como se muestra en la Figura 1 y para las aplicaciones Swift como se muestra en la Figura 2.
- El menú emergente Crear configuración se establece en Liberar en el panel de configuración de la acción Ejecutar del editor de esquemas. En Xcode, abra el editor de esquemas seleccionando Producto> Esquema> Editar esquema ..., seleccione la acción Ejecutar para su aplicación en el panel de acciones del esquema, luego configure la Configuración de compilación en Depurar como se ve en la Figura 3.
Cuando creo un nuevo proyecto de OS X "Juego" con Sprite Kit, y establezco un punto de interrupción en cualquier lugar, puedo ver los valores de las variables muy bien:
Luego cambio el código para importar mi propio marco (TilemapKit) que es un marco puro de Objective-C:
import SpriteKit
import TilemapKit
class GameScene: SKScene {
override func didMoveToView(view: SKView) {
print("dang!")
}
}
No se hicieron otros cambios Ni siquiera estoy usando el código de TilemapKit (todavía). Cuando el punto de interrupción se dispara, veo esto:
Todo el proyecto deja de ser depurable en lo que se refiere a la observación de valores variables. Este comportamiento es perfectamente consistente. Sin la importación de framework, puedo depurar de nuevo.
Como tengo 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 comando están configurados para usar la versión Xcode 7.0 por cierto. Probé habilitando módulos en el objetivo del marco, me aseguré de que el objetivo de despliegue fuera el mismo (10.11), deshabilitaba la extracción de símbolos. Agregué un encabezado puente y #importé el marco TilemapKit en él (eliminar la importación Swift en ese caso aún me daría la aplicación no depurable, por lo que no parece importar cómo o dónde importar el marco).
¿Alguien tiene alguna sugerencia sobre qué podría causar este comportamiento y cómo podría solucionarlo, 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 construcción del proyecto frente al marco? ¿Debo habilitar algo en el proyecto de la aplicación para que sea compatible con los frameworks ObjC? (Ya obtuve -ObjC en las banderas de Otro Enlazador)
ACTUALIZAR:
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 es que el directorio de construcción del marco ha cambiado? ¿Y por qué importaría eso y cómo solucionarlo?
PD: el mismo marco en una nueva aplicación ObjC se puede depurar muy bien.
En mi caso esto estaba sucediendo debido a declaraciones de import
redundantes en mi proyecto.
Mi proyecto mezcla archivos rápidos y objc, así que tengo instrucciones de importación en el archivo bridging_header.h
.
En mi bridging_header.h
tuve #import blah.h
En uno de los archivos rápidos, estaba importando un encabezado redundante desde un marco @import blah // From blah.framework
Eliminé la importación redundante del archivo rápido, que parece haberlo solucionado.
Ir a Editar esquema en la esquina superior izquierda.
Y cambie las configuraciones a Debug, si es versión
Puedo confirmar que esto está sucediendo en Xcode Version 7.0 beta 4 (7A165t). Tuve que eliminar mi marco ObjC para que volvieran los valores de Debugging. Si eliminar su marco no es una opción, el método de impresión es la depuración de la vieja escuela, pero aún funciona.
Recibí un mensaje de un desarrollador de Apple que decía que habían observado este problema y que se podía arreglar moviendo el .framework a una subcarpeta del proyecto.
Aparentemente el module .. was built in directory
error de module .. was built in directory
aparece solo si el .framework está en la misma carpeta que .xcodeproj aka $(PROJECT_DIR)
.
Sin embargo, mover el marco de trabajo a una subcarpeta no solucionó el problema en mi caso, pero vale la pena intentarlo hasta que esto se solucione en una versión beta de Xcode 7 más nueva (todavía ocurre en la versión beta 3).
Tuve este problema hace un tiempo. En mi caso, Prefix.pch estaba siendo incluido dentro de Bridging-Header.h. Esto no es un problema por eso, pero dentro de mi Prefix.pch había muchos C que hacen que el lldb no pueda importar el Bridging-Header. Así que eliminé el "#import Prefix.pch" del Bridging-Header y copié solo el "#includes" a los archivos obj-c que necesito usar rápidamente.