Sponsor Link
環境&対象
- macOS Big Sur 11.3 beta
- Xcode 12.4
- iOS 14.4
この記事では、バックグラウンド処理やバックグラウンド〜フォアグラウンド処理間遷移のデバッグ方法を説明しています。
アプリが、バックグラウンドで動作するための設定は別途必要です。
アプリのバックグラウンドからフォアグラウンドへの遷移
iOS のアプリは、アプリ動作中の “Foreground Active” だけではなくさまざまな状態になり得ます。
Apple のドキュメントは、こちら。
iOS アプリを開発していると、状態に関連して 以下のような点を確認したくなります。
- アプリが使っていたリソースをきちんと開放しているか
- Foreground になった時に、リソースをきちんと再確保しているか
特に、2つ目の点は、タイマー等を使用していると確認しておきたい点です。
Foundation の Timer は、一度 invalidate や cancel をすると再始動することはできず、タイマーの再作成から必要となります。
デフォルトでセットアップされる Xcode プロジェクトの問題点
通常 開発中のアプリは Xcode から起動することができます。ですが、そのままの設定で バックグラウンドからフォアグラウンドに遷移するアプリのコードをデバッグすることはできません。
具体的には ホームボタン等を使用してアプリをバックグラウンドに遷移させると Xcode との接続が切れてしまいます。Xcode との接続が切れた以降は ブレークポイントで停止させる等ができなくなります。
ですので、そのままの設定では、一旦 バックグラウンドからフォアグラウンドに遷移するときのコードのデバッグができません。
古い方法:Info.plist に追加設定
アプリの Info.plist に設定を追加することで、バックグラウンドに遷移しても実行を継続させることができます。
- Key:Application does not run in background (UIApplicationExitsOnSuspend)
- value: NO
なお、上記のキーは、deprecated 指定されているので、指定したまま AppStore 等に提出すると Warning か Reject されそうです。
Apple のドキュメントは、こちら。
新しい方法:Capability に設定する
Background Modes を追加して、”Background processing” にチェックを入れることでも 同様の動きをします。
チェックを入れると、アプリはバックグラウンドに遷移しても処理を継続します。デバッグ目的であれば、デバッグ終了後にチェックを外すのを忘れないようにしましょう。
こちらの方が deprecated でもないのでおすすめですが、設定を削除し忘れないように気をつける必要があります。
まとめ:バックグラウンド処理のデバッグ方法
- Capability に Background Modes を追加して、Background processing にチェックを入れる
- Info.plist に、UIApplicationExitsOnSuspend キーを追加して、NO という値をセットする (ただし、deprecated)
説明は以上です。
不明な点やおかしな点ありましたら、こちらまで。
Sponsor Link