前提
iPhoneアプリをタスクキルした状態でBLEのイベントを発生させたいです。
下記リンクを参考にしました。
アプリをバックグラウンドにしただけならiPhoneがBeacon範囲内に入れば通知は発行できました。
しかしタスクキルしたら通知は発行できませんでした。
古い記事なので今はもうできないのかもしれないです。
https://dev.classmethod.jp/articles/ios-7-1-ibeacon/
別途、独自に作ったアプリがあります。
そちらでもユーザーによるタスクキルをしたらBLEのイベントが発生しないです。
しかしOSによるタスクキルが発生した場合はOSがバックグラウンド処理を引き継いでくれるためバックグラウンドにアプリがない状態でもBLEのイベントを発生できます。
OSによるタスクキルとはメモリがいっぱいな時にメモリを確保するためにOSがバックグラウンドのアプリをタスクキルすることです。
Xcodeを使ってアプリを停止させれば意図的にOSによるタスクキルができます。
実現したいこと
・アプリをタスクキルした状態でBLEのイベントを発生させたい
・OSによるタスクキルをユーザーの手で発生させたい
発生している問題・エラーメッセージ
タスクキルしてしまうとBLEのイベントが発生しなくなる。
そもそもAppleはサードパーティ製のアプリが勝手なバックグラウンド処理を行うとことをセキュリティ的に嫌っているため、リモート通知のような一部例外はあるものの基本的にできないようにしてあるのかもしれない。
該当のソースコード
下記コードはシステムがタスクキルした時に呼ばれるBLEのイベントです。
swift
1// OSがアプリをキルしてバックグラウンドにも出てこない状態にした時に呼ばれる2 func centralManager(_ central: CBCentralManager, willRestoreState dict: [String: Any]) {3 4 _=self.startScan() // スキャンを再開する5}
試したこと
ネットでXcodeを使わずに意図的にOSのタスクキルを発生させる方法を調べたものの見つからなかった。
補足情報(FW/ツールのバージョンなど)
Xcode14.1
iPhone11
iOS16.0.3
MacOS Monterey12.6
Swift5
0 コメント