Titres alternatifs (pour faciliter la recherche)
- Impossible de déboguer le framework Swift 2.3 lié à une application Objective-C dans Xcode 8
error in auto-import: failed to get module 'XYZ' from AST context
Xcode 8- Xcode 8 ne peut pas déboguer le framework Swift
warning: Swift error in module <XYZ>
- Solution de contournement pour; Xcode Debugger ne peut pas déboguer des applications écrites en Objective-C uniquement, mais ce lien avec des frameworks écrits en Swift uniquement. (28312362)
J'ai une application écrite en Objective-C qui relie certains modules (frameworks) écrits en Swift 2.x.
Tout (débogage, etc.) fonctionne bien dans xcode7 , cependant lors du passage à xcode8 et de la mise à jour des modules pour utiliser Swift2.3 je ne pouvais pas déboguer les modules.
LLDB a signalé ces erreurs:
warning: Swift error in module XYZ.
Debug info from this module will be unavailable in the debugger.
error: in auto-import:
failed to get module 'ABC' from AST context
Cela ne se produit pas si je lie les modules à une application intégrée à Swift 2.3.
Ajoutez un paramètre défini par l'utilisateur sous "Paramètres de construction" pour la cible de votre application.
Swift_VERSION = 2.3
Je ne sais pas s'il s'agit d'un bogue Xcode 8 ou s'il s'agit d'une politique Apple (pour forcer les développeurs à forcer Swift 3.0?). Mais ... par défaut, Xcode 8 installe les versions Swift 3.0 des bibliothèques d’exécution standard de Swift.
En ce qui concerne le débogage avec LLDM, les modules de Swift 2.3 ne se chargent pas (dans le runtime de Swift 3.0).
Forcer l'application à utiliser Swift 2.3 (ou Swift hérité comme Apple l'appelle) résout le problème.
Les applications Swift ont ce paramètre exposé par Xcode mais vous devez l'ajouter manuellement pour une application Objective-C.
Portez votre code Swift 2.3 vers Swift 3.0 dès que possible, Apple ne supportera pas la version 2.x très longtemps.
Pour moi, c'était aussi simple que douloureux et fastidieux:
import SDWebImage
était le problème , .__, car l'un des cadres contenait déjà SDWebImage (et je ne pouvais pas le voir), et ce cadre se trouvait être Objective-C et l'application Swift. J'ai aussi ajouté SDWebImage au projet, parce que je l'utilise dans les classes que j'écris, et que ce qui a créé le désordre que le débogueur xCode n'a pas pu traiter. Donc, en gros, assurez-vous de ne rien dupliquer de quelque manière que ce soit, je vérifie les éléments courants tels que SDWebImage, par exemple.
utilisez fr v à la place de po pour le débogage
Pour plus de débogage https://www.codeproject.com/Articles/1181358/Debugging-with-Xcode
J'ai discuté de cette question avec un ingénieur Apple, Sean, au WWDC 2017.
Mon équipe a passé des semaines à essayer de résoudre ce problème, et il s’est avéré qu’il s’agissait d’un bogue sur le compilateur d’Apple, ce que nous n’aurions jamais pu résoudre nous-mêmes. En outre, il existe une solution de contournement TRÈS facile.
Il se peut qu'il y ait un problème avec la façon dont les indicateurs de compilation sont agrégés à partir des frameworks et du projet, et que le projet "pur Objective-C" le "active".
Solution: ajoutez un seul fichier Swift vide ("Whatever.Swift" ou autre) dans votre projet Objective-C, en le rendant non-pur-objectif-c (nouveau-> fichier-> fichier Swift, ne créez pas l'en-tête de pontage. Le fichier ne contiendra que l'importation de Foundation).
Et c'est tout. Problème résolu.
J'ai rencontré le message error in auto-import: failed to get module 'XYZ' from AST context
lors d'une tentative de débogage dans un simulateur 9.3. Le passage à un simulateur 10.2 a résolu le problème.
Je me suis heurté à cela lors de la construction d'un cadre avec Carthage. Essayer de déboguer imprimera l'erreur, qui faisait référence à une dépendance du framework Obj-C.
J'ai trouvé ce blog post qui proposait d'ajouter à mon projet le paramètre de construction défini par l'utilisateur suivant:
Pour le débogage: REMOVE_HEADERS_FROM_EMBEDDED_BUNDLES = NO
Pour la version: REMOVE_HEADERS_FROM_EMBEDDED_BUNDLES = YES
Cela a résolu le problème pour moi.
Dans mon cas, j'ai dû supprimer Objective-C Bridging header
du fichier de paramètres de construction. Mon fichier d'en-tête Bridging n'a rien fait .. alors tout s'est bien passé.
Essayez de redémarrer Xcode. Dans mon cas, cela a résolu un problème.
Comme suggéré par Tim https://stackoverflow.com/a/41876400/1840269 la cause première de notre problème était une question de doublons.
Nous avions une catégorie wrapper obj-c pour SDWebImage qui était utilisée à la fois par obj-c et Swift . Lorsque vous importez la catégorie depuis Swift, tout a été détruit à cause de l'importation de redéfinition/duplication, car le pod SDWebImage l'exposait déjà sous forme de Swift module.
La solution? Nous avons réimplémenté la catégorie obj-c en tant qu'extension Swift - et avons continué à l'utiliser depuis Swift et obj-c en ajoutant @objc
devant l'extension et en important le fichier #import "product-Swift.h"
depuis obj-c.
Et peut-être commencer par vérifier: https://developer.Apple.com/library/content/qa/qa1947/_index.html .
Je viens de prendre 2 jours pour résoudre et déboguer par l’intermédiaire de la commande print tout le temps. Maintenant, j'ai le problème:
Mon projet est dans Swift et j'utilisais la bibliothèque objective-C identique à celle importée dans les pods pour Swift (l'ancien projet Objective-C fusionné dans celui-ci) et utilisais l'importation IQKeyboardManager ainsi que l'importation de l'en-tête "IQKeyboardManager.h". Cela est en conflit et en supprimant l’en-tête, on a finalement résolu mon problème .. Vous pouvez vérifier avec ce type de duplicité dans les bibliothèques.
Dans mon cas, il y avait une erreur de compilation dans le code "C" qui a été rapportée dans LLDB, après avoir corrigé l'erreur, LLDB a recommencé à fonctionner.