【Swift】「A background URLSession with identifier [identifier名] already exists!」警告の対処法

Swift の URLSesssion を使った POST 送信の処理を実装した際に発生した警告についての対処法です。
これのせいでアプリがクラッシュするということはないのですが、私の環境では dismiss() が正常に作動せず、前のページに戻れないというバグが発生したので、修正することをお勧めします。

今回参考にさせていただいた記事はこちら。

【Swift】URLSessionまとめ – Qiita
https://qiita.com/shiz/items/09523baf7d1cd37f6dee#1アプリ1URLSession

 

こちらの記事内で、下記のような記述があります。

・同時平行処理される複数のURLSessionTaskは1つのURLSessionで共有可能。
・独自でURLSessionを作成している場合は、finishTasksAndInvalidateやinvalidateAndCancelでデリゲートやコールバックオブジェクトへの参照をクリアしないとメモリーリークを起こす。

で、自分のプロジェクトを確認したところ…セッションを無効にする処理を追加してない!
ということで、下記のコードを追加して修正しました。

// ページが破棄される直前に呼び出される
override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)
    // 通信キャンセル&セッション無効
    self.session?.invalidateAndCancel()
}

私の場合は、ページが破棄される直前に Session も無効にしていますが、他のタイミングで実行しても問題ありません。
適宜、環境に合わせて変更してください。

また、URLSession は下記のようにグローバル変数で宣言することをお忘れなく。

var session: URLSession?

URLSession を使った POST 送信処理については、以前に記事を投稿しましたので、そちらを参考にして頂けると嬉しいです。

【Swift】URLSessionを使ってPOST送信を行う方法
https://cpoint-lab.co.jp/article/201911/12524/

 

以上、Swift の URLSession を使用した際に、「A background URLSession with identifier [identifier名] already exists!」という警告が発生する際の対処方法についてでした。
ご参考になれば幸いです。

>株式会社シーポイントラボ

株式会社シーポイントラボ

TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:〒432-8003
   静岡県浜松市中央区和地山3-1-7
   浜松イノベーションキューブ 315
※ご来社の際はインターホンで「316」をお呼びください

CTR IMG