Edited at

iOS13対応をまとめてみた


前書き

対応が必要そうなものを探してまとめてみた。

正直身に降りかからないと細かい仕様までは分からないので、現状をまとめておいて判明次第追記していく。


今すぐ対応が必要


UISerchBarのvalue(forKey:)メソッドが廃止された

必須か: 必須

内容:UIserchBarでvalue(forKey:)を使用しているとアプリクラッシュします

参考:https://qiita.com/ktanaka117/items/1a30c4c6052cd8e1a0b7


Bluetooth利用にパーミッションが必須になった

必須か:必須

いつまでに対応すべきか:今すぐ

内容:位置情報等のパーミッション同様、設定しないまま機能を使おうとすると落ちる

参考:http://harumi.sakura.ne.jp/wordpress/2019/08/27/ios13%E3%81%8B%E3%82%89%E3%81%AEbluetooth%E3%83%91%E3%83%BC%E3%83%9F%E3%83%83%E3%82%B7%E3%83%A7%E3%83%B3/


UISearchDisplayControllerがdeprecatedから完全廃止になった

必須か:必須

内容:UISearchDisplayControllerを使用しているとアプリクラッシュする

参考:https://github.com/mapbox/mapbox-gl-native/issues/15559


Sign in with Apple

必須か:アプリによっては必須

いつまでに対応すべきか:新しいアプリは必須。既存アプリは2020年4月。

内容:サードパーティ製またはソーシャル(Facebook、Google、Twitter、LinkedIn、Amazon、WeChat)のログインサービスを使用している場合は、AppleIDでのサインイン対応必須。自社システムのみのログイン、もしくはそのサービス固有の機能を使う(Twitterならタイムライン取得が必要など)なら対応不要。

参考:https://developer.apple.com/app-store/review/guidelines/#sign-in-with-apple

https://qiita.com/_asa08_/items/4f6e383fc6c9d38046ed


VoIPプッシュの仕様が変わった

必須か:必須

いつまでに対応すべきか:新しいアプリは必須。既存アプリは2020年4月。

内容:VoIPプッシュの利用が着信のみになるらしい

参考:https://developer.apple.com/documentation/pushkit/responding_to_voip_notifications_from_pushkit?language=objc

https://qiita.com/sunskysoft/items/34665541d9bec438ee36


2020年4月以降は全てのアプリでiOS13対応、Xcode11でのビルドが必須

必須か:必須

いつまでに対応すべきか:新しいアプリは必須。既存アプリは2020年4月。

内容:題名の通り

参考:https://developer.apple.com/news/?id=09102019a&1568158483


今後必須になりそうなもの


ダークモード対応

必須か:準必須(いまのところ必須ではないが以後必須になる可能性が高い)

いつまでに対応すべきか:不明

参考:https://developer.apple.com/documentation/xcode/supporting_dark_mode_in_your_interface/choosing_a_specific_interface_style_for_your_ios_app?language=objc

https://qiita.com/p_on_ro/items/91e6659fda662fb2aac0

対応時の注意事項:https://qiita.com/tattn/items/c56b15ed8d1cea26a955


UIWebViewがiOS13以降deprecatedになった

必須か:準必須

いつまでに対応すべきか:不明

内容:ドキュメントがdeprecatedになっている。代替UIはWKWebView

参考:https://developer.apple.com/documentation/uikit/views_and_controls?language=objc


その他変更


遷移アニメーションの対応

必須か:オプション

いつまでに対応すべきか:必要に応じて

内容:遷移モードのデフォルト値が変更された。意図していない「戻る操作」が発生する可能性がある。

参考:https://qiita.com/yh_genephia/items/b82d4df36b4ef1fdcdd8


システムフォントが変更された

必須か:オプション

いつまでに対応すべきか:必要に応じて

内容:boldがiOS12以前より太くなった。ラベル等がはみ出す・見切れる可能性がある。

参考:https://qiita.com/a_t/items/484f7ad52e8c9fd18903


Realmが落ちることがある

必須か:オプション

いつまでに対応すべきか:必要に応じて

内容:iOS13のみエラーが発生することがあるとのこと。

参考:https://stackoverflow.com/questions/48810421/rlmexception-primary-key-property-serial-does-not-exist-on-object-book-mig


スクロールビューのインジケータの仕様が変わった

必須か:オプション

いつまでに対応すべきか:必要に応じて

内容:Could not cast value of type ‘_UIScrollViewScrollIndicator’

参考:https://qiita.com/MilanistaDev/items/8151dd2544b2eda9353b


連続してNavigationViewControllerを表示するとNAvigationBarの高さがおかしくなる

必須か:オプション

いつまでに対応すべきか:必要に応じて

内容:題名の通り

参考:https://qiita.com/duke105/items/9a751062ba15c6fb9511


Xcode11でプロジェクトを新規作成しターゲットをiOS12以前にするとエラーが盛りだくさん

必須か:必須

いつまでに対応すべきか:必要に応じて

内容:iOS13で登場したUIScene等が標準でつくられるため、古いターゲットを含めるとエラーになる

参考:Xcode11で作成したプロジェクトを古いOSに対応させる(とりあえず版)


デバイストークンの取得方法が変わった

必須か:オプション

いつまでに対応すべきか:必要に応じて

内容:通知等で使用するトークンのNSDataの中身が変わっている

参考:https://qiita.com/naofumi_okano/items/6c983959ec2b3a4c8af5