在release環境下,APP在iOS12的時候退到后台然后再返回到前台的時候網絡請求返回錯誤,AFN返回錯誤碼53,NSPOSIXErrorDomain Code=53: Software caused connection abort。但是在Debug環境下卻沒發現這個問題,其他系統版本下也沒有問題,所有就懷疑是不是iOS12的原因。
最后在github上 AFNetworking的留言中發現了國外的開發者也遇到了這個問題,並且給蘋果發了郵件,也收到了蘋果的回復,https://github.com/AFNetworking/AFNetworking/issues/4279
雖然給的回復是問題出在蘋果那邊,但是也不知道蘋果啥時候解決這個問題,所以遇到的問題還得解決,最后推測是退到后台的時候系統掛起了APP,既然有10分鍾,那么就一定要爭取到!所以申請后台任務:
1.在工程的AppDelegate文件中
@interface AppDelegate () @property (nonatomic, unsafe_unretained) UIBackgroundTaskIdentifier taskId; @property (nonatomic, strong) NSTimer *timer; @end
2.在AppDelegate中的- (void)applicationDidEnterBackground:(UIApplication *)application 方法中
self.taskId =[application beginBackgroundTaskWithExpirationHandler:^(void) { //當申請的后台時間用完的時候調用這個block //此時我們需要結束后台任務, [self endTask]; }]; // 模擬一個長時間的任務 Task self.timer =[NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(longTimeTask:) userInfo:nil repeats:YES];
3.結束后台任務后台任務結束的時候要釋放定時器
#pragma mark - 停止timer -(void)endTask { if (_timer != nil||_timer.isValid) { [_timer invalidate]; _timer = nil; //結束后台任務 [[UIApplication sharedApplication] endBackgroundTask:taskId]; taskId = UIBackgroundTaskInvalid; NSLog(@"停止timer"); } }
4.模擬的長時間后台任務
- (void) longTimeTask:(NSTimer *)timer{ // 系統留給的我們的時間 NSTimeInterval time =[[UIApplication sharedApplication] backgroundTimeRemaining]; NSLog(@"系統留給的我們的時間 = %.02f Seconds", time); }
這樣App就不會一進入后台就會被掛起