[iOS13] 既存アプリのiOS13対応でハマったこと(現在進行形)


既存アプリのiOS13対応。楽勝かと思ったらアンドキュメントな罠が。。。

現在進行形な既存アプリのiOS13対応で、アンドキュメントな変更によりはまったところを、同じ状況な人のために残しておきます。

CoreBluetooth Peripheralの取れるタイミング

今までは、

objective-c
_centralManager = [[CBCentralManager alloc] initWithDelegate:self queue:nil];

の後に、

objective-c
[_centralManager retrievePeripheralsWithIdentifiers:identifiers];

で取れたんですが、(いや、実際には、取れるとは限らないんですが)
iOS13になってからは、ちゃんと

- (void)centralManagerDidUpdateState:(CBCentralManager *)central;

のイベントが通ってからでないと、ペリフェラル一覧が取得できなくなりました。
いや、そもそも前からそう書くのが正解のはずなんですが、僕のところに回されてきたプロジェクトの元のコードが、、、げふん

参考 https://www.jenx.si/2019/10/02/changed-bluetooth-initialization-on-ios13/

Settings.bundle 同名グループはダメ

これも暗黙のルールだったんでしょうが、、、
[iOS13] Settings.bundleのグループ名が重複すると設定アプリの内容が正しく設定されない

画面横向き(Landscape)の時はステータスバーを表示できない。

当然、prefersStatusBarHidden をセットしたり、info.plistで設定したり、古い書き方のAppDelegateで設定したり、回転時に表示させようとしたり、色々やってるんですが、横向き時にステータスバーを表示させることができません。Appleのdeveloper forumなんかでも同様の報告がありますが、現状最新ベータ版でも直ってません。うーむ、、、

モーダル表示画面の親。viewWillApearが呼ばれない。

モーダルビューの表示方法のデフォルトが変更された件で、みなさん「フルスクリーンに設定して表示の変更を回避」ってやってると思うので気がついてないと思いますが、裏に画面が見えてるということは、モーダル画面を閉じた時に親の「ViewWillApear」が呼ばれないのです。フルスクリーンにしない人は気を付けましょう。

以上、後半は昼休み終わりかけてダレたので、スクショもコードもありませんが!