最近自分のアプリでSwift4.2から5へのマイグレーションを実施したので、やったことをまとめておきます。
なお、使用しているパッケージマネージャはCocoaPodsのみです。
XCode10.2/Swift4.2で問題なく動作するようにする
まずはじめに、XCode10.2/Swift4.2でアプリが問題なく動作すること、テストがパスすることを確認しました。
このときはXCode10.2にしたタイミングでテストライブラリのNimble
がコンパイルエラーを起こしていたので、Nimble
をバージョンアップしました。
$ pod repo update
$ pod update Nimble
バージョンアップしたらコンパイルエラーは出なくなり、テストがパスしました。
Podfile.lock
が変更されているので、ここで一旦コミットしておきます。
アプリのコードをSwift5へマイグレーションする
次に、Swift5へのマイグレーションを行っていきます。
XCodeが提供するマイグレーションツールによるマイグレーションは、アプリ本体のコードおよびテストコードにのみ実施します。
ライブラリのコードについては、Swift5に対応しているバージョンにアップデートするか、Swift4.2でビルドするように設定することで対応します。
マイグレーション実施前にPodfile
に以下の設定を加えておきます。
これはライブラリをSwift4.2でビルドするという設定です。
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings['SWIFT_VERSION'] = '4.2'
end
end
end
ここで一旦コミットしておきます。
続いて、Edit > Convert > Convert to current swift syntaxをクリックします。
以下のような画面が表示されるので、アプリターゲットとテストターゲットにのみチェックを入れてNextをクリックします。
マイグレーション処理が開始されます。
今回は変更箇所がなかったらしく以下のような画面が表示されました。
Updateをクリックすると、project.pbxproj
が更新され、Swift5でビルドする設定に変更されました。
ここでアプリが問題なく動作すること、テストがパスすることを確認しました。
なお、Swift5でEnumに一部変更があった関係でワーニングが出ていたので、それだけ修正しました。
ここでまたコミットしておきます。
ライブラリをバージョンアップする
アプリ本体のコードのマイグレーションが完了したので、次はライブラリをバージョンアップしてXCode10.2/Swift5に対応させます。
Podfile
に追加していた設定をここで削除しておきます。
次に、ライブラリのバージョンアップを行います。
CocoaPodsのみでライブラリのバージョン管理を行っているので、以下のコマンドで全てのライブラリを一気にバージョンアップできます。
$ pod update
バージョンアップが完了したら、アプリが問題なく動作するか、テストがパスするかを確認します。
このときはコンパイルエラーも起こらず、アプリの動作も特に問題ありませんでした。
なお、ライブラリがまだSwift5に対応していないときは、Podfile
に以下のような設定を加えることで、そのライブラリだけSwift4.2でビルドするということができます。
Swiftマイグレーションガイドに、Swift4.2と5でビルドしたターゲットは共存可能であると書かれています。
post_install do |installer|
installer.pods_project.targets.each do |target|
if ['RxSwift', 'RxCocoa'].include? target.name
target.build_configurations.each do |config|
config.build_settings['SWIFT_VERSION'] = '4.2'
end
end
end
end
まとめ
Swift5へマイグレーションしたときの手順をご紹介しました。
自分は経験ないですが、Swift2→3、Swift3→4のマイグレーションに比べるとほとんど手間がかからなくなったようです。
今回はCocoaPodsだけを使っているプロジェクトの例でしたが、Carthageを使っていたり、Embedded Frameworkなど使ったりしていると、また違った手順になるんでしょうか。
もっとマイグレーション関連の記事がたくさん出るといいなと思います。