ブレイブソフトを代表する自社事業アプリ「ボケて」で遅ればせながらも iOS13 対応を行ったので、実際にやったことをご紹介したいと思います。

ダークモード無効化

iOS13 対応と聞いて真っ先に思いつくのがこのダークモードかもしれません。
まだダークモード版の UI ができていなかったので、ひとまず無効化することにしました。

Info.plist に下記を追加することでダークモードを無効化できます。

<key>UIUserInterfaceStyle</key>
<string>Light</string>

Firebase 関連の SDK をアップデート

初めてXcode11でビルド後実行した際に、起動直後にクラッシュするという問題が発生してしまいました。
ログを確認すると、Firebaseの初期化もろもろの処理でエラーになっているようでした。

FirebaseのSDKは当然iOS13対応版がリリースされているだろうと、難しいことを考えずに pod update Firebase を行ったところ、無事解決しました。

画面のレイアウト崩れ

ViewController を入れ子にした際のレイアウト確定タイミングに変更があったのかわからないですが、addChild で追加した ViewController が画面サイズいっぱいまで広がらなくなってしまいました。

レイアウト後に呼び出される viewDidLayoutSubviews 内にて明示的に frame を設定することで対応しました。

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    (略)
    hogeViewController.view.frame = self.view.bounds
}

UICollectionViewでのクラッシュ

具体的にはデータを更新するタイミングで cellForItemAt にて “index out of range” が発生しました。

正式な情報を得ることはできなかったのですが、どうやら UICollectionViewDataSource のメソッドが呼び出されるタイミングに変更があったようです。
(iOS13 だと UICollectionView の更新時にアニメーションが入っていたので、それの影響かもしれません)

暫定対策でリストからデータを取得する前に、index がリストの範囲内かをチェックするようにしました。
データの全更新に reloadData を使っているのですが、全更新の場合も insertItems などを使うべき…?(調査中)。

 

以上になります。
今回の iOS13 はこれまでと比較しても、修正箇所が多かったように思えます。
アップデートが怖くて  Xcode10 でビルドすることもあるかと思いますが、いずれ対応に迫られることになるので、早め早めの対応を心がけていきたいですね。