Version du langage Swift Xcode 9 (SWIFT_VERSION)

115

J'ai récemment mis à jour xcode vers la version 9. Avant cela, dans Xcode 8.x, chaque fois que j'utilise pour le faire, pod updateje montre un code de mise à jour pour convertir le code en Swift 3 et résoudre les erreurs. Mais maintenant, cela me donne cette erreur:

Le paramètre de construction «Version du langage Swift» (SWIFT_VERSION) doit être défini sur une valeur prise en charge pour les cibles qui utilisent Swift. Ce paramètre peut être défini dans l'éditeur des paramètres de construction.

Pour cette erreur, j'ai essayé Build Settings > Swift Language Versionet c'était Swift 3.2 Mais comme l'appel de mise à jour a réinstallé certains des pods comme Alamofire et il dit d'installer Xcode 8.x pour convertir le code en Swift 3, je dois donc installer un version supplémentaire avec le dernier Xcode? Si oui, comment puis-je installer Xcode 8 avec Xcode 9?

Chaudhry Talha
la source
essayez de nettoyer les données dérivées et
créez
Quelle est votre version rapide dans Xcode 8 ??
santhoshkumar
c'était 8.3.3 je pense. c'était le dernier avant xcode 9.
Chaudhry Talha

Réponses:

181

