web-dev-qa-db-fra.com

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

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

J'utilise le pod FacebookLogin . 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 les paramètres de construction de ma cible, la version de langue Swift est définie sur Swift 3.2 .

Screenshot added

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

Merci !

77
Arnaud

Mise à jour:

La solution a également été testée et fonctionne dans Swift 4.2 et Xcode 10.

Original:

Je voudrais ajouter que si vous utilisez Carthage pour compiler un module dans Swift 3.2, vous devez vous rendre sur un terminal et lancer:

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

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

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

Cela compilera la bibliothèque avec vos outils de ligne de commande actuels, cela peut être un peu lent, mais le projet devrait maintenant être construit.

Remarque

Pour revenir en arrière et utiliser vos outils de ligne de commande Xcode stables, exécutez simplement:

Sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer
69
xavi.pedrals

Xcode 9 est livré avec un compilateur Swift 4 qui comprend à la fois Swift 3.2 et Swift 4, il vous permet même de mélanger et de faire correspondre les 2 versions. Malheureusement, les autres versions ne sont pas supportées.

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

Si vous utilisez des cocoapodes, vous pouvez ajouter ceci à la fin de votre fichier pod pour forcer les pods à 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

Vous pouvez également insérer temporairement les fichiers du module directement dans votre projet, jusqu'à ce que FacebookLogin soit mis à jour en Swift 3.2 ou 4.

Remarque: Modifié en fonction des commentaires de Matt

26
klinger

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

19
TomorJM

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. `
11
Xu Yin

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.

10
John Pavley

Si vous utilisez Carthage , ouvrez le terminal et;

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

Si vous utilisez Pod , ouvrez le terminal et;

pod update

(Aussi, si cela ne fonctionne pas dans le pod, vous pouvez changer Swift_VERSION dans le podfile Ex:

config.build_settings['Swift_VERSION'] = '3.2'

)

Après;

Ouvrez Xcode et utilisez-le;

Command+Option+Shift+K

enter image description here

8
SwiftDeveloper

goto xcode DerivedData répertoire puis supprimez tous les fichiers qu'il contient et recompilez votre projet. ça marche pour moi.

et le répertoire DerivedData par défaut est: ~/Library/Developer/Xcode/DerivedData.

8
reco

Ça marche pour moi.

1.Nettoyez votre projet dans Xcode 8

2.Construisez ou exécutez votre projet dans Xcode 9

4
RayJiang

J'ai nettoyé le projet dans Xcode 9, puis je lance l'application, ça marche.

3
Shan Ye

J'ai eu le même problème avec Xcode 9 GM et cela a résolu mon problème: supprimez-le du projet et faites-le glisser à nouveau dans des "binaires incorporés".

2
Francisco Pereira

Dossier de construction propre

Cmd + option + shift + K
2
Vineesh TP

J'ai

pod 'FBSDKCoreKit'
pod 'FBSDKLoginKit'
pod 'FBSDKShareKit'

dans mon projet et import FBSDKLoginKit, après avoir nettoyé la cible, je n'ai rencontré aucun problème

Comme le pod que vous utilisez se trouve dans Swift et qu’il s’agit d’un pod bêta, il est probable que vous rencontriez des problèmes avec le compilateur Swift 4, vous devez utiliser la version de objective-c de la cosse pour le moment

1
thibaut noah

Si vous utilisez de Pod:

  1. Dans Podfile commentez FacebookLogin pod
  2. installation de pod

  3. Dans Podfile décommentez FacebookLogin pod
  4. installation de pod

  5. Relancez votre projet
0
Hamed

Pour mon cas - le pod réel a référencé un zip statique avec des binaires pré-construits ciblant Swift 3.1. La seule solution est donc de reconstruire le framework avec le source de xcode 9.

https://github.com/AudioKit/AudioKit/issues/98

0
johndpope