Table of Contents
Xcode9で、Swift2.xで書かれた古いプロジェクトを開こうとすると「Unsupported Swift Version」という警告が表示されます。
現在のXcodeのバージョンは9であり、サポートしているSwiftのバージョンは3以上(最高は4)となっています。したがって、3より低いバージョンのSwiftは実行やコードのバージョン変換も行うことができません。
古いバージョンのコードをXcode9で実行できるようにするには、上記の警告メッセージの通り、Xcode8系で読み込んで、バージョンを3に変換する必要があります。
以下では、この方法について紹介します
Xcode8.3.3のダウンロード
Xcode8系の最新バージョンである Xcode8.3.3 は、appleの公式サイトからダウンロードすることができます。以下のページにアクセスし、ログインして下さい。
https://developer.apple.com/download/more/
ダウンロード可能なファイルの一覧が表示されたら、その中から Xcode8.3.3 を探して下さい。
ファイル容量が4Gと大きいため、安定した通信環境でダウンロードするといいでしょう。
Xcode8によるSwift3への変換
ダウンロードできたらアーカイブを展開し、変換したいコードを含んでいるプロジェクトを選択して起動して下さい。Xcode9が既にインストールされていても、上書きしなければ問題ありません。
起動したら、以下のような変換を促すメッセージが表示されますので Covert を選択して下さい。
変更のプレビュー画面が出たらOKを押して完了して下さい。これで、Swiftのバージョンが 3 に変換されます。
または、画面上部のメニューから Edit → Covert → To Current Swift Syntax を選択することでも変換できます。
Xcode9で最新版のSwift4に
変換できたら Xcode8.3.3 を終了し、今度は最新の Xcode9 で同じプロジェクトを開きます。
バージョン3以降であれば実行可能なため、起動時には変換を促すメッセージが表示されないかもしれません。したがって、最新版にするには、画面上部のメニューから Edit → Covert → To Current Swift Syntax を選択します。
今回の変換では、先程とは異なる以下のオプションが表示されます。
これは、Swift4で @objc の推論(自動補完)を行わなくなったため、それに対応するための方法を指定するものです。
Minimize Inference を選択すると、@objc が無い状態のコードに変換され、コード中の警告を見て必要な部分に自分で @objc を書き加える必要がありますが、不要な @objc が追加されることがなくバイナリサイズを小さくできます。
Match Swift 3 Behavior は、今まで自動でコンパイラーが @objc を付けていたところ全てに @objc を書き加えます。先程のオプションで行うべき手動の作業が必要ない代わりに、バイナリサイズは大きくなるようです。
詳しくはXcode内のヘルプの項目「Migrate to Swift 4 @objc inference」をご覧ください。
オプションを選択すると、変換プレビューが表示されますので、問題なければ変換を完了させて下さい。
以上の手順で Swift2.x から Swift4 へ変換することができ、新しいXcodeでプロジェクトを編集できます。
参考
ios – Xcode 9 Swift Language Version (SWIFT_VERSION) – Stack Overflow