web-dev-qa-db-fra.com

Quelles versions de Swift sont prises en charge par quelles versions de Xcode?

Je développe des applications dans Swift pour gagner ma vie. J'apprécie la langue et la suis aussi étroitement que possible. Pourtant, certains faits se faufilent, que je sois aveugle ou que Apple soit très silencieux à leur sujet.

Aujourd'hui, j'ai découvert que Swift 3.3 et 3.4 existent. J'étais sous l'hypothèse que 3.2 était la dernière version de 3, à utiliser pour la migration vers 4, 4.2 et 5. Cette idée fausse est principalement due au fait que Swift.org , le dépôt officiel de Git , et Notes de version Xcode ne les mentionnez pas pas du tout.

Donc, je suppose que ceux-ci sont également transitoires, mais je n'ai aucune idée de ce que IDE ou du compilateur dans lequel ils apparaissent, ni des mises en garde fournies. Voici un tableau qui résume mes connaissances:

Le tableau ci-dessous est obsolète, fourni pour le contexte, de sorte que la question est logique. J'ai publié une version mise à jour de ce tableau dans une réponse ci-dessous.

A complex table with many versions of Swift and Xcode as the axes, and the support versions as the content

Que se passe-t-il dans les espaces violets? Spécifiquement pour les lignes 3.3 et 3.4, mais si vous connaissez les autres, cela aiderait aussi!

Des sources faisant autorité seraient également géniales.


Les réponses possibles à la question principale sont les suivantes:

  1. Swift 3.3 n'était que dans Xcode 9.3 beta et n'est jamais devenu public; Swift 3.4 était uniquement dans Xcode 9.3 - 9.4
  2. Swift 3.3 n'était pris en charge que dans Xcode 9.3; Swift 3.4 était pris en charge dans Xcode 9.3.1 et 9.4
  3. Swift 3.3 était pris en charge dans Xcode 9.3 et 9.3.1; Swift 3.4 n'était pris en charge que dans Xcode 9.4
  4. Swift 3.3 était pris en charge dans les versions Xcode 9.3 à 9.4; Swift 3.4 n'était pris en charge que dans une version bêta de Xcode 10.

Je ne pense il y a une autre possibilité. Faites-moi savoir si je suis hors de la base, cependant.

23
Ben Leggiero

Depuis que je collecte des données et fais des tests, je publierai mes résultats sous forme de graphique mis à jour dans cette réponse:

A chart depicting the different versions of Swift as compared to their respective versions of Xcode. Last updated 2020-02-25

Depuis la dernière fois que j'ai fait cela, j'ai découvert que les nouvelles versions de Xcode ne prennent pas en charge la migration à partir de toutes les anciennes versions de Swift. J'ai testé explicitement que les Xcodes 10.2 à 11 ne prennent pas en charge Swift 3.x et versions antérieures, j'ai donc coloré ces blancs. Je n'ai pas encore eu le temps de tester Xcode 8.3 à 10.1, mais Je soupçonne qu'ils migreront 3.x mais pas 2.x ou plus tôt; c'est pourquoi il y a maintenant un gros bloc violet .

42
Ben Leggiero

Ce n'est pas une réponse complète pour remplir tous les espaces inconnus dans votre diagramme, mais je peux peut-être remplir quelque chose d'utile malgré tout ...

Swift 3.x?

Lorsque le développement de Swift 4 a commencé (et a été officiellement annoncé pour la première fois lors de la WWDC17), le numéro de version du compilateur est issu de celui du langage. (C'est un peu comme, disons, que la norme ANSI C a des versions différentes des compilateurs clang et GCC.)

Le numéro de version de la langue suit la compatibilité de la source - de la définition de langue elle-même, de la bibliothèque standard et de la façon dont les SDK de la plate-forme Apple apparaissent dans Swift. Si vous avez du code "Swift 3", vous devriez pouvoir le compiler avec la version 3 du compilateur Swift, ou toute version ultérieure du compilateur lorsque vous utilisez l'option -Swift-version 3.

Mais "Swift 3" - la version linguistique - ne reste pas fixe non plus. Au fur et à mesure que Swift continue d'évoluer, les modifications de la langue, de la bibliothèque standard et des SDK qui sont purement additifs deviennent disponibles pour Swift 3. Donc, si vous avez une base de code Swift 3 et commencez à travailler avec un compilateur plus récent, vous pouvez choisir de tout convertir en Swift 4, de commencer à utiliser les nouvelles fonctionnalités du compilateur ou de conserver la compatibilité avec les anciens Swift 3 compilateurs.

Cela signifie qu'il existe un mappage des versions du compilateur avec les versions de compatibilité linguistique possibles:

  • Le langage Swift 3.2 est le "mode Swift 3" pour le compilateur Swift 4.0
  • Le langage Swift 3.3 est le "mode Swift 3" pour le compilateur Swift 4.1
  • Le langage Swift 3.4 est le "mode Swift 3" pour le compilateur Swift 4.2

Il n'y a pas encore de version Swift 5 (langue ou compilateur), mais lorsque cela se produira, cela permettra probablement la construction en mode -Swift-version 4, Créant une version linguistique "Swift 4.3". (En supposant que les versions futures de Swift 4.x ne prennent pas ces chiffres en premier.)

Je ne connais pas de source unique pour cette réponse, mais vous pouvez la rassembler à partir de:

Historique des versions

Quelques corrections mineures à des parties de votre diagramme qui sont plus loin dans le passé:

  • Xcode 8 comprenait deux versions distinctes du compilateur, plutôt qu'un compilateur avec un commutateur -Swift-version. Xcode 8.3 a cessé d'inclure le compilateur Swift 2. , laissant Swift 3.1 comme seule langue Swift prise en charge dans cette version.

  • Xcode 7/Swift 2 n'a jamais pris en charge la compilation du code Swift 1.x, mais uniquement sa migration. Xcode 7.2 et au-delà, jusqu'à la version bêta actuelle de Xcode 10, incluent toujours le migrant "Convertir en syntaxe actuelle Swift", qui, en théorie, prend en charge la migration à partir de n'importe quelle version plus ancienne de Swift.

  • Xcode 6.0 à 6.2.x a pris en charge l'exécution de Xcode sur OS X Mavericks (10.9). Xcode 6.3 a été le premier à nécessiter OS X Yosemite (10.10).

Sources supplémentaires: anciens téléchargements Xcode .

Découragé?

Je ne sais pas dans quelle mesure ce label s'applique ...

  • Pendant que Xcode 8.x incluait le compilateur Swift 2.3, il était entièrement pris en charge pour la création d'applications et la soumission à l'App Store. On pourrait dire qu'il était néanmoins "découragé" à cette époque, cependant, dans la mesure où Apple a déclaré à la fois qu'il ne resterait pas et que Swift 3.0 serait la première version linguistique que les compilateurs ultérieurs sont rétrocompatible avec.

  • Swift 3.2 est/était entièrement pris en charge dans Xcode 9 - contrairement à Swift 2.3 -> 3.0, il n'y a pas de message "retirez cette version avant de l'emporter" de Apple ou de Swift ouvert projet source. Les versions de langage Swift 3.2, 3.3 et 3.4 sont là explicitement dans le but de permettre aux développeurs de maintenir les bases de code "Swift 3" tout en bénéficiant des avantages du compilateur plus récent et des versions IDE.

6
rickster