2017-06-22 271 views
0

我正在创建一个即席应用程序,该应用程序将在我的工作场所进行分发,以便关注我们测试设备的设备充电级别。我在后台保持应用程序清醒,使用在网络上记录的流行技术检查级别:使用AVAudioPlayer播放空白音频文件:see article使用iOS应用程序在后台执行网络请求

这工作正常,一切都很好,但应用程序的一大部分是,它应该发布到我们的闲帐帐户使用他们的Web钩API,当我这样做的应用程序似乎被看门狗杀害:

Incident Identifier: 1CC4B288-4A42-4E4D-9430-58F0FBFF112A 
CrashReporter Key: df80e009afab39b6c94933dd8d9206d4d293f81e 
Hardware Model:  iPhone8,2 
Process:    Battery [19555] 
Path:    /private/var/containers/Bundle/Application/07816F5B-6850-481F-9FA7-6C717BF3946B/Battery.app/Battery 
Identifier:   com.yellowbrickbear.Battery 
Version:    1 (1.0) 
Code Type:   ARM-64 (Native) 
Role:    Foreground 
Parent Process:  launchd [1] 
Coalition:   com.yellowbrickbear.Battery [6957] 


Date/Time:   2017-06-22 16:46:41.1031 +0100 
Launch Time:   2017-06-22 16:43:36.2253 +0100 
OS Version:   iPhone OS 10.3.2 (14F89) 
Report Version:  104 

Exception Type: EXC_CRASH (SIGKILL) 
Exception Codes: 0x0000000000000000, 0x0000000000000000 
Exception Note: EXC_CORPSE_NOTIFY 
Termination Reason: Namespace <0xF>, Code 0x8badf00d 
Triggered by Thread: 0 

Filtered syslog: 
None found 

Thread 0 name: Dispatch queue: com.apple.main-thread 
Thread 0 Crashed: 
0 libsystem_kernel.dylib   0x0000000180623224 mach_msg_trap + 8 
1 libsystem_kernel.dylib   0x000000018062309c mach_msg + 72 
2 CoreFoundation     0x00000001815f4e90 __CFRunLoopServiceMachPort + 192 
3 CoreFoundation     0x00000001815f2ae4 __CFRunLoopRun + 1060 
4 CoreFoundation     0x0000000181522da4 CFRunLoopRunSpecific + 424 
5 GraphicsServices    0x0000000182f8c074 GSEventRunModal + 100 
6 UIKit       0x00000001877dd058 UIApplicationMain + 208 
7 Battery       0x000000010002e2d4 0x100020000 + 58068 
8 libdyld.dylib     0x000000018053159c start + 4 

Thread 1 name: com.apple.uikit.eventfetch-thread 
Thread 1: 
0 libsystem_kernel.dylib   0x0000000180623224 mach_msg_trap + 8 
1 libsystem_kernel.dylib   0x000000018062309c mach_msg + 72 
2 CoreFoundation     0x00000001815f4e90 __CFRunLoopServiceMachPort + 192 
3 CoreFoundation     0x00000001815f2ae4 __CFRunLoopRun + 1060 
4 CoreFoundation     0x0000000181522da4 CFRunLoopRunSpecific + 424 
5 Foundation      0x000000018203cd74 -[NSRunLoop(NSRunLoop) runMode:beforeDate:] + 304 
6 Foundation      0x000000018205db44 -[NSRunLoop(NSRunLoop) runUntilDate:] + 96 
7 UIKit       0x00000001881676a8 -[UIEventFetcher threadMain] + 136 
8 Foundation      0x000000018213a2d8 __NSThread__start__ + 996 
9 libsystem_pthread.dylib   0x000000018070968c _pthread_body + 240 
10 libsystem_pthread.dylib   0x000000018070959c _pthread_body + 0 
11 libsystem_pthread.dylib   0x0000000180706cb4 thread_start + 4 

