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

91

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

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é à accélérer les décalages du compilateur, et je suis conscient que je peux simplement recompiler RxSwift à l'aide de Xcode 11.2 et continuer, mais la fonctionnalité principale de Swift 5.1 était la 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?

Orion Edwards
la source
Pour moi, la chaîne d'outils avec l'ancienne version rapide a fonctionné: stackoverflow.com/a/43142147/5846135
Zeero0

Réponses:

108

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 Build Libraries for Distribution sur Yes dans les paramètres de construction de votre framework, sinon le compilateur rapide ne génère pas les .swiftinterfacefichiers nécessaires qui seront 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, accédez à Product > Clean Build Folder and Build again.

Orion Edwards
la source
1
Impressionnant! Espérons maintenant que tous les développeurs de frameworks tiers le découvriront - ha ha :)
Mihai Fratu
25
Cela n'aide pas dans mon cas. Je l'ai réglé sur "OUI" mais j'obtiens toujours l'erreur. Des idées?
davidOhara
3
Je travaille avec Carthage et 10 frameworks ... ish. Est-ce carthageassez intelligent pour récupérer cela dans mon fichier .pbxproj , ou comme @MihaiFratu le dit ci-dessus, tous les développeurs de framework tiers doivent-ils le définir eux-mêmes dans leurs projets de framework?
nteissler
9
@davidOhara dans mon cas, cela avait à voir avec ce problème connu dans Xcode 11.2: Si un module est construit avec BUILD_LIBRARIES_FOR_DISTRIBUTION et contient un type public avec le même nom que le module lui-même, les clients ne pourront pas importer le module. (19481048) (FB5863238) dans les notes de publication de Xcode 11.2: developer.apple.com/documentation/xcode_release_notes/…
Richard Chirino
2
@davidOhara Malheureusement, je n'ai pas trouvé de solution. Pour nous, renommer la classe n'est pas possible car c'est la classe principale de notre framework et cela briserait le code de notre client. Si je construis le framework à l'aide de Xcode 11.2, il se compile sur Xcode 11.2 mais ne se compile pas sur 11.1 ou version antérieure. La version actuelle de Xcode 11.2.1 GM n'a pas résolu le problème. Voici le ticket sur le tracker de problème rapide au cas où vous voudriez garder un œil dessus: bugs.swift.org/browse/SR-11704 Il y a aussi un radar attaché.
Richard Chirino
2

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 sortie le 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é.

Sergio
la source
ce fut la solution la plus simple grâce à un tas
Krishan Patel
J'ai un problème sur le module Framework compilé avec Swift 5.1.2 ne peut pas être importé par le Swift 5.2.2 comment pouvons-nous résoudre ce problème?
Kishan Suthar
0

Vous pouvez utiliser Carthage pour ajouter le framework RxSwift.

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

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

iMoeNya
la source
Downvote car avec carthage, vous reconstruisez simplement votre bibliothèque sur le nouveau compilateur. La question concerne explicitement le chargement des bibliothèques binaires construites par le compilateur précédent
Orion Edwards
0

Cela a fait disparaître mon erreur de compilation.

  1. carthage bootstrap --platform ios
  2. brew bundle
  3. pod repo update
Rinni
la source
brew bundle? Qu'est ce que ça fait?
skywinder
Downvote car avec carthage vous reconstruisez votre bibliothèque sur le nouveau compilateur. La question concerne explicitement le chargement des bibliothèques binaires construites par le compilateur précédent
Orion Edwards