Help us understand the problem. What is going on with this article?

(iOS)Background fetchの実装方法

More than 1 year has passed since last update.

Background fetchとは

アプリを起動していなくても、OSの判断で適切だと思われるタイミングで、任意の処理をバックグランドで実行することができます。

手順1 Background fetchの有効化

Capabilities → Background Modes → Background fetchをオンにします。
スクリーンショット 2017-03-12 15.13.35.png

手順2 任意の処理を実行する間隔の指定

AppDelegate.swiftのdidFinishLaunchingWithOptionsに
application.setMinimumBackgroundFetchInterval(UIApplicationBackgroundFetchIntervalMinimum)
を実装する。

※ UIApplicationBackgroundFetchIntervalMinimumとしてもOSの判断で処理が呼ばれるため、常に呼ばれるわけではありません。

AppDelegate.swift
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    // Override point for customization after application launch.

    application.setMinimumBackgroundFetchInterval(UIApplicationBackgroundFetchIntervalMinimum)

    return true
}

手順3 バックグラウンドで実行する処理の実装

処理を実装します。
処理が終わったらcompletionHandlerを実装する必要があります。
約30秒間猶予を与えられているので、この間に処理を完了させcompletionHandlerを呼べるようにしましょう。
もしcompletionHandlerが呼ばれなかった場合は、次回バックグラウンドで呼ばれる時の間隔に影響するみたいです。

AppDelegate.swift
func application(_ application: UIApplication, performFetchWithCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
    //バックグラウンドで実行する処理

    //適切なものを渡します  新規データ: .newData 失敗: .failed データなし: .noData
    completionHandler(.newData)
}

デバッグ方法①

Edit Scheme...から下記をひらき、Background FetchのLaunch due to a background fetch eventにチェックを入れます。
これで実行するとperformFetchWithCompletionHandlerが呼ばれます。
スクリーンショット 2017-03-12 16.03.15.png

デバッグ方法②

Debug → Simulate Background Fetchを選択するとperformFetchWithCompletionHandlerが呼ばれます。
ただ実機ではなぜかうまくいきませんでした。
スクリーンショット 2017-03-12 16.03.55.png

最後に

自分用のメモとして残しました。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away