こんばんは,ぽちです.
連載するかどうかはわかんないけど,Surechの技術情報@バックグラウンド起動編です.
1. info.plistへの追加
UIDeviceCapability(Required device capabilities) を追加
UIDeviceCapabilityのItem0にlocation-servicesを追加
これは位置情報を常時取得するために,location-serviceが使える端末に限定するもの.
UIBackgroundModes(Required backgound modes)を追加
UIBackgroundModesのItem0にlocation(App registers for location updates)を追加
これは,location情報取得のためにバックグラウンド起動させるもの.
UIBackgroundModesにlocationを登録すると,アプリケーションが標準ロケーションサービスを使うために常時起動になります.
もちろんUIBackgroundModesにlocationを登録しているにもかかわらず,位置情報を取得する処理が含まれていないと,AppleからRejectされます.たぶん.
Surechでは,常時起動ですれ違いを実現するために上記のことを行っています.
2. 実装
Info.plistの追加が終わったあとは,CLLocationManagerを使い位置情報を取得するようにすればOK.
ここで気をつけなければならないのは,標準ロケーションサービスを使わなければならないということ.
iOS4以降では標準ロケーションサービスの他にSignificantというバッテリーライフに優しいAPIがある.これは,Locationの移動が発生した時だけ通知してくれるAPI.
CLLocationManagerのstartMonitoringSignificantLocationChanges
のことですね.
しかし,常時起動をしたい場合はSignificantは使ってはいけない.
おそらくSignificantを使ってUIBackgroundModesにlocationを登録しているとRejectされるはず.
なので,
CLLocationManagerのstartUpdatingLocation
を使う必要があります.
詳しくはDocumentを読め.
さて,これで常時起動の仕組みは完成まで行けると思います.
3. AppStoreの説明文
最後の難関は,App Storeに登録する説明文です.
App Storeの説明文に常時起動による注意書きを書かないといけない.
書かなくてもいいが,書かないとアプリの公開が1週間遅れて結局書く運命になるだけだ.
↓をコピペして説明文の最後に入れておくといいと思います.
"Continued use of GPS running in the background can dramatically decrease battery life."
あと,親切心に自分のiPhoneだと何時間で何%減ったよみたいなことを書いてたんだけど,正確じゃないし不適切だからやめろってFeedbackを受けたからそういうのも書かないほうがいいよ!
こんな感じで常時起動のすれ違いアプリは常時起動になっています.