web-dev-qa-db-fra.com

Le débogueur Swift n'affiche pas les valeurs des variables lors de l'importation de la structure ObjC

Lorsque je crée un nouveau projet "Jeu" OS X avec Sprite Kit et que je définis un point d'arrêt n'importe où, je peux voir les valeurs de variable parfaitement:

enter image description here

Ensuite, je modifie le code pour importer mon propre framework (TilemapKit), qui est un framework pur Objective-C:

import SpriteKit
import TilemapKit

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

Aucun autre changement fait. Je n'utilise même pas le code TilemapKit (pour le moment). Lorsque le point d'arrêt se déclenche, je vois ceci:

enter image description here

L'ensemble du projet cesse d'être débogué dans la mesure où l'observation des valeurs de variables disparaît. Ce comportement est parfaitement cohérent. Sans l'importation du framework, je peux à nouveau déboguer.

Depuis que je suis sur Xcode 7 beta (7A121l) et sur la prévisualisation pour développeur OS X 10.11, je sais que cela pourrait tout simplement être un bogue (temporaire). 

Les mosaïques de ligne de commande sont configurées pour utiliser la version Xcode 7.0 btw. J'ai essayé d'activer des modules dans la cible de l'infrastructure, en m'assurant que la cible de déploiement était identique (10.11), désactivation du masquage de symboles. J'ai ajouté un en-tête de pontage et importé le framework TilemapKit dans celui-ci (la suppression de l'importation Swift dans ce cas me donnerait quand même l'application non déboguable, de sorte que le import ne semble avoir aucune importance.

Quelqu'un a-t-il une suggestion sur ce qui pourrait provoquer ce comportement et sur la manière dont je pourrais remédier à ce problème - ou du moins, sur la manière dont je pourrais essayer de réduire le problème? 

Le coupable est-il plus susceptible d'être connecté aux paramètres de construction du projet par rapport aux paramètres de construction? Dois-je activer quelque chose dans le projet d'application pour le rendre compatible avec les frameworks ObjC? (J'ai déjà obtenu -ObjC dans les drapeaux Other Linker)


METTRE À JOUR:

J'ai exécuté po self dans la console de débogage et trouvé cette notification:

<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.

Comment se fait-il que le répertoire de construction du framework ait changé? Et pourquoi est-ce important et comment résoudre ce problème?

PS: le même framework dans une nouvelle application ObjC peut être très bien mis au point.

39
LearnCocos2D

J'ai reçu un message d'un développeur Apple indiquant qu'il avait observé ce problème et qu'il pourrait être corrigé en déplaçant le fichier .framework dans un sous-dossier du projet. 

Apparemment, l'erreur module .. was built in directory n'apparaît que si .framework se trouve dans le même dossier que .xcodeproj, également appelé $(PROJECT_DIR).

Toutefois, le déplacement de la structure dans un sous-dossier n'a pas résolu le problème dans mon cas, mais cela vaut la peine d'essayer jusqu'à ce que cela soit corrigé dans une version bêta plus récente de Xcode 7 (toujours dans la version 3).

22
LearnCocos2D

Dans mon cas, cela se produisait à cause des déclarations redondantes import dans mon projet.

Mon projet mélange les fichiers Swift et objc. J'ai donc des instructions d'importation dans le fichier bridging_header.h.

Dans mon bridging_header.h j'avais #import blah.h 

Dans l'un des fichiers Swift, j'importais un en-tête redondant à partir d'un framework @import blah // From blah.framework

J'ai supprimé l'importation redondante du fichier Swift, qui semble l'avoir corrigé.

16
Hugo

J'ai eu ce problème il y a un moment. Dans mon cas, Prefix.pch était inclus dans Bridging-Header.h. Ce n'est pas un problème, mais dans mon Prefix.pch, il y avait beaucoup d'inclusions C qui empêchaient le lldb d'importer l'en-tête Bridging. J'ai donc supprimé le "#import Prefix.pch" de Bridging-Header et copié uniquement le "#includes" dans les fichiers obj-c que je dois utiliser dans Swift.

0
Charles Barros
  1. Le niveau d'optimisation n'est pas défini sur Aucun pour la configuration de débogage . Assurez-vous de le définir sur Aucun pour les applications Objective-C (voir la figure 1) et pour les applications Swift (voir la figure 2).

 Figure 1 & Figure 2

  1. Le menu local Configuration de la construction est défini sur Publier dans le volet Paramètres de l'action Exécuter de l'éditeur de schéma . Dans Xcode, ouvrez l'éditeur de schéma en choisissant Produit> Schéma> Modifier le schéma…, sélectionnez l'action Exécuter pour votre application dans le schéma dans le volet Actions, puis définissez Build Configuration sur Debug, comme illustré à la figure 3.

 Figure 3

0
Ar No

Je peux confirmer que cela se produit dans Xcode Version 7.0 beta 4 (7A165t). Je devais supprimer mon framework ObjC pour que les valeurs de débogage soient renvoyées. Si la suppression de votre infrastructure n'est pas une option, la méthode d'impression est le débogage à l'ancienne, mais fonctionne toujours.

0
Justin Domnitz