¿Se puede usar la Fundación Can Core en devolución de señal PLCrashReporter?

Estoy usando PLCrashReporter en mi proyecto de iOS y tengo curiosidad, ¿es posible usar el código Core Foundation en mi callback personalizada? La cosa, que maneja mis necesidades es CFPreferences. Aquí es parte del código, que creo:

void LMCrashCallback(siginfo_t* info, ucontext_t* uap, void* context) { CFStringRef networkStatusOnCrash; networkStatusOnCrash = (CFStringRef)CFPreferencesCopyAppValue(networkStatusKey, kCFPreferencesCurrentApplication); CFStringRef additionalInfo = CFStringCreateWithFormat( NULL, NULL, CFSTR( "Additional Crash Properties:[Internet: %@]", networkStatusOnCrash); CFPreferencesSetAppValue(additionalInfoKey, additionalInfo, kCFPreferencesCurrentApplication); CFPreferencesAppSynchronize(kCFPreferencesCurrentApplication); } 

Mi objective es recostackr información sobre el sistema, justo a time cuando la aplicación se bloquea, por ejemplo, tipo de connection a Internet.

Sé que no es buena idea crear una callback propia debido a funciones asíncronas, pero esto puede ayudar.

También como otra opción: ¿Existe alguna forma de ampliar de algún modo la class PLCrashReportSystemInfo?

Esto es muy peligroso. En particular, la llamada a CFStringCreateWithFormat asigna memory. Asignar memory en medio de un manejador de locking puede llevar a un locking de drenaje de batería (si tienes ese error …) Por ejemplo, si estuvieras en medio de free() (que no es un lugar infrecuente para bloquearse), puedes ya estar sosteniendo un spinlock en el montón. Cuando llame a malloc para get algo de memory, puede volver a bloquear el montón y bloquearlo en un ciclo cerrado. El montón debe bloquearse con tanta frecuencia y durante períodos de time tan cortos que no utiliza un locking de locking. Hace el equivalente a while (locked) {} .

Pareces estar leyendo una preference y copyrla a otra preference. No hay ninguna razón para hacerlo dentro de un manejador de lockings. Simplemente revise hasPendingCrashReport durante el inicio (que supongo que ya está haciendo) y, a continuación, lea la key. No está claro qué es networkStatusKey , pero debería estar allí cuando vuelvas a iniciar.

Si por alguna razón se modifica muy temprano (antes de llamar a hasPendingCrashReport ), puede hasPendingCrashReport en main() antes de iniciar la aplicación. O puede grabarlo en un método +load , que se llama incluso antes.