web-dev-qa-db-fra.com

Convertir en courant Swift Syntax Failed - "No such module" (Swift 4, Xcode 9)

Dans Xcode 9, j'essaie de faire la conversion automatique en Swift 4. Il échoue avec le message suivant:

enter image description here

Conversion en courant Swift Échec de la syntaxe
Veuillez vous assurer que toutes les cibles sélectionnées se sont correctement construites avec la version Swift Swift $ avant de tenter une migration.

Il se plaint d'un module manquant. Mais quand je fais une construction régulière, il n'y a aucun problème. Je ne sais pas si cela est pertinent, mais le module (dont Xcode se plaint est manquant) a déjà été converti en Swift 4 plus tôt (dans son propre projet).

Remarque: Aucun Cocoapods/Carthage utilisé ici.

Remarque: Deux solutions ont essayé (et ont fonctionné) mais ne résolvent pas le problème sous-jacent.

  • Une solution consiste à effectuer la conversion manuellement (changer Swift version à 4 dans le paramètre de construction et appliquer Fix-Its un par un jusqu'à ce qu'il n'y ait plus d'erreurs de construction).
  • Une autre solution consiste à désactiver le framework tiers (commentez tout le code où il est utilisé), effectuez la migration automatique, puis réactivez le framework. Cela pourrait devenir assez difficile avec des projets plus importants.
14
Nikolay Suvandzhiev

Je ne trouve pas encore de solution.

Pour l'instant, je corrige le réglage manuel Swift Language Version

enter image description here

Après avoir changé de 3.2 à 4.0, je compile et corrige manuellement les erreurs et les avertissements.
J'attends une meilleure solution!

8
Luca Davanzo

J'ai également eu ce problème lors de la conversion de mon projet en Swift 4.0. On dirait que le problème apparaît lorsque vous essayez de convertir la cible qui importe un framework qui est déjà dans Swift 4.0. Sur votre capture d'écran, vous essayez de convertir " RecipeTextParser " qui importe " SovaTools 'qui est déjà Swift 4.0.

J'ai trouvé une solution sale, mais qui fonctionnait. Vous pouvez utiliser une ancienne version (Swift 3.2) de ' SovaTools ' lors de la conversion. Vous devez PAS vérifier sa marque dans la fenêtre de sélection de cible de l'outil de conversion. Ensuite, lorsque ' RecipeTextParser ' sera correctement converti, vous pouvez utiliser Swift 4.0 ' SovaTools 'version à nouveau.

6
Padavan

J'ai eu cette erreur et dans mon cas, l'un de mes pods (celui dont se plaignait Xcode) était une cible Swift 4 et les autres étaient Swift 3.2. En regardant les journaux de construction, il semble que Xcode ait construit ce cadre dans un endroit et le cherchait dans un autre. Lorsque j'ai rétabli ce Pod vers une version plus ancienne (qui utilisait Swift3.2), le problème a disparu. Évidemment, un bogue Xcode. HTH

5
niladri

Mettez à jour votre pod et cela résoudra le problème.

Pour mettre à jour le pod:

  • ouvrez le terminal et allez dans le répertoire de votre projet
  • mise à jour du pod de type

Cela a résolu mon problème.

1
Arqam Butt

La fonctionnalité de migration de langage Xcode (Xcode 9) n'est pas aussi précise qu'elle peut migrer votre code/projet complet d'une version Swift à une autre avec une tolérance zéro. Elle ignore peu de migration de code pour nous (développeurs Il peut s'agir d'un bug ou d'une inexactitude de l'outil. Mais vous devez également faire un effort manuel pour migrer complètement Swift version linguistique de votre projet/code.

Maintenant, selon votre instantané, Xcode affiche et une erreur pour le framework 'RecipeTextParser'. Je pense que c'est un cadre externe/tiers. Autre point à noter, vous avez intégré ce framework à l'aide de CocoaPods:

L'un des éléments suivants peut être à l'origine de l'échec de la migration de code:

  1. CocoaPods verrouille le framework (fichiers) pour l'édition. Ainsi, le processus de migration linguistique peut ne pas être en mesure de migrer (ou d'identifier) ​​du code pour un framework externe/tiers.
  2. En termes généraux, Framework est un package de fichiers de code, donc le framework lui-même peut ne pas autoriser la modification de fichier/code source.

Suggestion comme solution:

  1. Mettez à jour vos cabosses de cacao ainsi que tous les frameworks intégrés à l'aide de cabosses de cacao compatibles avec la dernière version de la langue Swift.
  2. Si vous avez intégré/ajouté manuellement des cadres externes/tiers, vous devez également les mettre à jour/remplacer.

Un effort manuel est nécessaire pour migrer complètement le code entre Swift langues. J'ai essayé Swift migration avec les options ci-dessus et tous mes projets sont maintenant compatibles avec Swift 4.

1
Krunal