BambooHero

iOSアプリ開発と株式投資をメインに色々書きます

2年放置してた個人アプリの開発を再開!iOSプロジェクトのもろもろ(Xcode、ライブラリなど)を最新化する

仕事が忙しいことを理由に個人アプリをずっとアップデートできず、気がついたら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でガンガン開発していきたい)。

f:id:bamboohero:20210508180755p:plain

以前記事に書いたのですが、Deployment Targetはプロジェクトとターゲットの両方の値を変更しないと意図しない挙動になるので要注意です

bamboo-hero.com

ちなみに、InfoタブでDeployment Targetを指定しようとすると、iOS14.0が選択肢に出てきません。

f:id:bamboohero:20210508170403p:plain

単なるバグなのでは?という意見もありましたが、理由はよくわかってません。
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が使用されていることがわかります。

f:id:bamboohero:20210508174425p:plain

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のままにしています。

f:id:bamboohero:20210508175413p:plain

まとめ

iOSプロジェクトのもろもろを最新化する手順についてご紹介しました。

2年ほったらかしにしてたのでどうなるんだろうと不安に思っていましたが、やってみると意外とすんなり最新化することができました。

iOSアプリの開発環境もかなり枯れてきているということなのでしょう。

Apple、ライブラリ開発者のみなさまに感謝感謝です!