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

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

Swift 3.0.2
Xcode 8.2.1

 

Background 処理

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

Background Modes 設定

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

 

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

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

実際は自動的に設定されています。Info.plistを確認すると
 

 
「Required Background Modes」に「App downloads content from the network」
というのができています。コードで見ると、key: UIBackgroundModes, array: fetch となっています。
 
Info.plist

 

AppDelegate 設定

 
setMinimumBackgroundFetchInterval() に
UIApplicationBackgroundFetchIntervalMinimum
を設定します
 
minimumと言っても、あくまでOSの裁量での話です
 

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

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

AppDelegate.swift

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

ViewController.swift

 
simulatorでテストするときは「Product」「Scheme」「Edit Scheme」から
「Background Fetch」にチェックをいれて始めます


実機での確認では必要ないですが、ある程度アプリを使ってシステムにのpriorityをあげてやらないと何時間もfetchされないことになります。

つまり、ユーザーの実際の環境でアプリがで定期的にfetchされるかは千差万別となるというこでしょう。
結果はページの最初にあるような時刻でbackground fetchが起きていました。

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


ページのトップへ戻る

シェアする

  • このエントリーをはてなブックマークに追加

フォローする