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

90

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

  • SDK de base iOS 11.1 pour les deux
  • Swift Language Version Swift 4.0 pour les deux
  • Ne pas utiliser de pods / Carthage

J'espère que quelqu'un pourrait savoir

Simon
la source
Il semble qu'Apple ait besoin de reconsidérer cet avis de dépréciation de 10 ans pour l'Objectif C: ^) Cela m'a mordu sur> 1 projet maintenant et sur les deux ce sont des cadres binaires tiers.
Anton Tropashko

Réponses:

137

Mettre à jour:

Pour les versions de lancement 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 qui ont été construits avec des outils Xcode antérieurs.

Pour résoudre le problème, mettez à jour et reconstruisez vos frameworks en utilisant Carthage ( carthage update --platform iOS), Cocoapods ( pod updateou pod install), ou manuellement, avec les nouveaux outils Xcode mis à jour. Les outils doivent être mis à jour automatiquement lorsque vous mettez à jour Xcode, mais sinon, vous pouvez suivre les étapes décrites ci-dessous dans la réponse d'origine.

Vous devrez peut-être également nettoyer votre projet cmd + shift + ket éventuellement votre dossier de construction cmd + option + shift + kpour que Xcode n'utilise pas les versions de framework mises en cache.

Dans certains cas, vous devrez peut-être également supprimer votre dossier de données dérivées (facilement trouvé en allant dans Préférences Xcode -> Emplacements -> Dossier de données dérivées ( Merci Stunner )

Pour les versions bêta de Xcode:

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

Réponse originale:

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

Enregistrez-vous dans le terminal à l'aide de la commande:

xcodebuild -version

Ou allez simplement dans les préférences Xcode -> Emplacements et vérifiez / changez les outils de ligne de commande en Xcode 9.1. Vous devriez être prêt alors.

Zig
la source
1
J'ai également effacé les données dérivées et nettoyé le projet, je ne sais pas si nécessaire pour tout le monde, mais ici, cela semblait être. Merci
Simon
3
Salut @Zig. Un dépôt que j'utilise sur github (mattdonnelly / swifter) est à Swift 4.0, mais a évidemment été compilé en utilisant XCode 9.0, donc j'obtiens 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 supérieur?
Joseph Beuys 'Mum
1
existe-t-il un moyen d'ajouter un outil de ligne de commande? J'ai juste Xcode 9.3 dans ma liste déroulante de ligne de commande. et j'ai ce problème aussi
tara tandel
1
Certains de mes pods ne sont pas prêts pour Swift 4.2, j'ai donc dû épingler le Swift Language Versionà Swift 4pour ceux-ci. Ensuite, cela a fonctionné.
skofgar le
1
Plus 1 pour le raccourci pour nettoyer le dossier de construction - ce n'était pas quelque chose que je savais faire à la légère.
Matt
25

Mon problème était dû au fait qu'un cadre externe n'était pas compilé pour Swift 4.0.2. J'avais ajouté ce fichier via Carthage , donc en cours d'exécution:

carthage update --platform iOS

Ensuite, nettoyer le cmd + shift + kdossier de projet et de construction cmd + option + shift + ket supprimer le dossier de données dérivé (le simple fait de le déplacer vers la corbeille fonctionne également) a fonctionné pour moi.

Stunner
la source
2
en fait, c'est essentiellement la solution. La même chose vient de se passer aujourd'hui (18 avril), en raison de la dernière mise à jour rapide d'Apple! :)
Fattie
cmd + option + shift + k est ce qui a fait le tour après la mise à jour de Carthage. Merci!
Leonardo Leite
15

Dans mon cas, j'ai téléchargé la version bêta de xCode 11 pour tester SwiftUI. Lorsque j'exécute mon projet, j'ai eu l' erreur "Le module compilé avec Swift 5.1 ne peut pas être importé par le compilateur Swift 5.0.1: ..." .

Pour résoudre ce problème. J'ai changé l'outil de ligne de commande xCode en 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

Outil de ligne Xcode Commend

j'espère que cela aidera quelqu'un qui veut tester avec un nouveau travail :)

Emre Gürses
la source
9

Installez Xcode Toolchain de la version Xcode spécifique qui fonctionnait pour vous à partir d' ici .

Une chaîne d'outils Xcode comprend une copie du compilateur, de lldb et d'autres outils connexes nécessaires pour fournir 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.

Tina
la source
Après 2 jours de recherche et d'essais de toutes les solutions possibles avec la mise à jour de carthage, le bootstrap, les paramètres de langue rapides, etc. j'ai trouvé la bonne réponse ici :)
memresubasi
7

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.

Accédez à YourTarget > Build Settings > Swift Language Versiontoutes vos cibles Xcode.

Les miens étaient tous prêts Swift 4.

Après avoir ajouté une phase de construction de fichiers de copie, j'ai commencé à recevoir l'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 différent de zéro

J'ai ensuite défini chaque objectif Swift Language Versionsur Swift 4.2, ce qui a éliminé l'erreur.

Je ne sais pas pourquoi l'erreur s'est produite en premier lieu, car toutes les cibles Swift 4devraient être tout aussi valides.

pkamb
la source
1
J'ai du mal à trouverBuild Settings
Chandrew
@Chandrew cliquez d'abord sur votre cible. Réponse mise à jour.
pkamb
3

Dans mon cas (Xcode 9.2):

Je suis allé à Xcode Preferences > Locations > Derived Data

J'ai ensuite supprimé les données et fait une construction propre et tout allait bien.

user3288482
la source
1

Dans mon cas, j'ai utilisé CocoaPods avec plugin cocoapods-binarypour préconstruire les bibliothèques en binaires. Après avoir mis à niveau Xcode de 10 à 11, Xcode me donne cette erreur:

Module compiled with Swift 5.0.1 cannot be imported by the Swift 5.1 compiler

Je le répare en supprimant le /Podsrépertoire et en courant pod install.

Benjamin Wen
la source
0

Dans mon cas, j'ai recompilé le framework avec la version dont il se plaignait.

Pour recompiler, exécuter pod updateou mettre à jour le carthage (celui que vous utilisez) et construire le projet.

Recherchez ensuite le cadre dans le Finder. Copiez-collez le theFramework.frameworkdans votre projet et assurez-vous de "Copier les éléments si nécessaire". Générez à nouveau le projet et cela devrait fonctionner.

Joseph François
la source