Swift Crash libobjc.A.dylib objc_msgSend

Utilizo crashlytics para get los lockings de mi aplicación que están en la AppStore. Algunos usuarios están recibiendo un locking que no puedo reproducir en mi máquina (ni los pocos amigos que probaron mi aplicación a través de TestFlight). Estos son los loggings de Fabric:

Thread : Crashed: com.apple.main-thread 0 libobjc.A.dylib 0x181d09bdc objc_msgSend + 28 1 Foundation 0x18304be20 __NSThreadPerformPerform + 340 2 CoreFoundation 0x182640efc __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 24 3 CoreFoundation 0x182640990 __CFRunLoopDoSources0 + 540 4 CoreFoundation 0x18263e690 __CFRunLoopRun + 724 5 CoreFoundation 0x18256d680 CFRunLoopRunSpecific + 384 6 GraphicsServices 0x183a7c088 GSEventRunModal + 180 7 UIKit 0x1873e4d90 UIApplicationMain + 204 8 <App Name> 0x1000b2f0c main (AppDelegate.swift:14) 9 libdispatch.dylib 0x18210e8b8 (Missing) 

No puedo entender lo que esto significa y busqué otras preguntas para pedir ayuda, pero parece que no puedo encontrar una respuesta. También contacté rápidamente al equipo de Crashlytics, y me dijeron lo siguiente:

Parece que el origen de este locking es una especie de falta de memory. Esto hace que Crashlytics se cierre antes de que termine de escribir, lo que resulta en su informe de locking.

¿Alguna buena forma de depurar esto para identificar el origen del crash? Aprecie la ayuda!

EDITAR: Se agregó una captura de pantalla de Threads en el informe del crash de crashlytics en caso de que alguien quiera algo de información desde allí: introduzca la descripción de la imagen aquí

 Thread : com.apple.NSURLConnectionLoader 0 libsystem_kernel.dylib 0x1823354bc mach_msg_trap + 8 1 libsystem_kernel.dylib 0x182335338 mach_msg + 72 2 CoreFoundation 0x182764ac0 __CFRunLoopServiceMachPort + 196 3 CoreFoundation 0x1827627c4 __CFRunLoopRun + 1032 4 CoreFoundation 0x182691680 CFRunLoopRunSpecific + 384 5 CFNetwork 0x182e01434 +[NSURLConnection(Loader) _resourceLoadLoop:] + 412 6 Foundation 0x18316fc40 __NSThread__start__ + 1000 7 libsystem_pthread.dylib 0x182417b28 _pthread_body + 156 8 libsystem_pthread.dylib 0x182417a8c _pthread_body + 154 9 libsystem_pthread.dylib 0x182415028 thread_start + 4 Thread : AVAudioSession Notify Thread 0 libsystem_kernel.dylib 0x1823354bc mach_msg_trap + 8 1 libsystem_kernel.dylib 0x182335338 mach_msg + 72 2 CoreFoundation 0x182764ac0 __CFRunLoopServiceMachPort + 196 3 CoreFoundation 0x1827627c4 __CFRunLoopRun + 1032 4 CoreFoundation 0x182691680 CFRunLoopRunSpecific + 384 5 libAVFAudio.dylib 0x188959834 GenericRunLoopThread::Entry(void*) + 164 6 libAVFAudio.dylib 0x18892e3a8 CAPThread::Entry(CAPThread*) + 84 7 libsystem_pthread.dylib 0x182417b28 _pthread_body + 156 8 libsystem_pthread.dylib 0x182417a8c _pthread_body + 154 9 libsystem_pthread.dylib 0x182415028 thread_start + 4 

EDIT 2: estoy usando todo el código Swift, y la forma en que reenvío posts a Selectors es la siguiente:

 NSTimer.scheduledTimerWithTimeInterval(0.02, target: self, selector: Selector("updateProgressCircle"), userInfo: nil, repeats: true) func updateProgressCircle() { // Do something } 

El problema es que no puedo repro cualquier crash de este local. Solo los usuarios se enfrentan a eso. Llamo a los selectores de manera similar.

Se objc_msgSend locking de objc_msgSend cuando intenta reenviar un post a un selector (utilizando un buen post reenvío de Objective-C). Esto puede ser producido por target-action, notifications, declaraciones de protocolo, timeres, realizar selectores o cualquier otra function que involucre pasar la syntax de selector de una function: es decir: "doSomethingWithThis:" .

Puedo ver en sus loggings de fallos que tiene componentes rápidos en su aplicación (al less, AppDelegate). Los componentes Swift, a diferencia de los componentes Obj-C, no son compatibles con el sistema de postría reenvío Obj-C.

Mi intuición es que tiene un object rápido en su código que cumple con un protocolo, se agrega como un observador de destino / notificación o de alguna manera espera que una de sus funciones sea invocada por postría directa. Le sugiero que revise sus classs y vea si este es el caso. Una vez que encuentre al culpable, puede corregir fácilmente este error añadiendo @objc a la function que espera el post.

es decir: si se llama a su function, en una class rápida (y, por ejemplo, se registra para una notificación):

 func yourFunction() { //your code } 

llámalo:

 @objc func yourFunction() { //your code } 

Es un tiro largo, pero espero que esto ayude!

Creo que esto puede tener que ver con AVAudioPlayer. En mi caso, tuve este mismo error y obtuve algunos indicios al notar que 2 de mis hilos de ejecución tenían contenido relacionado con AVAudioPlayer.

Tenía una variable de class AVAudioPlayer que reinicialicé sin reiniciar a cero primero. Agregué el código a continuación antes de la initialization de la variable AVAudioPlayer y el error no se ha producido desde entonces.

audioPlay es el nombre de la variable.

 if audioPlay != nil { //print( "blabla" ) audioPlay?.stop() audioPlay = nil }