2011/09/29

Weekly Alarm を作ってみた

 
最近AppStoreに公開までたどり着いたアプリで、Weekly Alarmというアラームアプリがあります。僕はこれからiPhoneのアプリを仕事にならないものか本気でトライしていくつもりなので、その第一弾として作ったものです。

僕のトライはシンプルです。「まずはAppStoreにアプリを公開する練習をしたい。だから、数日で完成させられるようなシンプルなネタで何個か作ろう」と。
そこで、いくつかあった案のなかから、「音楽で目覚めるアラーム」を選びました。

お盆休みにスタート。最初は、1日で完成させるつもりで始めました。長引いても2日で終わるだろう、と。

しかし、実際開発を進めるとこれが、大変。。。



なんとiPhoneのアプリでは、マルチタスクに対応したというアナウンスとは裏腹に、あんまりいろんな処理がバックグラウンドでできないのです。

許されているのは、以下の4つ。

audio : バックグラウンドで音楽を再生するアプリのための機能
なにかしらサウンドを再生している間は、バックグラウンドで生き続けられます。
しかし、音を止めたら、バックグラウンドの処理も止まり、再開できるのはアプリがフォアグラウンドに戻ったときです。
info.plistで、Required background modesというのにaudioを加える必要あり。

location : 位置情報を扱うアプリのための機能
位置情報を扱うライブラリ、CoreLocationを使うときは、位置がある程度変化したらイベントをもらうことができます。そのイベントをバックグラウンドに移った後ももらえるという機能。一定時間に割り込んだりはしません。移動しないと割り込み発生しません。
info.plistで、Required background modesにlocationを加える必要あり。

voip : VoIPのアプリのための機能
Skype等の音声通話アプリ用の機能です。サーバーからのソケット通信をバックグラウンド時も受信できるということと、一定時間の割り込みを指定してその間隔で30秒間の処理時間をおもらえるという機能。一定時間というのは600秒以上の間隔になります。
info.plistで、Required background modesにvoipを加える必要あり。

Completing a Finite-Length Task in the Background
これは、最大600秒のバックグラウンド動作時間延長機能です。
通常、アプリがバックグラウンドに移動すると、処理はできません。
しかし、この機能を使うと、バックグラウンドに移動してから、最大600秒間の猶予が与えられます。たとえば、ネットワークからなにかダウンロードするような処理をしているときにアプリがバックグラウンドに移動した場合、ダウンロードを継続させ、最大600秒までは、自由に処理ができるというものです。
この機能は、plistに登録せずとも使えます。

あとは、もう一つAppleのサイトで紹介されているものに、以下の機能もあります。


Scheduling the Delivery of Local Notifications
こちらの機能は、iOS3までは、サーバーからのプッシュでのみ可能だった通知サービスをローカルから呼び出せる機能です。アプリケーションが処理できているうちに、このLocal Notificationを予約しておくと、その時刻にポップアップを表示できます。このポップアップ機能に、カスタム音(最大30秒)を設定したり、アプリにくっつくバッジの数字を変更することも出来ます。


ついつい長い説明になりましたが、マルチタスク関連の機能はこれだけです。
今回作りたい音楽を再生するアラームアプリを実現するときに、バックグラウンドで正確に動作させるためには、LocalNotificationでは実現できません。その他の機能は、使っていいのか微妙なところだし。。。

という、いきなり意外なところでつまずくネタを選んでしまったのでした。。。

気が向いたら続き書きます。

0 件のコメント:

コメントを投稿