アプリを更新してiOS13に対応させよう

のえる のえる
2019.09.20

アプリ開発において、OSのバージョンアップ対応は必須の作業です。

 

そもそも改修の必要性があるかを確認するところから始まり、バージョンアップの対応を行うことになると思います。

 

そこで、今回は iOS13 へのバージョンアップ対応の内容を公開したいと思います。

LaunchScreenの必須化対応

iOS13 では LaunchImage が非推奨となりました。
そのため、アプリの起動画面に Assets.xcassets の LaunchImage を使用している場合は LaunchScreen への変更を余儀なくされます。

 

この対応としては、大きな画像を正方形にして ImageSet に入れ LaunchScreen.storyboard の ImageView に設定することで対応できます。
この時 ContentMode を ScaleAspectFit にするといい感じになると思います。

 

注意

Assets.xcassets の LaunchImage は削除し、プロジェクトの 「Asset Catalog Launch Image Set Name」 は空文字にしましょう。

ダークモード対応の必須化

iOS13 では、全てのアプリで原則ダークモードが対応されているとデフォルトで判定されます。
そのため、デバイスでダークモードをONにしたとき、何も対応しない場合は外観が思いっきり変更されてしまう事になります。

 

これは Info.plist に UIUserInterfaceStyle というキーで Light を指定することで、アプリ内では常にライトモード扱いとなり回避可能です。

 

しかし、公式ドキュメントに下記のような記述があります。

Important
Supporting Dark Mode is strongly encouraged. Use the UIUserInterfaceStyle key to opt out only temporarily while you work on improvements to your app’s Dark Mode support.

 

Choosing a Specific Interface Style for Your iOS App

Googleの翻訳によると

ダークモードのサポートを強くお勧めします。
UIUserInterfaceStyleキーを使用して、アプリのダークモードサポートの改善作業中に一時的にのみオプトアウトします。

ということです。

 

恒久的な対応を行うには、下記サイト様でご紹介されている方法が良いと思います。

iOS13の外観モード(ダークモード)に対応する方法

 

https://soranoba.net/programming/ios-dark-mode

 

また iOS13 の DynamicColor 対応は下記のようなメソッドを作ると良いと思います。

 

 

さらに UISegmentedControl の色も tintColor では設定できなくなっています。
この問題は下記のような感じにするとOSの特色も残したまま、カラー設定を維持できます。

 

 

ただし、アプリ起動中に外観モードを変更した時 DynamicColor を指定していない場合は変わらないです。
その時は下記のメソッドを ViewController で override して色を指定することで対応することも可能です。

 

PresentViewControllerの表示変更

iOS13 から、画面を呼び出す self.present 命令の初期表示が変更され、下の画面が表示されるようになりました。
また、この表示の場合、呼び出した画面を下にスワイプすると ViewController を終了させることができます。

 

そのため、時間で表示する場合や1回しか表示しない ViewController から別の ViewController を呼び出した場合、戻ってきても何も発生しないという状態になってしまいます。

 

この対応については プログラムで対応する方法 と StoryBoardで対応する方法 の2種類があります。

プログラムで対応する方法

ViewController の modalPresentationStyle.fullScreen を設定することで対応できます。

StoryBoardで対応する方法

ViewController の Presentation を Full Screen にすることで対応できます。



UIWebViewの廃止

UIWebView は、随分前から Deprecated となっていましたが、とうとう WKWebView に移行しなければならなくなりました。
というもの、iOS13 でいきなり使えなくなることはありませんが、将来的に消えることが明示されています。

 

しかし、UIWebViewを使用したままアプリ更新の申請を行うと ITMS-90809 というエラーコード付きのメールが送られてくるようです。

 

審査に出したiOSアプリが ITMS-90809 としてAppleから問題を指摘される話

 

https://qiita.com/YutoMizutani/items/2b5185c84c31edfdc2d4

Push通知システムの変更

あまり情報が普及していませんが、Push通知にも更新がありました。
具体的には下記のような変更があります。

 

  • プッシュトークン取得の変更
  • APNS(Apple Push Notification Service)APIヘッダーに新しい属性が必要
  • バックグラウンド通知のためにAPNS優先度を5に設定する必要がある
  • Push APIのTLS v1のサポートを終了

 

詳細は下記の記事から確認出来ますが、対応しないと通知が届かないことになりますので気をつけましょう。

iOS 13 and Xcode 11 Changes That Affect Push Notifications

 

https://onesignal.com/blog/ios-13-introduces-4-breaking-changes-to-notifications/

iOS 13 プッシュ通知ヘッダー必須問題(未解決)とNSDataのdescriptionの話

 

https://blog.nkzn.info/entry/2019/08/20/175517

さいごに

今回の iOS13 の対応は、比較的大きめの対応が必要ですね。
個人的には PresentViewControllerの表示変更ダークモード対応の必須化 が大きく影響しました。

 

みなさんも iOS13 にしっかり対応して、素晴らしいアプリを提供していきましょう。

スポンサーリンク

POPULAR

のえる

のえる

Full-stack Developer