Thread 2 name: AVAudioSession Notify Thread 
Thread 2: 
0 libsystem_kernel.dylib   0x0000000180623224 mach_msg_trap + 8 
1 libsystem_kernel.dylib   0x000000018062309c mach_msg + 72 
2 CoreFoundation     0x00000001815f4e90 __CFRunLoopServiceMachPort + 192 
3 CoreFoundation     0x00000001815f2ae4 __CFRunLoopRun + 1060 
4 CoreFoundation     0x0000000181522da4 CFRunLoopRunSpecific + 424 
5 AVFAudio      0x000000019b866540 GenericRunLoopThread::Entry(void*) + 164 
6 AVFAudio      0x000000019b88c814 CAPThread::Entry(CAPThread*) + 84 
7 libsystem_pthread.dylib   0x000000018070968c _pthread_body + 240 
8 libsystem_pthread.dylib   0x000000018070959c _pthread_body + 0 
9 libsystem_pthread.dylib   0x0000000180706cb4 thread_start + 4 

Thread 3 name: com.apple.coreaudio.AQClient 
Thread 3: 
0 libsystem_kernel.dylib   0x0000000180623224 mach_msg_trap + 8 
1 libsystem_kernel.dylib   0x000000018062309c mach_msg + 72 
2 CoreFoundation     0x00000001815f4e90 __CFRunLoopServiceMachPort + 192 
3 CoreFoundation     0x00000001815f2ae4 __CFRunLoopRun + 1060 
4 CoreFoundation     0x0000000181522da4 CFRunLoopRunSpecific + 424 
5 AudioToolbox     0x00000001845ad9fc GenericRunLoopThread::Entry(void*) + 164 
6 AudioToolbox     0x00000001847814bc CAPThread::Entry(CAPThread*) + 84 
7 libsystem_pthread.dylib   0x000000018070968c _pthread_body + 240 
8 libsystem_pthread.dylib   0x000000018070959c _pthread_body + 0 
9 libsystem_pthread.dylib   0x0000000180706cb4 thread_start + 4 

Thread 4: 
0 libsystem_pthread.dylib   0x0000000180706ca8 start_wqthread + 0 

Thread 5: 
0 libsystem_pthread.dylib   0x0000000180706ca8 start_wqthread + 0 

我使用后懈怠的代码如下:

DispatchQueue.global(qos: .default).async { [weak self] in 

    guard let urlComponents = URLComponents(string: "https://hooks.slack.com/services/"), let url = urlComponents.url else { return } // URL shortened so you can't spam us via this S.O! 

    let urlRequest = NSMutableURLRequest(url: url) 

    let data = [ 
     "text": text, 
     "channel": /*channel != nil ? channel! :*/ "@simon", 
     "icon_emoji": ":passport_control:", 
     "username": "Battery Police" 
    ] 

    guard let jsonData = try? JSONSerialization.data(withJSONObject: data, options: []) else { 
      return 
     } 

    urlRequest.setValue("application/json", forHTTPHeaderField: "Content-Type") 
    urlRequest.httpBody = jsonData 
    urlRequest.httpMethod = "POST" 

    let dataTask = self?.defaultSession?.dataTask(with: urlRequest as URLRequest) 
    dataTask?.resume() 
} 

其中defaultSession设置了背景会话配置。 我试图解决的是,为什么这会导致应用程序崩溃,以及是否有任何事情可以阻止看门狗将其杀死!

+0

您是否尝试过使用.global(qos:.background).async {}? –

+0

@CharlyPico后台qos与后台应用程序执行无关。怎么样使用非后台会话配置? – deadbeef

+0

对我来说,.default与.main是一样的,这意味着你处于主要阶段,.background将请求发送到后台阶段。你有没有添加一些断点来分析错误发生在哪里? –

回答

0

看起来这是无论是@ CharlyPico的建议解决使用.background的QoS创建我的队列,或由事实在某种程度上对我AVAudioPlayer已在被删除的呼叫.play()提交。我相当肯定它是前者,因为一旦禁用API请求,应用程序就会永久运行,因此很可能在.play()调用被意外删除之前!

相关问题