iphone - lenguaje - Usar Objective C para leer los mensajes de registro publicados en la consola del dispositivo
swift apple (4)
¿Cómo puede mi aplicación iOS leer los mensajes del registro de la consola de los dispositivos? Quiero leer de forma programática estas entradas de registro (como leer un archivo?), Seleccionar algunas y enviarlas por correo electrónico a la asistencia técnica.
Conozco una aplicación de iPhone que te permite ver el registro. Su nombre es consola. Sin embargo, no puedo entender qué clases o API usó. Una persona sugirió que se hizo usando las funciones de ASL, pero no sé cuáles son o dónde están documentadas.
También conozco varias alternativas al uso de NSLog como NSLogger y CocoaLumberJack, pero no estamos preparados para implementarlas en este momento.
¡Muchas gracias por la ayuda!
A partir de iOS 7, este método ya no funcionará. Apple eliminó el acceso a ASL debido a razones de seguridad.
Aquí hay una implementación de Swift si alguien está buscando una:
static func systemLogs() -> [[String: String]] {
let q = asl_new(UInt32(ASL_TYPE_QUERY))
var logs = [[String: String]]()
let r = asl_search(nil, q)
var m = asl_next(r)
while m != nil {
var logDict = [String: String]()
var i: UInt32 = 0
while true {
if let key = String.fromCString(asl_key(m, i)) {
let val = String.fromCString(asl_get(m, key))
logDict[key] = val
i++
} else {
break
}
}
m = asl_next(r)
logs.append(logDict)
}
asl_release(r)
return logs
}
La forma más antigua que las personas sugirieron funcionar perfectamente hasta iOS 9, pero eso no funcionará con iOS 10 / XCode8.
Hay una nueva forma de iniciar sesión en iOS10 / XCode8, registro unificado y seguimiento de actividad.
https://developer.apple.com/reference/os/1891852-logging#1682426 https://developer.apple.com/videos/play/wwdc2016/721/
Usuario esto para el registro:
Esta entrada en los blogs de Cocoanetics tiene un código de muestra para acceder al registro del sistema en iOS usando la API ASL (Apple System Logger) ( página man ):
aslmsg q, m;
int i;
const char *key, *val;
q = asl_new(ASL_TYPE_QUERY);
aslresponse r = asl_search(NULL, q);
while (NULL != (m = aslresponse_next(r)))
{
NSMutableDictionary *tmpDict = [NSMutableDictionary dictionary];
for (i = 0; (NULL != (key = asl_key(m, i))); i++)
{
NSString *keyString = [NSString stringWithUTF8String:(char *)key];
val = asl_get(m, key);
NSString *string = [NSString stringWithUTF8String:val];
[tmpDict setObject:string forKey:keyString];
}
NSLog(@"%@", tmpDict);
}
aslresponse_free(r);
Tenga en cuenta que debe sondear ASL para leer los últimos mensajes. El código anterior también fallará cuando se ejecute en el simulador de iPhone, pero funciona perfectamente en un dispositivo real.
Si no quiere luchar contra la API C ASL, eche un vistazo a este contenedor Objective-C llamado ASLogger .