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 .
Je suppose que je dois attendre que Facebook mette à jour leur pod? Ou toute autre suggestion?
Merci !
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
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
Peut-être que vous pouvez nettoyer la cible avant de la construire. Ça fonctionne bien pour moi.
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. `
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.
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
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.
Ça marche pour moi.
1.Nettoyez votre projet dans Xcode 8
2.Construisez ou exécutez votre projet dans Xcode 9
J'ai nettoyé le projet dans Xcode 9, puis je lance l'application, ça marche.
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".
Dossier de construction propre
Cmd + option + shift + K
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
Si vous utilisez de Pod:
Podfile
commentez FacebookLogin podinstallation de pod
Podfile
décommentez FacebookLogin podinstallation de pod
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.