web-dev-qa-db-fra.com

Le module compilé avec Swift 5.1 ne peut pas être importé par le compilateur Swift 5.1.2

J'ai un framework (dans ce cas, c'est RxSwift) que j'ai compilé en utilisant Xcode 11.0 dans le traditionnel RxSwift.framework package de style

Cela a bien été importé dans Xcode 11.0 et 11.1 n'a jamais eu de problème avec

Aujourd'hui, lors de la sortie d'Apple de Xcode 11.2, j'ai mis à niveau et je reçois l'erreur:

Le module compilé avec Swift 5.1 ne peut pas être importé par le compilateur Swift 5.1.2

Je suis habitué à Swift incompatibilités du compilateur, et je suis conscient que je peux simplement recompiler RxSwift à l'aide de Xcode 11.2 et continuer, mais la fonctionnalité de titre de Swift 5.1 était stabilité du module.

J'avais l'impression que maintenant que nous avons la stabilité des modules, les frameworks n'auront plus besoin d'être recompilés avec chaque nouvelle version de Xcode, mais ce n'est clairement pas le cas.

Si quelqu'un peut expliquer ce qui se passe ici, je l'apprécierais beaucoup. Xcode 11.2 présente-t-il un bogue? ou avais-je en quelque sorte besoin de lui dire que je voulais la stabilité du module lorsque j'ai initialement compilé avec Xcode 11.0?

87
Orion Edwards

OK, il s'avère que si vous regardez la vidéo de la WWDC, ils l'expliquent: https://developer.Apple.com/videos/play/wwdc2019/416/

Vous devez définir l'option Créer des bibliothèques pour la distribution sur Oui dans votre les paramètres de construction du framework, sinon le compilateur Swift ne génère pas le nécessaire .swiftinterface fichiers qui sont la clé pour que les futurs compilateurs puissent charger votre ancienne bibliothèque.

Cela se termine dans votre fichier project.pbxproj en tant que:

BUILD_LIBRARY_FOR_DISTRIBUTION = YES;

Après avoir défini cet indicateur, un framework que j'ai compilé à l'aide de Xcode 11.0 (Swift 5.1) a pu être utilisé par Xcode 11.2 (Swift 5.1.2) et tout semble fonctionner correctement.

J'espère que cette question/réponse servira de référence utile pour tous ceux qui n'ont pas regardé toutes les vidéos de la WWDC

Si l'erreur persiste, allez à Produit > Nettoyer le dossier de construction et Construisez à nouveau.

87
Orion Edwards

J'ai commencé à voir le même problème et j'ai découvert que j'utilisais les outils de ligne de commande xcode incorrects. Je suis allé à Préférences> Emplacements et j'ai changé les outils de ligne de commande de Xcode 11.1 à 11.2.1. Par mesure de sécurité, j'ai également effacé le répertoire des données dérivées et exécuté carthage build.

2
CocoaNuts

J'ai eu la même erreur lors de l'importation de bibliothèques tierces. Je l'ai corrigé en utilisant des chaînes d'outils dans Xcode et en prenant la version du 19 septembre 2019 d'ici https://Swift.org/download/#releases . Après cela, j'ai dû réimporter mes bibliothèques et cela a fonctionné.

1
Sergio

Vous pouvez utiliser Carthage pour ajouter le framework RxSwift.

Fondamentalement, Carthage vous offre un package de style RxSwift.framework similaire traditionnel .

Puis essayez carthage update --no-use-binaries.

0
iMoeNya

Cela a fait disparaître mon erreur de compilation.

  1. carthage bootstrap --platform ios
  2. brew bundle
  3. pod repo update
0
Rinni