質問: 以下の項目を色々調べてみました。しかし、やりたいことを実現できるようなものは見つかりませんでした。 * DispatchQueue + バックグラウンド実行はできたが、アプリのプロセスを消すと動かなくなった。 * UIBackgroundTaskIdentifier + バックグラウンド実行はできたが、アプリのプロセスを消すと動かなくなった。 * BackgroundExecution * キューイング お力をお貸しいただけると幸いです。よろしくお願いいたします。
回答: 短い回答は「iOSではそれはできない」です。 もう少し詳しく書くと以下の通りです。 > > 1. 数時間~数十日後に実行するタスクを登録したい > > > アプリ単独でそのようなバックグラウンドの予約処理を行う機能はiOSの一般アプリには許可されていません。 「サイレントプッシュ」と呼ばれるプッシュ通知(メッセージがなく付属データのみのプッシュ通知)を送ることで、受信した端末である程度の処理を実行させることができますが、これもPush通知を受信した時刻に必ず実行されることは保証されません。 特に時刻が重要ではなく、用途が最新データの取得などである場合は「バックグラウンドフェッチ」というバックグラウンド処理を使うことはできます。バックグラウンドフェッチは実行日時は指定できず、フェッチの最小間隔のみ指定でき、主にWi-Fi接続中や充電中などバッテリーの負担が軽くなるタイミングで実行されます。 > > 2. バックグラウンドだけではなく、アプリのプロセスを削除した状態(上にスワイプしてアプリを消す動作のこと)でも1.のタスクを設定した時間に自動で実行できるようにしたい。 > > > 「上にスワイプしてアプリを消す動作」はユーザーによる明示的なアプリ動作(バックグラウンド動作も含む)の拒否とみなされます。なので、前述の「サイレントプッシュ」や「バックグラウンドフェッチ」も明示的なプロセス終了を行った後では実行されない可能性が高くなります。