Essayer d'entrer dans le code AFNetworking génère l'avertissement suivant:
[Project Name] was compiled with optimization - stepping may behave oddly; variables may not be available.
Et bien sûr, je ne suis pas capable de déboguer le code. Pour être précis, j'essaie de déboguer la catégorie UIImageView+AFNetworking
qui semble impossible. Changer le code n'a pas d'effet (NSLog
essayé, etc.) et lors de la tentative de compilation dans les compilateurs, allez dans Code d'assemblage et affiche UIImageView+TVASTAFNetworking
comme nom de catégorie qui n'existe nulle part dans la base de code.
Utilisation de Xcode 7. iOS 9 et 8. Cocoapods (no Framework)
UPDATE J'ai oublié de mentionner que l'Optimizer est défini sur none
pour la configuration de publication et de débogage et j'utilise en fait Debug
config.
UPDATE 2
Strip Debug Symbols
est également désactivé.
Cela fait longtemps mais j'ai finalement résolu le problème. Il existe un troisième indicateur d'optimisation LTO
ou Link Time Optimization
et, chose surprenante, personne ne l'a mentionné ici et pour une raison quelconque, je n'y ai pas prêté attention. C'est juste au-dessus du réglage Optimization Level
comme vous pouvez le voir dans de nombreuses captures d'écran publiées ici.
Donc, pour résumer, il y a 3 différents indicateurs d'optimisation que vous souhaitez désactiver pour le débogage:
-flto
) -O
)Plus d'informations sur LTO: http://llvm.org/docs/LinkTimeOptimization.html
Si votre projet utilise Swift, la configuration projet/cible comporte deux paramètres distincts "Niveau d'optimisation".
Assurez-vous de les définir correctement:
None [-O0]
pour LLVM et None [-0none]
pour Swift) pour la configuration de construction en question.Faire cela a résolu cet avertissement pour moi.
Il semble que votre projet soit en mode Release. Le mode Release compile l'application avec beaucoup d'optimisations, mais les débogueurs détestent les optimisations. Par conséquent, pour déboguer l'application de manière fiable, vous devez passer en mode Debug, ce qui réduit l'optimisation et ajoute de nombreuses informations de débogage. Pour passer en mode débogage:
Cet avertissement n'apparaît que lorsque vous atteignez un point d'arrêt et que la source est dans un projet où l'optimisation est activée, ce qui vous empêche de voir les valeurs de variables réelles (chaque objet est affiché comme nul, même s'il ne l'est pas)
Dans mon cas, cela ne s'est produit que lors du débogage pas à pas via une dépendance au cocoapod.
Ainsi, même si les paramètres de votre cible principale et de votre projet sont correctement définis (symbole de débogage à bande = OFF et niveau d'optimisation Aucun), vous devez vous assurer qu'il en est de même pour le projet Pod de votre point de rupture.
Il s’est avéré qu’après l’importation d’un ancien projet (Xcode 7.x +) dans le nouveau Xcode 8.3 (8E162), probablement à cause de l’optimisation du compilateur, le Compilateur Swift - Niveau d’optimisation était défini par défaut sur Fast, Single -Optimisation de fichier:
Le remplacer par aucun, résolut le problème:
C'était la solution pour moi ...
Dans le sens de la réponse de gimino, si vous utilisez des cocoapodes, ajoutez une ligne comme celle-ci au fichier podfile:
xcodeproj 'MyProject', 'Debug - local'=>:debug, 'Debug - staging'=>:debug, 'Debug - PRODUCTION'=>:debug
ou pour les versions de cocoapods> = 1.0 (merci Diejmon)
project 'MyProject', 'Debug - local'=>:debug, 'Debug - staging'=>:debug, 'Debug - PRODUCTION'=>:debug
Où MyProject a 'Debug - local', 'Debug - staging', 'Debug - PRODUCTION' comme configuration de débogage en plus du 'Debug' standard
Par défaut, les cocoapods génèrent généralement des configurations de pods comme Release, cette ligne Podfile vous permet de lui dire qu’il s’agit d’un débogage.
J'ai rencontré le même problème aujourd'hui et je l'ai compris (du moins dans mon cas)… .. J'utilise aussi CocoaPods, et j'avais ce problème lorsque j'utilise ma cible de test (Swift mélangé avec ObjC).
J'utilise Xcode 7.2, avec iOS 9.2 SDK.
Dans l'image ci-dessous, vous pouvez voir les optimisations pour la cible et le projet avant mon changement:
La chose surprenante est que, même si l'optimisation résolue est None [-O0], ce n'est qu'après que le paramètre du projet est passé de -Os à -O0 que le compilateur a arrêté d'optimiser la cible.
Ci-dessous, vous pouvez voir mes réglages finaux:
Êtes-vous sûr que votre configuration de débogage n'optimise pas le code (cela ne devrait pas)? Il semble que vous ayez activé accidentellement les optimisations pour la configuration de débogage et vous devriez le désactiver à partir des paramètres de la cible.
Juste au cas où quelqu'un serait confronté à ce problème lors du débogage d'un pod qui utilise une bibliothèque C en interne, vous devez également modifier les paramètres du projet pour le faire fonctionner en plus de tout ce qui est répertorié dans le fil.
Sélectionnez Paramètres du projet Pods -> Votre cible C-using -> Paramètres de construction -> Apple Clang - Indicateurs de compilation personnalisés -> Autres indicateurs C et supprimez l’indicateur -O3
qui y est parvenu.
C'est peut-être une simplification excessive, mais construisez-vous pour la version ou avec l'optimisation (qui supprime les symboles de Swift ou de LLVM) trop élevée? Si tel est le cas, modifiez votre schéma et passez à Debug ou modifiez vos paramètres de construction pour l'optimisation Swift ou LLVM sur Aucun (0).
Cette erreur m'est arrivée deux fois et, dans tous les cas, il s'agissait d'une erreur dans le paramètre d'URL utilisé pour demander un service. Dans un cas, l'URL disposait d'un espace dans la section du port, dans l'autre cas, une valeur facultative n'était pas décompressée.
La solution était donc de s’assurer que l’URL de la demande est bien formé. Plus d'informations sur mon cas, et des informations similaires rapportant les mêmes ici .
Tout ce que j'ai fait est de nettoyer (Product > Clean
) mon projet et de l'exécuter à nouveau