‘Nombre del proyecto’ se compiló con optimización; el avance puede tener un comportamiento extraño; las variables pueden no estar disponibles

Intentar entrar en el código AFNetworking genera la siguiente advertencia:

[Project Name] was compiled with optimization - stepping may behave oddly; variables may not be available. 

Y, por supuesto, no puedo depurar el código. Para ser específico, estoy intentando depurar la categoría UIImageView+AFNetworking que parece imposible. Cambiar el código no tiene ningún efecto (se intentó con NSLog , etc.) y cuando se trata de avanzar en los comstackdores va al código ensamblador y se muestra UIImageView+TVASTAFNetworking como nombre de categoría que no existe en ningún lugar en la base de código.

enter image description here

Usando Xcode 7. iOS 9 y 8. Cocoapods (sin Marco)

ACTUALIZACIÓN Olvidé mencionar que Optimizer está configurado en none para la configuración de depuración y depuración, y de hecho estoy usando la configuración de Debug .

enter image description here

ACTUALIZACIÓN 2

Strip Debug Symbols Is off también.

Si su proyecto está utilizando Swift, hay dos configuraciones separadas de “Nivel de optimización” en la configuración del proyecto / destino.

Asegúrate de configurar ambos de manera correcta:

  1. Seleccione su proyecto en el panel de Project Navigator
  2. Seleccione la configuración de su proyecto en el árbol “PROYECTO”
  3. Haz clic en la pestaña “Configuraciones de comstackción”
  4. Busque “Nivel de optimización” y verá dos configuraciones, una para LLVM y otra para swift.
  5. Establezca la configuración adecuada ( None [-O0] para LLVM y None [-0none] para Swift) para la configuración de comstackción en cuestión.

se compiló con pasos de optimización pueden comportarse de manera extraña. Puede que las variables no estén disponibles

Hacer esto resolvió esa advertencia para mí.

Parece que su proyecto está en modo de lanzamiento. El modo de lanzamiento comstack la aplicación con muchas optimizaciones, pero los depuradores odian las optimizaciones, por lo que para depurar la aplicación de forma confiable, debe cambiar al modo de depuración, lo que reduce la optimización y agrega un montón de información de depuración. Para cambiar al modo de depuración:

  • Haga clic en su esquema en la esquina superior izquierda de Xcode.

Haga clic en su esquema en la esquina superior izquierda de Xcode.

  • Seleccione “Editar esquema …”

Seleccione

  • Haga clic en el menú desplegable “Build Configuration”. y cambiarlo al modo de depuración.

Haga clic en el menú desplegable

Aceptar Encontró el problema, esta advertencia solo aparece cuando llega a un punto de interrupción y la fuente está en un proyecto donde la optimización está habilitada, lo que le impide ver valores de variables reales (cada objeto se muestra como nulo, incluso si no lo está)

En mi caso, solo sucedió al depurar paso a paso a través de una dependencia de cocoapod.

Por lo tanto, incluso si tiene configurados correctamente su objective principal y su proyecto (Strip Debug Symbol = OFF, y Optimization level None), debe asegurarse de que sea el mismo para el proyecto Pod que golpee el punto de corte.

enter image description here

Resulta que después de importar un proyecto antiguo (Xcode 7.x +) al nuevo Xcode 8.3 (8E162), probablemente debido a la optimización del comstackdor, Swift Compiler – Optimization Level se configuró de manera predeterminada en Fast, Single-File Optimization :

antes de

Cambiándolo a ninguno, resolvió el problema:

después

Editor -> Validate Settings luego confirmar todos los cambios. Entonces deberías obtener Nivel de optimización Swift Compiler en su lugar

Establezca Debug en None .

Esta fue la solución para mí …

En la línea de la respuesta de Gimino, si estás usando cocoapods, agrega una línea como esta al archivo Podfile:

 xcodeproj 'MyProject', 'Debug - local'=>:debug, 'Debug - staging'=>:debug, 'Debug - PRODUCTION'=>:debug 

o para versiones de cocoapods> = 1.0 (gracias a Diejmon)

 project 'MyProject', 'Debug - local'=>:debug, 'Debug - staging'=>:debug, 'Debug - PRODUCTION'=>:debug 

Donde MyProject tiene ‘Debug – local’, ‘Debug – staging’, ‘Debug – PRODUCTION’ como configuaciones de depuración además del estándar ‘Debug’

Por defecto, los cocoapods generalmente generarán configuraciones de pod como Release, esta línea Podfile le permite decir que están depurados.

Me encontré con el mismo problema hoy, y lo descubrí (al menos en mi caso). También estoy usando CocoaPods, y estaba teniendo este problema al ejecutar mi objective de prueba (Swift mezclado con ObjC).

Estoy usando Xcode 7.2, con iOS 9.2 SDK.

En la imagen a continuación, puede ver las optimizaciones para el objective y el proyecto antes de mi cambio:

nivel de optimización antes del cambio

Lo sorprendente es que, aunque la Optimización resuelta es Ninguna [-O0] , solo después de cambiar la configuración del proyecto de -Os a -O0 el comstackdor dejó de optimizar el objective.

A continuación puede ver mi configuración final:

nivel de optimización después del cambio

Ha pasado mucho tiempo pero finalmente resolví el problema. Hay un tercer indicador de optimización LTO o Link Time Optimization y sorprendentemente nadie lo ha mencionado aquí y por alguna razón tampoco le presté atención. Está justo encima de la configuración del Optimization Level , como puede ver en muchas capturas de pantalla publicadas aquí.

Para resumirlo, hay 3 indicadores de optimización diferentes que desea desactivar para la depuración:

  • LLVM Link Time Optimization ( -flto )
  • Nivel de optimización LLVM ( -O )
  • Nivel de optimización del comstackdor Swift

enter image description here

Más información sobre LTO: http://llvm.org/docs/LinkTimeOptimization.html

¿Estás seguro de que tu configuración de depuración no optimiza el código (no debería)? Parece que ha activado accidentalmente optimizaciones para la configuración de depuración y debe desactivarlo desde la configuración del objective.

Este error me pasó dos veces, y en todos los casos hubo un error en el parámetro de URL utilizado para solicitar un servicio. En un caso, la URL tenía algo de espacio en la sección del puerto; en el otro caso, no se estaba liberando algún valor opcional.

Entonces, la solución era asegurarse de que la URL de la solicitud esté bien formada. Más información sobre mi caso, e informes similares de la misma aquí .

Todo lo que hice fue limpiar ( Product > Clean ) mi proyecto y volver a ejecutarlo

Esto puede ser una simplificación excesiva, pero ¿está construyendo para Release o con optimización (que elimina símbolos de Swift o LLVM) demasiado alto? De ser así, edite su esquema y cambie a Depurar, o edite sus Configuraciones de comstackción para una optimización rápida o LLVM a Ninguna (0).