Le module compilé avec swift 3.0 ne peut pas être importé dans Swift 3.0.1

87

J'ai mis à niveau Xcode vers 8.1 GM et j'obtiens maintenant l'erreur ci-dessous pour SwiftyJSON. D'autres frameworks importés semblent fonctionner. Existe-t-il un moyen de forcer cela à fonctionner dans Swift 3 jusqu'à ce que SwiftyJSON mette à niveau son framework? J'ai utilisé Carthage pour importer / mettre à jour des frameworks. J'ai aussi essayé de changerUse Legacy Swift language version On et Off en vain.

Le module compilé avec Swift 3.0 ne peut pas être importé dans Swift 3.0.1: Modules / SwiftyJSON.swiftmodule / arm64.swiftmodule

HH887
la source

Réponses:

171

SwiftyJson est en cours de téléchargement précompilé par carthage. Le téléchargement précompilé est avec Swift version 3.0. Cela amène le compilateur à se plaindre que la version n'est pas correcte. À l'aide de la commande suivante:

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

SwiftyJson (et tous les autres frameworks de Carthage) seront compilés localement en utilisant la version locale de Swift (3.0.1) et le compilateur ne se plaindra plus.

zirinisp
la source
7
Vous m'avez probablement sauvé une heure de recherche. Je vous remercie.
djv
24
Je vous en prie. Pour être honnête, Carthage devrait être un peu plus intelligent et vérifier le numéro de version rapide.
zirinisp
D'autres idées? Parce que cela n'a pas fonctionné pour moi, même si dans mon cas, j'ai des problèmes avec Unbox
Xernox
C'était excellent. Existe-t-il un moyen d'intégrer cela dans le Cartfileafin que je puisse simplement taper carthage updatesans que les autres développeurs aient besoin de connaître / de s'inquiéter des indicateurs supplémentaires?
Craig Otis
1
J'ai eu une erreur similaire avec PromiseKit 4.0 après la mise à jour de XCode 8.0 vers XCode 8.1 J'avais une erreur EXC_BAD_ACCESS. En fin de compte, PromiseKit a dû être recompilé avec swift 3.0.1 et le problème a été résolu.
Ricardo Anjos
21

Supprimez le chache d'application de DerivedData et reconstruisez-le. l'erreur peut être corrigée.

Le chemin DerivedData comme ceci:

~/Library/Developer/Xcode/DerivedData/
i-chou
la source
A travaillé pour moi, je supprime ce folter, supprime le dossier pod et utilise "pod install". Et réparé.
Jose Pose S
Salut. Cette solution a fonctionné pour moi. Pouvez-vous expliquer en détail ce qui se passe lorsque nous effaçons les données dérivées? Comment l'erreur disparaît?
iPhoneDeveloper
A travaillé pour moi aussi, merci.
Hasya
10

Assurez-vous d'avoir placé le nouveau package XCode 8.1 GM dans votre dossier Applications. Nous avons rencontré ce problème lorsque l'un de nous exécutait Carthage pour mettre à jour nos dépendances, mais n'avait pas remplacé l'ancienne application XCode 8.0 dans le dossier des applications (8.1 GM s'exécutait sur le bureau).

Vous voulez vous assurer que lorsque vous exécutez ce qui suit dans le terminal: xcrun swift -versionqu'il retourne Apple Swift version 3.0.1.

Clay Garrett
la source
Cela a fonctionné pour moi, merci! De plus, la commande qui fonctionnait dans le terminal était xcrun swift -version
HH887
2
J'ai toujours le même problème. Toute autre suggestion
harsh_v
2
Cette commande a fonctionné pour moi: mise à jour de carthage - plate-forme iOS
no
2
J'ai fait carthage update --platform iOS --no-use-binarieset ça ne marche toujours pas. J'ai nettoyé mon projet et redémarré Xcode et j'obtiens toujours l'erreur. Est-ce que je peux essayer autre chose?
Clifton Labrum
1
J'ai essayé ça. Il revientApple Swift version 3.0.1 (swiftlang-800.0.58.6 clang-800.0.42.1) Target: x86_64-apple-macosx10.9
Clifton Labrum
9

La mise Xcodeà jour par défaut du nouveau sur le terminal a fonctionné pour moi.

Étape 1: Utilisez la commande suivante pour mettre à jour la version Xcode à la dernière sur Terminal. Réf

sudo xcode-select -switch <path/to/>Xcode.app

Étape 2: Maintenant, essayez la commande de mise à jour de carthage

carthage update --platform iOS
Mohammad Zaid Pathan
la source
9

Juste pour donner les dernières mises à jour:

Carthage a publié la version 0.20 le 27 février 2017.

Carthage n'utilise désormais le binaire de pré-construction que si le binaire de pré-construction disponible est compatible .

Cela étant dit, vous n'avez plus à utiliser: --no-use-binariespour éviter un framework pré-build incompatible.

Assurez-vous donc que vous avez une version de carthage supérieure0.20 et faites simplement:

carthage update --platform iOS
Kanekin
la source
XCode 8.3.3 Après la mise à jour de Carthage vers la version 0.25 et après avoir fait ci-dessous, cela a fonctionné pour moi mise à jour de carthage --platform iOS --no-use-binaries
anoop4real
@ anoop4real Cela ne fonctionne pas pour vous sans --no-use-binaries? Carthage devrait être capable de détecter si le binaire est compatible avec votre version de compilateur. S'il n'est pas compatible, il est censé supprimer automatiquement le binaire téléchargé et créer le framework localement.
kanekin le
5

Tout comme @zirinisp a dit:

  1. Vous pouvez utiliser la commande suivante:carthage update --platform iOS --no-use-binaries
  2. Utilisation de la commande suivante: xcrun swift -versionpour voir la version Swift
  3. Faites ceci: Xcode->preferences->locationspour effacer les données dérivées et les données d'archives, le plus important pour changer les outils de ligne de commande en "Xcode 8.1 "
  4. En utilisant la commande suivante:, xcrun swift -versionvous pouvez voir que la version swift est 3.0.1
  5. Ensemble Use Legacy Swift Language Version = NO

J'espère que ça t'aidera

kris
la source
1
  1. Déplacez la version beta / GM si le Xcode dans le dossier / Applications et nommez-le Xcode-beta

  2. Vérifiez la sortie de:

    xcrun swift --version

en exécutant cette commande dans le terminal, sa sortie doit correspondre à la version Swift que vous souhaitez que l'application compile, car Carthage utilise la sortie de cette commande pour déterminer la version Swift locale.

  1. Mettez à jour la version Xcode à la dernière sur Terminal en exécutant la commande suivante:

    sudo xcode-select -s /Applications/Xcode-beta.app/

  2. Construisez les bibliothèques pour iOS et empêche Carthage de télécharger des binaires précompilés existants (mais incompatibles), en exécutant la commande suivante:

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

  3. Nettoyer et construire

Tul
la source
0

J'ai eu exactement le même problème avec la bibliothèque XCTest_Gherkin, ce qui a fonctionné pour moi était:

  1. Product-> Scheme->XCTest-Gherkin
  2. Product -> Build

J'espère que ça aide. J'utilise des Cocoapods.

Alan Steiman
la source
0

Dans les paramètres Xcode Build, assurez-vous que vos chemins de recherche de framework contiennent le dossier Carthage Build approprié:

$(inherited)
$(PROJECT_DIR)/Carthage/Build/iOS
John Cromie
la source