仕事が忙しいことを理由に個人アプリをずっとアップデートできず、気がついたら2年が経過。。
当時はXcode10で開発していましたが、いまではXcode12に。
最近仕事がちょっと落ち着いてきたので個人アプリの開発を再開しようと思い、まずは開発環境全体を最新化することから始めました。
2年も期間が空いていたからめっちゃ苦労するだろうなと思っていたのですが、iOSの開発環境もずいぶんと安定したようで、案外すんなりとできました!
本記事では、私が実施したiOSプロジェクトのもろもろを最新化する手順についてご紹介します。
まずはXcode12でビルド
Xcode10からXcode12で2つのメジャーバージョンアップがありましたが、すんなりビルドできました!
Swiftのバージョンが2とか3のころはXcodeのバージョンが上がるたびにコードの修正が必要だったらしいですが(ちなみに私はSwift4から始めたのであんまり苦労した経験無し)、Xcode10ですでにSwift5.0だったこともあり、特に問題なくビルドできました。
Deployment Targetの更新
(そもそもそんなにユーザのいない小さなアプリですが)Firebaseでユーザの利用OSバージョン比率を見たところ、iOS13以下のユーザがほとんどいなかったので、思い切ってiOS14.0に変更しました(今後はSwiftUIでガンガン開発していきたい)。
以前記事に書いたのですが、Deployment Targetはプロジェクトとターゲットの両方の値を変更しないと意図しない挙動になるので要注意です。
ちなみに、InfoタブでDeployment Targetを指定しようとすると、iOS14.0が選択肢に出てきません。
単なるバグなのでは?という意見もありましたが、理由はよくわかってません。
swift - cannot select iOS 14.0 on widget extension deployment target - Stack Overflow
Deployment Targetを変更したら、一度アプリをビルドしてみます。特に問題なくアプリが起動したので、コミットして次に進みます。
Gemの最新化
GemfileでCocoaPodsとfastlaneのバージョン管理をしています。
まずは以下のコマンドを実行し、2つのライブラリを最新化します。
$ bundle update
次に、Podfileの以下の行を修正します(11.0
から14.0
に変更しました)。
platform :ios, '14.0'
修正できたら、以下のコマンドを実行します。
$ bundle exec pod install
Podfile.lockがあるので、Podsライブラリ群は特にアップデートなどされません。上記コマンドによりPodfile.lockのチェックサムなどが更新されます。
ここまでできたら、アプリを実行してみます。問題なくアプリが起動したので、コミットして次に進みます。
Podsライブラリの最新化
多少手間がかかったのはPodsライブラリの最新化です。
ここはやり方が色々あると思いますが、私はまずPodfile内でバージョン指定しているものを全て削除し、以下のコマンドを実行してライブラリを最新化しました。
$ bundle exec pod repo update # CocoaPodsのリポジトリ情報を更新する $ bundle exec pod deintegrate # XcodeプロジェクトからCocoaPods関連の情報を削除、Podsディレクトリも削除される $ rm -f Podfile.lock $ bundle exec pod install
上記コマンドを実行することで、まっさらな状態から最新のライブラリをインストールし、Xcodeプロジェクトを再構成してくれます。
このタイミングでビルドしたら、さすがにビルドエラーが出ました。
少しずつビルドエラーに対処していく
全てのビルドエラーに一気に対応していくのは結構大変なので、少しずつ対応していきます。
私の場合、Firebase SDK周りのエラーが多そうだったので、Firebase関連のライブラリのバージョンだけ一旦元に戻しました。
変更前のPodfile.lockを見ると、使用しているバージョンがわかります。
Podfileで以下4つのライブラリを指定していたので、この4つのライブラリのバージョンを確認します。
- Firebase/Core
- Firebase/Auth
- Firebase/Firestore
- Firebase/Storage
Podfile.lockを見ると、全て5.20.1
が使用されていることがわかります。
Podfileで以下のように指定し、先程のコマンドでもう一度Xcodeプロジェクトを再構成します。
pod 'Firebase/Core', '5.20.1' pod 'Firebase/Auth', '5.20.1' pod 'Firebase/Firestore', '5.20.1' pod 'Firebase/Storage', '5.20.1'
これでFirebase関連のビルドエラーは出なくなるので、その他のエラーを解消します。
エラーが解消できたら、Podfileからバージョンを削除し、再度Xcodeプロジェクトを再構成し、Firebase関連のビルドエラーを解消します。
ビルドエラーを全て解消し、アプリが起動するようになったら、コミットして次に進みます。
Swiftバージョンの最新化
実はSwiftバージョンの最新化という手順は実際にはありませんw
今更知ったことなのですが、SwiftのバージョンはXcodeのバージョンによって決まるので、例えばXcode12.5でビルドするとSwift5.4でビルドすることになります。
以下のコマンドを実行すると、Swiftのバージョンを確認することができます。
$ swift -version Apple Swift version 5.4 (swiftlang-1205.0.26.9 clang-1205.0.19.55) Target: x86_64-apple-darwin20.3.0
Build SettingsでSwiftのバージョンを見ると5.0
になっているので5.0
でビルドされるのかと思っていたのですが、違うんですね。ここの指定は特に変更せず5.0
のままにしています。
まとめ
iOSプロジェクトのもろもろを最新化する手順についてご紹介しました。
2年ほったらかしにしてたのでどうなるんだろうと不安に思っていましたが、やってみると意外とすんなり最新化することができました。
iOSアプリの開発環境もかなり枯れてきているということなのでしょう。
Apple、ライブラリ開発者のみなさまに感謝感謝です!