Background Fetchの実行間隔を取得してみた

とあるアプリでBackground Fetchの導入を検討した際に、実際の実行間隔が気になったので、今さらですが、サンプルのアプリをつくって調べてみました。

既に言われ尽くしていますが、改めてBackground Fetchという機能について特徴を挙げておくと

- **定期実行ではない**  
あくまで実行間隔はOSがよしなに決める
- **アプリが終了してしまうと動作しない**  
アプリはバックグランド状態にある(終了ではなく停止中の状態)
- **実行時間が短い**  
別タスクが動作するわけではなく、アプリが短時間動くだけ(30秒)

iOS7リリース時に、iOSでもAndroidのようなことができるのか？という期待が大きく裏切られたのは、皆さんご承知の通りです。


##サンプルアプリ

Background Fetchが登場してから大分たっていますので、ググれば色々な情報が出てきます。なので既に同じようなことをやっている方がいました。

[[iPhone] Background Fetch バックグランド処理](https://iphone-app-tec.com/ios/background-fetch.html)

こちらのブログのコードを ~~丸パクリ~~ 参考にして、Xcode8+Swift3環境にて動くアプリを実機にインストールして、しばらく動かしてみました。


##結果

<img width="414" alt="screen.png" src="https://qiita-image-store.s3.amazonaws.com/0/15905/994aa907-8816-bc1c-ccff-70866d0e316a.png">

```
-----
2016/12/07 14:14:58
2016/12/07 14:25:13
2016/12/07 14:35:32
2016/12/07 15:33:38
2016/12/07 16:16:00
2016/12/07 16:23:32
2016/12/07 16:38:42
2016/12/07 17:00:07
2016/12/07 17:20:42
2016/12/07 17:37:27
2016/12/07 17:52:54
2016/12/07 18:50:30
2016/12/07 19:04:23
2016/12/07 19:20:35
2016/12/08 11:49:34
2016/12/08 16:03:36
2016/12/08 16:16:18
2016/12/08 16:16:18
2016/12/08 16:34:59
2016/12/08 16:44:38
2016/12/08 17:07:59
2016/12/08 17:51:40
2016/12/08 18:05:37
2016/12/08 18:20:56
2016/12/08 18:31:35
2016/12/08 18:48:59
2016/12/08 18:57:38
2016/12/08 19:41:24
2016/12/08 19:56:12
2016/12/08 20:04:23
2016/12/08 20:11:37
2016/12/09 07:56:59
2016/12/09 08:07:55
2016/12/09 08:20:27
2016/12/09 08:38:27
2016/12/09 12:14:02
2016/12/09 12:23:21
2016/12/09 12:41:01
2016/12/09 12:48:58
2016/12/09 12:56:49
2016/12/09 14:49:27
2016/12/09 15:04:30
2016/12/09 15:20:35
2016/12/09 15:39:07
2016/12/09 16:00:06
2016/12/09 16:11:06
2016/12/09 17:14:05
2016/12/09 17:24:56
2016/12/09 17:37:22
2016/12/09 17:52:36
2016/12/09 18:05:39
2016/12/09 18:12:44
2016/12/09 18:20:26
2016/12/09 19:49:11
2016/12/09 20:00:08
2016/12/09 23:08:29
2016/12/09 23:20:30
2016/12/09 23:26:14
2016/12/09 23:43:45
2016/12/09 23:55:26
2016/12/10 00:18:38
2016/12/10 13:05:37
2016/12/11 02:58:01
2016/12/11 12:27:20
2016/12/11 12:44:42
2016/12/11 12:58:19
2016/12/11 13:15:23
2016/12/11 13:33:23
2016/12/11 13:46:43
2016/12/11 13:55:49
2016/12/11 14:15:20
2016/12/11 14:33:17
2016/12/11 14:44:40
2016/12/11 14:56:41
2016/12/11 20:16:41
2016/12/11 20:16:41
2016/12/11 20:29:23
2016/12/11 20:48:41
2016/12/11 20:58:00
2016/12/11 21:15:30
2016/12/11 21:24:13
2016/12/11 21:42:47
2016/12/11 21:54:00
2016/12/11 22:08:56
2016/12/11 22:26:18
2016/12/11 22:36:02
2016/12/11 22:56:24
2016/12/11 23:13:59
2016/12/11 23:29:34
2016/12/11 23:48:10
2016/12/12 00:06:03
2016/12/12 00:18:05
2016/12/12 00:35:10
2016/12/12 00:52:26
2016/12/12 01:05:31
2016/12/12 01:23:18
2016/12/12 01:34:58
2016/12/12 01:52:26
2016/12/12 02:03:44
2016/12/12 02:21:06
2016/12/12 02:38:37
2016/12/12 02:52:50
2016/12/12 03:11:21
2016/12/12 03:29:59
2016/12/12 03:47:17
2016/12/12 04:04:41
2016/12/12 04:20:43
2016/12/12 04:38:23
2016/12/12 04:59:56
2016/12/12 05:08:14
2016/12/12 05:26:56
2016/12/12 05:38:25
2016/12/12 05:55:55
2016/12/12 06:14:00
2016/12/12 06:31:42
2016/12/12 06:43:47
2016/12/12 07:01:46
2016/12/12 07:20:30
2016/12/12 07:31:50
2016/12/12 07:49:04
2016/12/12 08:02:01
2016/12/12 08:20:29
2016/12/12 08:38:11
2016/12/12 08:50:41
2016/12/12 09:00:08
2016/12/12 09:09:15
2016/12/12 10:28:52
2016/12/12 10:44:37
2016/12/12 10:52:17
2016/12/12 11:04:24
2016/12/12 11:11:54
2016/12/12 11:20:47
2016/12/12 11:29:16
2016/12/12 11:38:38
2016/12/12 11:57:19
2016/12/12 12:05:20
2016/12/12 12:20:25
2016/12/12 12:33:12
2016/12/12 12:44:01
2016/12/12 13:00:06
2016/12/12 13:08:41
2016/12/12 14:19:05
2016/12/12 14:33:32
2016/12/12 14:47:51
2016/12/12 15:04:18
2016/12/12 15:31:38
2016/12/12 15:42:28
2016/12/12 15:42:29
2016/12/12 16:03:46
2016/12/12 16:11:32
2016/12/12 16:29:45
2016/12/12 16:44:41
2016/12/12 17:20:34
2016/12/12 17:37:43
2016/12/12 17:52:31
2016/12/12 18:00:05
2016/12/12 18:21:02
2016/12/12 18:37:06
2016/12/12 18:47:07
2016/12/12 19:00:06
2016/12/12 19:22:11
2016/12/12 19:39:41
2016/12/12 20:48:14
2016/12/12 22:33:51
2016/12/12 22:51:58
2016/12/12 23:10:26
2016/12/12 23:33:02
2016/12/12 23:50:05
2016/12/13 00:03:13
2016/12/13 00:20:23
2016/12/13 00:37:42
2016/12/13 00:55:16
2016/12/13 01:12:30
2016/12/13 01:26:34
2016/12/13 01:35:09
2016/12/13 01:50:11
2016/12/13 02:10:47
2016/12/13 02:29:12
2016/12/13 02:40:58
2016/12/13 02:58:56
2016/12/13 03:10:58
2016/12/13 03:31:00
2016/12/13 03:49:59
2016/12/13 04:10:13
2016/12/13 04:46:10
2016/12/13 04:55:17
2016/12/13 05:14:51
2016/12/13 05:32:51
2016/12/13 05:40:06
2016/12/13 05:57:11
2016/12/13 06:16:10
2016/12/13 06:27:19
2016/12/13 06:44:51
2016/12/13 07:02:51
2016/12/13 07:19:55
2016/12/13 07:31:26
2016/12/13 07:50:19
2016/12/13 08:09:48
2016/12/13 08:27:14
2016/12/13 08:44:34
2016/12/13 09:03:48
2016/12/13 09:17:47
2016/12/13 09:27:51
2016/12/13 09:39:11
2016/12/13 09:47:41
2016/12/13 10:14:55
2016/12/13 10:26:56
2016/12/13 10:35:45
2016/12/13 10:44:41
2016/12/13 11:46:30
2016/12/13 11:57:33
2016/12/13 13:58:24
2016/12/13 14:10:14
2016/12/13 14:17:49
2016/12/13 14:35:30
2016/12/13 14:47:20
2016/12/13 14:55:39
2016/12/13 15:02:51
2016/12/13 15:11:09
2016/12/13 15:28:24
2016/12/13 15:45:53
2016/12/13 16:14:02
2016/12/13 16:27:32
2016/12/13 16:34:47
2016/12/13 16:56:05
2016/12/13 17:23:52
2016/12/13 17:37:22
2016/12/13 17:52:24
2016/12/13 18:12:18
2016/12/13 18:20:50
2016/12/13 18:37:04
2016/12/13 18:45:53
2016/12/13 19:05:07
2016/12/13 19:18:22
2016/12/13 19:20:30
2016/12/13 19:35:08
2016/12/13 19:42:55
2016/12/13 19:51:37
2016/12/13 19:59:58
2016/12/13 20:20:36
2016/12/13 20:38:38
2016/12/13 20:46:17
2016/12/13 22:24:04
2016/12/13 22:46:40
2016/12/13 23:05:07
2016/12/13 23:21:53
2016/12/13 23:31:47
2016/12/13 23:58:35
2016/12/14 00:24:57
2016/12/14 00:33:11
2016/12/14 00:50:32
2016/12/14 01:03:18
2016/12/14 10:04:31
2016/12/14 11:19:31
2016/12/14 11:26:31
2016/12/14 11:34:04
2016/12/14 11:48:07
2016/12/14 11:55:06
2016/12/14 12:02:07
2016/12/14 17:54:01
2016/12/14 18:07:05
2016/12/14 18:20:35
2016/12/14 18:35:03
2016/12/14 19:00:07
2016/12/14 19:17:11
2016/12/14 19:44:10
2016/12/14 19:58:57
2016/12/14 20:16:24
2016/12/14 20:25:22
2016/12/14 20:33:01
2016/12/14 20:41:19
2016/12/14 20:50:58
2016/12/14 21:01:25
2016/12/14 22:08:25
2016/12/14 22:16:51
2016/12/14 23:17:01
2016/12/14 23:27:31
2016/12/14 23:37:04
2016/12/14 23:48:12
2016/12/14 23:57:21
2016/12/15 00:14:26
2016/12/15 00:25:18
2016/12/15 00:37:11
2016/12/15 00:48:28
2016/12/15 00:56:35
2016/12/15 01:14:27
2016/12/15 01:29:48
2016/12/15 01:49:03
2016/12/15 02:06:49
2016/12/15 02:17:07
2016/12/15 02:29:38
2016/12/15 02:41:05
2016/12/15 02:55:31
2016/12/15 03:12:44
2016/12/15 03:29:54
2016/12/15 03:40:59
2016/12/15 04:03:04
2016/12/15 04:20:32
2016/12/15 04:38:08
2016/12/15 04:56:56
2016/12/15 05:09:09
2016/12/15 05:27:31
2016/12/15 05:45:28
2016/12/15 06:02:37
2016/12/15 06:12:32
2016/12/15 06:32:50
2016/12/15 06:53:23
2016/12/15 07:12:02
2016/12/15 07:29:42
2016/12/15 07:47:31
2016/12/15 08:00:40
2016/12/15 08:18:33
2016/12/15 08:33:43
2016/12/15 08:51:02
2016/12/15 09:05:38
2016/12/15 09:14:23
2016/12/15 09:30:47
2016/12/15 09:47:30
2016/12/15 09:58:03
2016/12/15 10:17:17
2016/12/15 10:25:49
2016/12/15 14:32:28
2016/12/15 14:39:48
2016/12/15 15:50:38
2016/12/15 16:00:05
2016/12/15 16:18:24
2016/12/15 16:37:21
2016/12/15 16:45:55
2016/12/15 17:03:43
2016/12/15 17:13:51
2016/12/15 17:44:03
2016/12/15 18:04:10
2016/12/15 18:12:03
2016/12/15 18:20:34
2016/12/15 18:36:44
2016/12/15 19:00:06
2016/12/15 19:07:57
2016/12/15 19:21:02
2016/12/15 19:35:54
2016/12/15 19:48:48
2016/12/15 20:00:05
2016/12/15 20:17:54
2016/12/15 20:28:56
2016/12/15 22:50:04
2016/12/15 23:07:43
2016/12/15 23:15:04
2016/12/15 23:34:48
2016/12/15 23:41:57
2016/12/15 23:52:10
```

アプリが終了してしまうとBackground Fetchが動かなくなるので、適度にアプリをフォアグランドに持ってくるように(アプリを使ってる風に)したりしました。

また最初に実行されるまで、少々時間がかかるようで、最初の実行記録はインストールから数時間たっています。


##考察

このサンプルアプリでは、常に成功(UIBackgroundFetchResult.NewData)を返しているので、実行間隔は短めに調整されていったものと考えられます。

UIBackgroundFetchResult.NewDataが返される間隔が長くなれば、もっと長めに調整されるのでしょう。

1時間に1回以上動作してくれそうなので、結構使えそうな場面はありそうです。