web-dev-qa-db-fra.com

Le module compilé avec Swift 4.1.2 ne peut pas être importé par le compilateur Swift 4.2

Histoire courte: Xcode 10 est défini sur Swift 4, mais il utilise Swift 4.2.

Longue histoire: notre projet n'est pas prêt pour Swift 4.2, car nos cadres dépendants ne sont pas encore Swift 4.2. Mais, j'aimerais au moins utiliser Xcode 10.

  • J'ai Xcode 9.4.1 et Xcode 10 installés.
  • Les outils de ligne de commande sont configurés pour utiliser Xcode 9.4.1:

 enter image description here

  • Dans Xcode 10, le paramètre de projet, Swift Language Version, est défini sur Swift 4.

 enter image description here

  • J'ai vérifié sur la ligne de commande la version de Swift que Shell utilise .__ est 4.1.2:

"Swift --version Apple Swift version 4.1.2 (swiftlang-902.0.54 clang-902.0.39.2)"

  • J'ai lancé carthage update. 
  • J'ai quitté Xcode 10 et relancé.
  • J'ai profondément nettoyé et supprimé les données dérivées.
  • Je construis et je reçois cette erreur:

"Le module compilé avec Swift 4.1.2 ne peut pas être importé par le compilateur Swift 4.2 : .../App/Carthage/Build/iOS/RealmSwift.framework/Modules/RealmSwift.swiftmodule/arm64.swiftmodule"

Pour moi, cela signifie que ma version de Swift (4.1.2) est correctement configurée et que Xcode tente toujours d'utiliser la mauvaise version de Swift (4.2).

Quelqu'un a-t-il des suggestions pour résoudre ce problème? Est-ce que je manque quelque chose? Bug Xcode?

8
Heliotropix

Je ne suis pas positif, mais je suppose que c'est la raison:

J'ai des outils de ligne de commande configurés pour utiliser Xcode 9.4.1

Vous devez recompiler vos dépendances Swift 4 en utilisant Xcode 10, car Swift n’est pas ABI-stable , c’est-à-dire que les fichiers binaires compilés avec différentes versions du compilateur ne sont pas compatibles. Et même les fichiers binaires de Swift 4.0 compilés avec différentes versions de Xcode peuvent ne pas être compatibles.

Je n’ai pas beaucoup d’expérience avec Carthage, mais j’imagine que vous devriez utiliser Xcode 10 comme outil de ligne de commande, mais vous devez définir une version linguistique différente de Swift qui sera utilisée par Xcode 10. Elle devrait probablement être spécifiée dans le projet (dans ce cas, RealmSwift), ou en utilisant des variables d'environnement, mais vous aurez besoin de quelqu'un d'autre pour répondre avec plus de détails, j'ai peur.

4
FreeNickname

Utiliser Realm avec Xcode 10 nécessite de le construire à partir des sources. Dans Terminal, écrivez:

git clone --recursive https://github.com/realm/realm-cocoa.git

cd realm-cocoa

sh build.sh ios-Swift
2

Si le module a été obtenu à l'aide de Cocoapods, vous pouvez accéder à votre répertoire podfile à partir du terminal et exécuter:

pod install

Cela devrait recompiler le module pour Swift 4.2. Cela a fonctionné pour moi, espérons que cela fonctionne pour vous.

0
Loup G

J'ai eu le même problème et ensuite j'ai réalisé que je n'avais pas sélectionné Xcode 10 en tant que Xcode. Essayer:

Sudo xcode-select -s /Applications/Xcode10.app

De même, si vous souhaitez basculer entre Xcode9 et 10, je vous recommande ce qui suit: Si vous passez de 9 à 10, exécutez mv Carthage Carthage9 puis reconstruisez Carthage. Chaque fois que vous souhaitez revenir en arrière, déplacez Carthage sur Carthage10 et faites mv Carthage9 Carthage. Cela vous fera gagner beaucoup de temps à construire.

0
regina_fallangi