79 votes

Xcode 9: le module compilé avec Swift 3.1 ne peut pas être importé dans Swift 4.0

Après la mise à jour de Xcode 9, j'ai essayé de construire un de mes projets.

J'utilise le FacebookLoginpod. J'ai une erreur de compilation dans FacebookLogin/LoginButton.swift

@testable import FacebookCore
❌ Module compiled with Swift 3.1 cannot be imported in Swift 4.0

Dans mon objectif est de construire des paramètres, la Swift version de langue est définie sur Swift 3.2.

Screenshot added

Je suppose que je dois attendre pour Facebook pour mettre à jour leur pod ? Ou toute autre suggestion ?

Merci !

73voto

xavi.pedrals Points 857

Mise à jour:

La Solution a également testé et de travail dans Swift Xcode 4.2 et 10.

Origine:

Je voudrais ajouter que si vous êtes à l'aide de Carthage pour compiler un module de Swift 3.2 vous devez vous rendre à un terminal et exécutez:

sudo xcode-select --switch /Applications/Xcode-beta.app/Contents/Developer

Pour utiliser Xcode 9 outils en ligne de commande, puis vous pouvez exécuter:

carthage update NameOfTheLibrary --platform iOS --no-use-binaries

Cela permettra de compiler la bibliothèque avec votre outils de ligne de commande, il peut être un peu lent, mais maintenant, le projet devrait générer.

Note

Pour revenir et utiliser votre stable Xcode outils de ligne de commande exécutez simplement:

sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer

26voto

klinger Points 283

Xcode 9 est livré avec une Swift 4 compilateur qui comprend à la fois Swift 3.2 et swift 4, il vous permet même de mélange et de match entre les 2 versions. Malheureusement, les autres versions ne sont pas pris en charge.

Même si vous définissez votre langue pour Swift 3.2, il utilise le Swift 4 compilateur.

Si vous utilisez cocoapods, vous pouvez ajouter ceci à la fin de votre fichier pod pour forcer les gousses d'utiliser Swift 3.2 ou 4.0:

post_install do |installer|
    installer.pods_project.targets.each do |target|
        target.build_configurations.each do |config|
            config.build_settings['SWIFT_VERSION'] = '3.2'
        end
    end
end

Sinon, vous pouvez mettre les fichiers à partir du conteneur directement dans votre projet temporairement, jusqu'à ce FacebookLogin est mis à jour à Swift 3.2 ou 4.

Note: Édité basé sur Matt commentaires

19voto

TomorJM Points 199

Peut-être que vous pouvez nettoyer la cible avant de la construire. Ça fonctionne bien pour moi.

11voto

Xu Yin Points 2341

J'ai rencontré le même problème sur Xcode 9 Beta 3, qui pointe sur «Alamofire» et a essayé plusieurs solutions différentes, la plus simple que j'ai trouvée est

 1. CMD+SHIFT+K to clean the build
2. Restart Xcode 9 <-- make sure you do this step, that's critical. `
 

10voto

John Pavley Points 274

Faire un "dossier de construction propre" et redémarrer Xcode 9 a corrigé l'erreur pour moi. De plus, l'erreur n'a pas empêché l'application de s'exécuter sur mon appareil ou le simulateur.

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