Edited at

爆速でiOS13に対応するためにやったこと

個人開発アプリでiOS13対応をしたので、やったことや躓いたことをメモしておきます。

小規模アプリなのもあり、対応自体は1時間もかからず終わりました(macOS、Xcodeのアプデ含めても2時間くらい)。

これから対応される方のお役に立てば幸いです。

Anilog - アニメ記録はアニログ


事前準備


  • Xcodeを最新にしておく(Xcode 11 GM Seed)

  • macOSを最新にしておく(macOS Catalina 10.15 beta 8)

※2019/09/15時点の最新

※ダウンロードはこちらから:https://developer.apple.com/download/

※後述の通り、最新にしていなかったことが原因でハマったこともあったので、先に最新版を入れておくことをおすすめします。

※ macOSについては、Catalinaのbetaを既に入れている場合のみ。


追記(2019/09/17 08:00)

Xcode 11 GM seed 2が来ましたので、これから対応される方はそちらを利用してください。

Xcode 11 GM seedで、今回バグが発見されたnamed colorsを使っているアプリを提出済みの方については、Xcode 11 GM seed 2でビルドしたものを再提出する必要があるとのこと。

スクリーンショット 2019-09-17 7.54.40.png


やったこと、躓いたこと


クラッシュ修正

ビルドしようとしたら下記エラーでクラッシュしました。


Terminating app due to uncaught exception 'NSGenericException', reason: 'Access to UISearchBar's _searchField ivar is prohibited. This is an application bug'


下記のようにvalue(forKey:)を使っている箇所があったのですが、このアクセス方法が禁止になったようです。

let textField = searchBar.value(forKey: "_searchField") as! UITextField

textField.backgroundColor = .gray

下記記事を参考にsearchTextFieldプロパティを使うように変更したところ、ビルドが通るようになりました。

UISearchBarのプライベートなプロパティにアクセスするコードがiOS 13では禁止になったようです - Qiita


ダークモード対応

iOS13の目玉の一つでもあるダークモードですが、今すぐに対応するのは正直厳しいので、一旦ライトモード固定で逃げることにしました。

info.plistUser Interface StyleキーにLightを設定すれば完了

スクリーンショット 2019-09-15 23.26.32.png

ダークモード設定中でも本当にライトモードになっているのか、念のためシミュレーターで確認したい場合は、下記記事を参考に「設定アプリ」からDark AppearanceをONにしてください。

XCode11のシミュレーターでiOS13のダークモードを設定する方法 - Qiita

ちなみに、info.plistで誤ってlight(正しくはLight)を設定したままストアにアップロードしようとしてしまったのですが、下記エラーが出てできませんでした。皆さんはお間違いなく!

スクリーンショット 2019-09-15 22.52.44.png


モーダル表示の変更

UIViewControllermodalPresentationStyleのデフォルト値がFullScreenからAutomaticに変更されたことで、アプリ内のモーダル表示のスタイルが一部変わってしまっていました。

iOS12まで
iOS13


今回はiOS12までのスタイルに戻す形で修正をしたかったため、

Storyboardから該当のSegueを選択し、AttributesInspectorでPresentationFull Screenに変更しました

スクリーンショット 2019-09-15 16.24.23.png

参考:iOS 13時代のModal表示仕様と対応 - Qiita


タブバーの色がおかしい

本来は選択中のタブのみアイコンの色が付くはずなのですが、なぜか両方色がついていました。

スクリーンショット 2019-09-15 15.58.39.png

もともと入れていたXcode11 betaのバグらしく、Xcode 11 GM Seedを入れたら直りました

uitabbarcontroller - UITabBarItem icon not colored correctly for iOS 13 when a bar tint color is specified in Interface Builder in Xcode 11, beta 2 - Stack Overflow


Xcode 11 GM Seedでビルドできない


Distill failed for unknown reasons.

スクリーンショット 2019-09-15 17.13.10.png


というエラーが出てビルドが通らず。

下記記事にコメントがあるように、macOSを最新にしたらビルドが通りました。

Distill failed for unknown reasons (Xcode 11 be… |Apple Developer Forums

スクリーンショット 2019-09-15 17.21.48.png


追記(2019/09/18 01:00)

本記事の内容で審査をクリアし、無事リリースしました!