[iPhone] Background Fetch バックグランド処理

iOSでのバックグランド処理は難しい面がありますが、Background Fetchというのががあります。fetchが起動する度にその時間を記録して、どの程度の間隔で実行されるか試しました。

bkfetch_1

Swift 2.1
Xcode 7.1
iOS 9.1

 

sponsored link

Background 処理

 
backgroundと言いながらも、定期的に10分に1回というような設定はできません、バッテリー消費を抑えるためOSにより制限されています。
(いろいろ面倒なこと、例えばAPNsを使ったりすれば可能でしょうけれども)
 

Background Modes 設定

 
「TARGET」->「Capabilities」->「Background Modes」
を「ON」にして
「Background fetch」にチェックします

スクリーンショット 2015-10-28 14.49.53

下にこのようなコメントが出てきます

Add the “Required Background Modes” key to your info plist file

実際は自動的に設定されています
確認すると

Info.plist
スクリーンショット 2015-10-28 15.19.05

「Required Background Modes」に
「App downloads content from the network」
というのができています
 

AppDelegate 設定

 
setMinimumBackgroundFetchInterval() に
UIApplicationBackgroundFetchIntervalMinimum
を設定します

minimumと言っても、あくまでOSの裁量での話です

次に、バックグランド処理が発生した時のハンドラー処理です

これをもとに、fetchした時間をNSUserDefaultsで保存してみます

AppDelegate.swift

NSUserDefaultsで保存した記録を表示
Labelは毎回改行するので10linesに設定

ViewController.swift

結果は
ページの最初にあるような時刻で
background fetchが起きていました

06:52:50 から始まって
早くて10分の間隔
2時間全く処理が起きなかったこともあります
因みに、この時間は電車の中でYuTubeを見ていたりしました ;-p