web-dev-qa-db-ja.com

どのバージョンのSwiftがどのバージョンのXcodeでサポートされていますか?

Swiftでアプリを開発して生計を立てています。私はその言語を楽しんで、できる限り忠実にそれに従います。しかし、それでもなお、私が盲目的に見られているか、またはAppleが非常に静かであるかにかかわらず、特定の事実はすり抜けています。

今日、Swift 3.3と3.4が存在することを発見しました。私は、3.2が4、4.2、および5への移行に使用する3の最後のバージョンであると想定していました。この誤解は、主に Swift.org公式のGitリポジトリ 、そして Xcodeリリースノート それらについては一切言及しない。

したがって、これらも一時的なものであると思いますが、それらがどのIDEまたはコンパイラに含まれるのか、またはそれらに付随する警告はわかりません。以下は私の知識をまとめた表です:

以下の表は、質問が意味をなすように、コンテキスト用に提供されているもので、古くなっています。 この表の更新版を以下の回答に投稿しました。

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

紫色のスペースはどうなりますか?特に3.3行と3.4行についてですが、他の行がわかっている場合は、それも役立ちます!

信頼できる情報源もすばらしいでしょう。


主な質問に対する可能な回答は次のとおりです。

  1. Swift 3.3はXcode 9.3ベータ版のみで、公開されることはありませんでした。 Swift 3.4はXcode 9.3〜9.4にのみ含まれていました
  2. Swift 3.3はXcode 9.3でのみサポートされていました。 Swift 3.4はXcode 9.3.1および9.4でサポートされていました
  3. Swift 3.3はXcode 9.3および9.3.1でサポートされていました。 Swift 3.4はXcode 9.4でのみサポートされていました
  4. Swift 3.3は、Xcodeバージョン9.3から9.4でサポートされていました。 Swift 3.4は、Xcode 10ベータでのみサポートされていました。

私は考えません別の可能性があると思います。ただし、私がベースを外れている場合はお知らせください。

23
Ben Leggiero

私はデータを収集してテストを行ってきたので、結果をこの回答の更新されたグラフとして投稿します。

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

前回これを行って以来、新しいバージョンのXcodeは実際には古いバージョンのSwiftからの移行をサポートしていないことがわかりました。 Xcode 10.2から11がSwift 3.x以前をサポートしていないことを明示的にテストしました。そのため、これらの色を白にしました。Xcode8.3から10.1をテストする時間はまだありませんが、 3.xは移行するが、2.x以前は移行しないと思いますこれが、大きな紫色のブロックが存在する理由です。

42
Ben Leggiero

これは、図のすべての未知のスペースを埋める完全な答えではありませんが、おそらく私が役立つことに何かを埋めることができます...

Swift 3.x?

Swift 4の開発が始まったとき(そして最初にWWDC17で正式に発表されたとき)、コンパイラのバージョン番号は言語のバージョン番号から分岐しました。 (たとえば、ANSI C標準のバージョン管理が、clangコンパイラーやGCCコンパイラーとは異なることに似ています。)

言語バージョン番号は、言語定義自体、標準ライブラリ、およびAppleプラットフォームSDKがSwiftで表示される方法のソース互換性を追跡します。 「Swift 3」コードがある場合は、Swiftコンパイラのバージョン3、または-Swift-version 3オプションを使用すると、それ以降のバージョンのコンパイラでコードをコンパイルできるはずです。

しかし、「Swift 3」(言語バージョン)も修正されていません。 Swiftは進化し続けているため、Swift 3は純粋に付加的な言語、標準ライブラリ、SDKへの変更が可能になります。したがって、Swift 3コードベースがあり、作業を開始する場合新しいコンパイラでは、すべてをSwift 4に変換するか、新しいコンパイラ機能の使用を開始するか、古いSwift 3コンパイラとの互換性を維持するかを選択できます。

これは、コンパイラーのバージョンと可能な言語互換バージョンのマッピングがあることを意味します。

  • Swift言語3.2は、Swiftコンパイラ4.0の「Swift 3モード」です。
  • Swift言語3.3は、Swiftコンパイラ4.1の「Swift 3モード」です。
  • Swift言語3.4は、Swiftコンパイラ4.2の「Swift 3モード」です。

Swift 5(言語またはコンパイラ)のリリースはまだありませんが、リリースされると、おそらく-Swift-version 4モードでのビルドが可能になり、「Swift 4.3」言語バージョンが作成されます。 (将来のSwift 4.xリリースでは、これらの数値が最初に取られないと想定しています。)

私はこの回答の単一のソースを認識していませんが、以下からまとめることができます:

バージョン履歴

過去のさらに進んだ図の部分に対するいくつかのマイナーな修正:

  • Xcode 8には、-Swift-versionスイッチを備えた1つのコンパイラーではなく、2つの異なるバージョンのコンパイラーが含まれていました。 Swift 2.3コンパイラを含むXcode 8.3は停止しました 、Swift 3.1をそのバージョンでサポートされる唯一のSwift言語として残しました。

  • Xcode 7/Swift 2はSwift 1.xコードのコンパイルをサポートせず、移行のみを行います。 Xcode 7.2以降、現在のXcode 10ベータ版までは、「現在に変換Swift構文」マイグレータがまだ含まれています。これは理論的には、古いバージョンのSwiftからの移行をサポートしています。

  • Xcode 6.0〜6.2.xは、OS X Mavericks(10.9)でのXcodeの実行をサポートしていました。 Xcode 6.3は、OS X Yosemite(10.10)を最初に必要としたものです。

追加のソース: 古いXcodeダウンロード

落胆?

このラベルがどれだけ適切に適用されるかわかりません...

  • Xcode 8.xにSwift 2.3コンパイラが含まれていた時代は、アプリの構築とApp Storeへの送信が完全にサポートされていました。それでも、当時は[非推奨]だったと言えますが、Appleはそれが固執しないことと、Swift 3.0が後のコンパイラが最初に使用する言語バージョンになることの両方を述べています。後方ソース互換。

  • Xcode 9ではSwift 3.2が完全にサポートされています。Swift 2.3-> 3.0とは異なり、AppleまたはSwift openからの「このバージョンを削除してから削除する」というメッセージはありません。ソースプロジェクト。 Swift言語バージョン3.2、3.3、および3.4​​は、開発者が「Swift 3」コードベースを維持しながら、新しいコンパイラとIDEリリースのメリットを享受できるようにするために明示的に存在します。

6
rickster