Corredor

ウェブ、プログラミングの勉強メモ。

Swift iOS アプリでバックグラウンド移行時や復帰時のイベントで任意の処理を行う

iOS アプリでよくある、

  • バックグラウンド移行時に何か処理をする
  • フォアグラウンド復帰時に何か処理をする

を実現する方法のまとめ。

環境情報

  • 対象 iOS バージョン:v11.3
  • Xcode:v9.3 (9E145)
  • Swift:v4.1 (swiftlang-902.0.48 clang-902.0.37.1)

用意されているイベントの種類

開発者が検知して利用できる主なイベントの種類は以下のとおり。

イベント名 概要
application:willFinishLaunchingWithOptions アプリ起動後
application:didFinishLaunchingWithOptions アプリが画面を表示する直前
applicationDidBecomeActive フォアグラウンド状態に切り替わる直前
applicationWillResignActive フォアグラウンド状態から抜けようとしている時
applicationDidEnterBackground バックグラウンド状態 (いつでも一時停止状態になりうる)
applicationWillEnterForeground バックグラウンド状態から抜けつつあるが、まだアクティブにはなっていない時
applicationWillTerminate アプリが終了する時

この他にもいくつかイベントはあるが、とりあえず主なものだけ。

アプリ全体でイベント定義するには AppDelegate.swift を使う

アプリ全体でこれらのイベントを検知して利用するには、AppDelegete.swift を使う。

アプリの雛形を生成した時に、既にこれらのイベントに対応するメソッドを持った状態でクラスが作成されているはずなので、コレをそのまま利用しよう。

ViewController 内でイベントに反応するには NotificationCenter を使う

ViewController 内でこれらのイベントに反応するには、viewDidLoad() 関数内で NotificationCenter を使ってイベント登録をしておくと良い。JavaScript で言うところの document.addEventListener() 的な意味合いだ。

例えば、アプリ起動時、およびフォアグラウンド復帰時に何か関数を実行したい場合は、以下のように設定すれば良い。

class ViewController: UIViewController {
  override func viewDidLoad() {
    super.viewDidLoad()
    
    // アプリ起動時・フォアグラウンド復帰時の通知を設定する
    NotificationCenter.default.addObserver(
      self,
      selector: #selector(ViewController.onDidBecomeActive(_:)),
      name: NSNotification.Name.UIApplicationDidBecomeActive,
      object: nil
    )
  }
  
  // アプリ起動時・フォアグラウンド復帰時に行う処理
  @objc func onDidBecomeActive(_ notification: Notification?) {
    // ココに処理
   }
}

NotificationCenter.default.addObserver() でイベント定義。selector に呼び出したい関数を指定する。name がイベント名を設定するところだが、NSNotification.Name. まで入力すると設定できるイベントを補完候補で表示してくれる。

登録したイベント (通知) を削除するには removeObserver() を使えば良い。

Swift 4プログラミング入門 iOS 11+Xcode 9対応

Swift 4プログラミング入門 iOS 11+Xcode 9対応