Error Domain=NSPOSIXErrorDomain Code=53 "Software caused connection abort"
というエラーが発生します。
iOS11の時には発生していなかったと思うのですが、手元にiOS11の実機端末が無いためちゃんと確認できていません。(なのでタイトルの"iOS12の"は余計かも...?)
「必ず失敗する」というわけではないですが、「頻繁に失敗する」ようです。
シミュレータでは発生せず、実機のみ発生しました。
再現手順
以下のコードで、バックグラウンドに行ったあと数秒待ってアプリ画面に戻ると再現します。
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
NotificationCenter.default.addObserver(self,
selector: #selector(connection),
name: UIApplication.willEnterForegroundNotification,
object: nil)
}
deinit {
NotificationCenter.default.removeObserver(self)
}
@objc func connection() {
let url = URL(string: "https://qiita.com/ichimots")!
URLSession.shared.dataTask(with: url) { _, response, error in
if let _ = response {
print("---success---")
}
if let error = error {
print("---fail---")
print(error) // Error Domain=NSPOSIXErrorDomain Code=53 "Software caused connection abort" UserInfo={_kCFStreamErrorCodeKey=53, _kCFStreamErrorDomainKey=1}
}
}.resume()
}
}
対応方法
willEnterForegroundNotification
を
didBecomeActiveNotification
に置き換えてあげることで、発生しなくなりました。
発生原因
詳しく調べきれていません。
アプリがアクティブ状態になる直前に通信処理を発行していたことが原因だと考えてはいますが、コレという確証が掴めておらず...
詳細わかる方がいらっしゃるようでしたら、コメントお待ちしております。