93 votes

Un module compilé avec Swift 4.0 ne peut pas être importé dans Swift 4.0.1

Cependant, j'ai recompilé le framework en utilisant le même Xcode et il me donne toujours cette erreur.

  • SDK de base iOS 11.1 pour tous les deux
  • Version du langage Swift Swift 4.0 pour les deux
  • Ne pas utiliser les Pods/Carthage

J'espère que quelqu'un saura

0 votes

Il semble qu'Apple doive reconsidérer son avis de dépréciation de 10 ans pour Objective C :^) J'en ai fait les frais sur >1 projet maintenant et sur les deux, il s'agit de frameworks binaires tiers.

0 votes

142voto

Zig Points 1460

Mise à jour :

Pour les versions de Xcode :

Cette erreur (et des erreurs similaires impliquant Swift 4.1, 4.2, etc.) se produira lors de l'ouverture d'un projet avec Xcode 9.1, 9.2, 9.3, 9.4, 10, etc. qui utilise des frameworks construits avec des outils Xcode antérieurs.

Pour résoudre ce problème, mettez à jour et reconstruisez vos frameworks en utilisant Carthage ( carthage update --platform iOS ), les Cocoapodes ( pod update o pod install ), ou manuellement, avec les nouveaux outils Xcode mis à jour. Les outils devraient être mis à jour automatiquement lorsque vous mettez à jour Xcode, mais si ce n'est pas le cas, vous pouvez suivre les étapes décrites ci-dessous dans la réponse originale.

Vous pouvez également avoir besoin de nettoyer votre projet cmd + shift + k et éventuellement votre dossier de construction cmd + option + shift + k pour que Xcode n'utilise pas les constructions de frameworks en cache.

Dans certains cas, vous pouvez également avoir besoin de supprimer votre dossier de données dérivées (facilement trouvable en allant dans Xcode Preferences -> Locations -> Derived Data Folder ( Merci Stunner )

Pour les versions bêta de Xcode :

Voir la réponse originale ci-dessous, puis suivre les étapes ci-dessus.

Réponse originale :

Vous avez probablement encore vos outils xcodebuild réglés sur Xcode 9.0 qui construit avec Swift 4.0 et est incompatible avec Swift 4.0.1 de Xcode 9.1 beta.

Vérifiez dans le terminal en utilisant la commande :

xcodebuild -version

Ou bien, allez simplement dans les préférences de Xcode -> Locations et cochez/changez les outils de ligne de commande pour Xcode 9.1. Vous devriez alors être prêt.

1 votes

J'ai également effacé les données dérivées et nettoyé le projet. Je ne sais pas si cela est nécessaire pour tout le monde, mais ici, cela semble l'être. Merci

3 votes

Salut @Zig. Un repo que j'utilise sur github (mattdonnelly/swifter) est à Swift 4.0, mais a manifestement été compilé avec XCode 9.0, donc j'ai ce problème. Quelles sont les étapes nécessaires pour recompiler le cocoapod de quelqu'un d'autre sur Github pour XCode 9.1 et plus ?

1 votes

Existe-t-il un moyen d'ajouter un outil de ligne de commande ? Je n'ai que Xcode 9.3 dans mon menu déroulant de ligne de commande et j'ai aussi ce problème.

27voto

Stunner Points 3580

Mon problème était dû à un framework externe qui n'était pas compilé pour Swift 4.0.2. J'avais ajouté ce fichier via Carthage et donc de courir :

carthage update --platform iOS

Et ensuite le nettoyage du projet cmd + shift + k et le dossier de construction cmd + option + shift + k et la suppression du dossier de données dérivées (le déplacer simplement dans la corbeille fonctionne aussi) a fonctionné pour moi.

2 votes

En effet, c'est essentiellement la solution. La même chose vient de se produire aujourd'hui (18 avril), en raison de la dernière mise à jour rapide d'Apple ! :)

0 votes

Cmd + option + shift + k est ce qui a fait l'affaire après avoir mis à jour Carthage. Merci !

15voto

Emre Gürses Points 438

Dans mon cas, j'ai téléchargé xCode 11 Beta version pour tester SwiftUI. Lorsque je lance mon projet, j'obtiens "Le module compilé avec Swift 5.1 ne peut pas être importé par le compilateur Swift 5.0.1 :..." erreur.

Pour résoudre ce problème, j'ai changé l'outil de ligne de commande xCode pour le nouvel outil de ligne de commentaire xCode 11. Après cela, vous pouvez créer un nouveau projet xcode avec SwiftUI.

Xcode -> Préférences -> Emplacement -> Outil de ligne de commande XCode

Xcode Commend Line Tool

J'espère que cela aidera quelqu'un qui veut tester un nouveau logiciel libre :)

9voto

Tina Points 302

Installez le Xcode Toolchain de la version spécifique de Xcode qui fonctionnait pour vous à partir de aquí .

Une chaîne d'outils Xcode comprend une copie du compilateur, de lldb et d'autres outils connexes nécessaires pour offrir une expérience de développement cohérente pour travailler dans une version spécifique de Swift.

Ouvrez les préférences de Xcode, accédez à Composants > Chaînes d'outils, et sélectionnez la chaîne d'outils Swift installée.

Cela vous permettra de compiler et d'exécuter l'application pour le moment.

0 votes

Après 2 jours de recherche et d'essai de toutes les solutions possibles avec la mise à jour de Carthage, le bootstrap, les paramètres de langue de Swift, etc. J'ai trouvé la bonne réponse ici :)

7voto

pkamb Points 918

J'ai rencontré ce problème avec Xcode 10 beta, qui ajoute Swift 4.2. Mon problème n'était pas lié à Carthage ou à des dépendances externes.

Aller à YourTarget > Build Settings > Swift Language Version pour toutes vos cibles Xcode.

Les miens étaient tous réglés sur Swift 4 .

Après avoir ajouté une phase de construction de fichiers de copie, j'ai commencé à obtenir une erreur

:0 : erreur : le module compilé avec Swift 4.1.2 ne peut pas être importé par le compilateur Swift 4.2 : /Users/user/Library/Developer/Xcode/DerivedData/MyApp-faskfrihumfcdibjxisjvbfshppp/Build/Intermediates.noindex/MyApp.build/Debug/MyAppExtension.build/Objects-normal/x86_64/MyClass~partial.swiftmodule

La commande MergeSwiftModule a échoué avec un code de sortie non nul.

J'ai ensuite défini les paramètres de chaque cible Swift Language Version a Swift 4.2 ce qui a permis d'éliminer l'erreur.

Je ne suis pas sûr de la raison pour laquelle l'erreur s'est produite en premier lieu, car si toutes les cibles sont réglées sur Swift 4 devrait être tout aussi valable.

1 votes

J'ai du mal à trouver Build Settings

0 votes

@Chandrew cliquez sur votre cible d'abord. Réponse mise à jour.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X