質問: 具体的には、 1日時を指定して 2バックグラウンドになり 3時間になるとアラームが鳴る 部分の仕組みです。 これは、ローカル通知でもできますが、ローカル通知では「30秒以上の音声ファイルを指定できない」「マナーモードでは音が鳴らない」などの点で、目覚ましアプリの機能とは異なります。 AVAudioPlayerでできると考えているのですが、通知機能を使わずに、指定した日時にバックグラウンドから音声ファイルを再生する方法がわかりません。 調べ方が悪いのか、根本的に考え方が間違っているのかもわからず、悩んでおります。 ご協力お願いいたします。
回答: ズバリ解決の回答ではないのですが、回答がつかないようなので参考となりそうな情報を入れておきます。 で検索してみると、いろいろ苦労していて、ベストアンサーにはならない例がたくさん出てきます。 よくあるのは、無音のバックグラウンド再生を続け時間になったら本来の再生に切り替えるということですが、以下のような問題があります。 * 無駄なバッテリー消費が発生する。 * 他の音楽アプリと競合してバックグラウンド再生が停止する可能性がある。例えば、アラームをセットしてから寝る前に音楽を聴いたら、アラームは停止してしまう。 * 本来のバックグラウンド再生の使用方法ではないため審査でリジェクトされる可能性がある。 また、リモートプッシュ通知のバックグラウンド機能を使うという案が書かれている記事もありましたが、通信が不安定で圏外となる環境では使えないし、このタイミングでプッシュ通知の通知音でなく、AVAudioPlayerで音楽を鳴らすというのが本当に可能なのかは検証が必要だと思います。(簡単に試してみましたが鳴りませんでした。AudioSessionをうまく設定すれば鳴るのかもしれませんが、そもそも圏外で使えないという欠陥があるのでそこまで検証していませんし、最終的にはやはりバックグラウンド機能の目的外使用ということで審査でリジェクトされる可能性も考えられます。) そもそも、iPhone標準のアラーム機能と全く同じ機能を作るだけなら、やはり「標準アプリと同じものを作っただけでアプリの存在意義がない」ということでやはり審査でリジェクトされる可能性があります。 例えば、 睡眠中の安眠のためにバックグラウンドでやさしい音楽を鳴らすとか、 睡眠状態を記録するためにバックグラウンドでモーションセンサーを動作させ続けるとか、 自分の寝言を録音するために睡眠中に録音を続けるとか、 所定の場所に近づいたことを検出するためにロケーションの変更を受け取るとか、 そういった、バックグラウンドで必要な機能をアプリで実現した上で、 そのついでにバックグラウンド動作の終了時にアラーム音楽を鳴らすこともできる ということであれば実装しやすく、Appleの審査も通りやすいと思います。 ついでに言うと、iOS標準のアラームアプリは、一般のアプリでは実現できない特別なOS内蔵アプリだと思います。アイコンの時計マークは実際の時刻を表すよう秒針がアニメーションしますし、アラームをセットしている間は、ステータスバーに時計マークが現れます。これらはいずれも一般のアプリでは実現できないものです。