既存アプリのiOS13対応。楽勝かと思ったらアンドキュメントな罠が。。。
現在進行形な既存アプリのiOS13対応で、アンドキュメントな変更によりはまったところを、同じ状況な人のために残しておきます。
CoreBluetooth Peripheralの取れるタイミング
今までは、
_centralManager = [[CBCentralManager alloc] initWithDelegate:self queue:nil];
の後に、
[_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」が呼ばれないのです。フルスクリーンにしない人は気を付けましょう。
以上、後半は昼休み終わりかけてダレたので、スクショもコードもありませんが!