[Xcode][iOS] アプリのバックグラウンド処理やバックグラウンドからの復帰処理のデバッグ方法

iOS アプリ開発時に、バックグラウンド中の処理やバックグラウンドからフォアグラウンドに遷移した時のデバッグ方法を説明します。

環境&対象

以下の環境で動作確認を行なっています。

  • macOS Big Sur 11.3 beta
  • Xcode 12.4
  • iOS 14.4

アプリのバックグラウンドからフォアグラウンドへの遷移

iOS のアプリは、アプリ動作中の “Foreground Active” だけではなくさまざまな状態になり得ます。

Apple のドキュメントは、こちら

iOS アプリを開発していると、状態に関連して 以下のような点を確認したくなります。

  • アプリが使っていたリソースをきちんと開放しているか
  • Foreground になった時に、リソースをきちんと再確保しているか

特に、2つ目の点は、タイマー等を使用していると確認しておきたい点です。

MEMO
Foundation の Timer は、一度 invalidate や cancel をすると再始動することはできず、タイマーの再作成から必要となります。

デフォルトでセットアップされる Xcode プロジェクトの問題点

通常 開発中のアプリは Xcode から起動することができます。ですが、そのままの設定で バックグラウンドからフォアグラウンドに遷移するアプリのコードをデバッグすることはできません。

具体的には ホームボタン等を使用してアプリをバックグラウンドに遷移させると Xcode との接続が切れてしまいます。Xcode との接続が切れた以降は ブレークポイントで停止させる等ができなくなります。
ですので、そのままの設定では、一旦 バックグラウンドからフォアグラウンドに遷移するときのコードのデバッグができません。

古い方法:Info.plist に追加設定

アプリの Info.plist に設定を追加することで、バックグラウンドに遷移しても実行を継続させることができます。

Key:Application does not run in background (UIApplicationExitsOnSuspend)
value: NO
Application does not run in background
Application does not run in background

なお、上記のキーは、deprecated 指定されているので、指定したまま AppStore 等に提出すると Warning か Reject されそうです。

Apple のドキュメントは、こちら

新しい方法:Capability に設定する

Background Modes を追加して、”Background processing” にチェックを入れることでも 同様の動きをします。

Background Modes - Background processing
Background Modes – Background processing
注意
チェックを入れると、アプリはバックグラウンドに遷移しても処理を継続します。デバッグ目的であれば、デバッグ終了後にチェックを外すのを忘れないようにしましょう。

こちらの方が deprecated でもないのでおすすめですが、設定を削除し忘れないように気をつける必要があります。

まとめ:バックグラウンド処理のデバッグ方法

バックグラウンド処理のデバッグ方法
  • Capability に Background Modes を追加して、Background processing にチェックを入れる
  • Info.plist に、UIApplicationExitsOnSuspend キーを追加して、NO という値をセットする (ただし、deprecated)

説明は以上です。
不明な点やおかしな点ありましたら、こちらまで。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です