Réponse à votre question:
vous pouvez télécharger Xcode 8.x à partir du portail de téléchargement Apple ou télécharger Xcode 8.3.3 (ou voir: Où télécharger l'ancienne version de Xcode ), si vous avez un compte développeur premium (identifiant Apple). Vous pouvez installer et travailler avec Xcode 9 et Xcode 8.x dans un seul système (mac). (Assurez-vous que vous prenez en Command Line Toolscharge les deux versions de Xcode, pour travailler avec le terminal (voir: Comment installer 'Command Line Tool' ))


Astuce: Comment migrer votre code Versions Swift compatibles Xcode 9 (Swift 3.2 ou 4)
Xcode 9 permet la conversion / migration de Swift 3.0vers Swift 3.2/4.0uniquement. Donc, si la version actuelle de la langue Swift de votre projet est inférieure à 3.0, vous devez migrer votre code dans la version compatible Swift 3 à l'aide de Xcode 8.x.

Il s'agit d'un message d'erreur courant que Xcode 9 affiche s'il identifie la langue Swift inférieure à 3.0, lors de la migration.

entrez la description de l'image ici


Swift 3.2 est pris en charge par Xcode 9 et Xcode 8 à la fois.

Projet ► (Sélectionnez la cible de votre projet) ► Paramètres de construction ► (Tapez «swift» dans la barre de recherche) Langue du compilateur Swift ► Version de langue Swift ► Cliquez sur la liste des langues pour l'ouvrir.

entrez la description de l'image ici



Convertissez votre code source de Swift 2.0 en 3.2 en utilisant Xcode 8, puis continuez avec Xcode 9 (Swift 3.2 ou 4).


Pour une migration plus facile de votre code, suivez ces étapes: (cela vous aidera à convertir en dernière version de swift prise en charge par votre outil Xcode)

Xcode: Menus: Edit ▶ Covert ▶ To Current Swift Syntax

entrez la description de l'image ici

Krunal
la source
9
Si vous êtes venu ici parce que vous ne faites que maintenant (décembre 2018) épousseter du code Swift 2, vous serez déçu d'apprendre que Xcode 8 ne fonctionne pas sur Mojave.
bugloaf
53

Pour les projets Objective C créés à l'aide de Xcode 8 et s'ouvrant maintenant dans Xcode 9, il affiche la même erreur que celle mentionnée dans la question.

Pour résoudre ce problème, appuyez sur le bouton + dans les paramètres de construction et sélectionnez Ajouter un paramètre défini par l'utilisateur comme indiqué dans l'image ci-dessous

paramètre de construction

Ensuite, dans la nouvelle ligne créée, ajoutez SWIFT_VERSIONcomme clé et 3.2comme valeur comme ci-dessous.

entrez la description de l'image ici

Cela corrigera l'erreur pour les projets objectif c.

R. Mohan
la source
2
Cela m'a aidé. Merci.
Andreas Kraft
9
Si vous rencontrez ce problème avec CocoaPods, vous devrez peut-être ajouter ce paramètre de construction à la section pods.xcodeproject.
Stewart Macdonald
1
Cela a fonctionné pour moi, j'ai également dû modifier le 'ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES' dans les paramètres de construction en '$ (hérité)'
F-1
1
Merci encore 2 mois plus tard
Jan
1
Appréciez la solution.
user366584
4

Je viens de le recevoir après avoir créé un nouveau projet Objective-C dans Xcode 10, après avoir ajouté un fichier de modèle Core Data au projet.

J'ai trouvé deux façons de résoudre ce problème:

  1. Le moyen facile: ouvrez l'inspecteur de fichiers du modèle Core Data ( - 1) et changez la langue de Swift à Objective-C

Changer la langue du modèle Core Data

  1. Méthode plus longue et plus dangereuse

Le modèle contient un fichier "contenu" avec cette ligne:

<model type="com.apple.IDECoreDataModeler.DataModel" documentVersion="1.0" lastSavedToolsVersion="14460.32" systemVersion="17G5019" minimumToolsVersion="Automatic" sourceLanguage="Swift" userDefinedModelVersionIdentifier="">

Il y a une sourceLanguage="Swift"entrée. Changez-le en sourceLanguage="Objective-C"et l'erreur disparaît.

Pour trouver le fichier "contenu", .xcdatamodeldfaites un clic droit sur le dans Xcode et faites "Afficher dans le Finder". Cliquez avec le bouton droit sur le fichier (Finder) réel et faites "Afficher le contenu du paquet"

Aussi: la modification de la langue du modèle empêchera Xcode de générer des fichiers de sous-classes d'objets gérés dans Swift.

roi nevan
la source
1

Cela peut se produire lorsque vous avez ajouté des données de base à un projet existant.
Vérifiez le fichier :
<Nom> / <Nom> .xcdatamodeld / <Nom> .xcdatamodel / contents
.
Ce fichier contient une entrée "sourceLanguage" qui (par défaut) aurait pu être définie sur "Swift". Changez-le en "Objective-C".

démon numérique
la source
0

Je viens de cliquer sur le dernier bouton de conversion rapide et de définir le paramètre de construction cible de l'application -> Version linguistique Swift: swift 4.0,

J'espère que cela aidera.

Atal Singh
la source
0

Cette solution fonctionne lorsque rien d'autre ne fonctionne:

J'ai passé plus d'une semaine à convertir l'ensemble du projet et suis venu à une solution ci-dessous:

Commencez par désintégrer la dépendance cocopods du projet, puis commencez à convertir le projet vers la dernière version swift.

Accédez au répertoire du projet dans le terminal et tapez:

pod deintegrate

Cela désintègrera les cocopodes du projet et aucune trace de CocoaPod ne sera laissée dans le projet. Mais en même temps, cela ne supprimera pas le xcworkspace et les podfiles. Ce n'est pas grave s'ils sont présents.

Maintenant, vous devez ouvrir xcodeproj (et non xcworkspace) et vous obtiendrez beaucoup d'erreurs car vous avez appelé les méthodes de dépendance cocoapods dans vos projets principaux.

Donc, pour supprimer ces erreurs, vous avez deux options:

  1. Commentez tout le code que vous avez utilisé de la bibliothèque de cocoapods.
  2. Créez une classe wrapper qui a des méthodes factices similaires à la bibliothèque cocopods, puis appelez-la.

Une fois toutes les erreurs supprimées, vous pouvez convertir le code vers la dernière version Swift.

Parfois, si vous rencontrez des erreurs étranges, essayez de nettoyer les données dérivées et réessayez.

Shubham Mishra
la source
0

peut-être avez-vous besoin de télécharger la chaîne d'outils. Cette erreur se produit lorsque vous n'avez pas la bonne version du compilateur swift.

dalmate
la source
-3

Dans mon cas, tous les avertissements ont disparu après avoir directement changé la version swift de 2.x à 4.0 dans les paramètres de construction, sauf deux avertissements.

Ces avertissements liés à myprojectnameTestsetmyprojectnameUITests dossier. Je n'ai pas remarqué et j'ai pensé que c'était lié à l'immigration directe de Xcode 7 à Xcode 9 et je pensais que je ne pouvais pas résoudre ce problème et que je devrais installer la version manquée de Xcode 8.

Dans mon cas, j'ai supprimé ces dossiers et tous les avertissements ont disparu, mais vous pouvez recréer ce dossier et contient en utilisant ceci:

file > new > target > (uitest or unittest extensions)

et utilisez cet article pour créer des cas de test: https://developer.apple.com/library/content/documentation/DeveloperTools/Conceptual/testing_with_xcode/chapters/04-writing_tests.html

iman kazemayni
la source
et quelqu'un me dit quelle est mon erreur !?
iman kazemayni le
2
Personnellement, je ne voterais pas contre cela, rien de mal dans votre réponse, mais le meilleur endroit sera de commenter la question du PO. Vous pouvez également consulter stackoverflow.com/help/how-to-answer qui vous aidera à trouver la bonne façon de répondre aux questions.
grassyburrito