Utilisation d'Objective C pour lire les messages de journal publiés sur la console de l'appareil

Comment mon application iOS peut-elle lire les messages du journal de la console des périphériques? Je veux lire par programme ces inputs de journal (comme lire un file?), En sélectionner quelques-unes et les envoyer par courrier électronique à l'appui.

Je suis au courant d'une application iPhone qui vous permet de voir le journal. C'est le nom de la console. Cependant, je ne peux pas comprendre quelles classs ou API il a utilisées. Une personne a suggéré que cela a été fait en utilisant les fonctions de l'ASL, mais je ne sais pas ce que c'est ou où ils sont documentés.

Je suis également au courant de plusieurs alternatives à l'utilisation de NSLog comme NSLogger et CocoaLumberJack, mais nous ne sums pas prêts à les implémenter pour le moment.

Merci beaucoup pour toute aide!

Cette input dans les blogs Cocoanetics a un exemple de code pour accéder au journal système sur iOS à l'aide de l'API ASL (Apple System Logger) ( page de manuel ):

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++) { NSSsortingng *keySsortingng = [NSSsortingng ssortingngWithUTF8Ssortingng:(char *)key]; val = asl_get(m, key); NSSsortingng *ssortingng = [NSSsortingng ssortingngWithUTF8Ssortingng:val]; [tmpDict setObject:ssortingng forKey:keySsortingng]; } NSLog(@"%@", tmpDict); } aslresponse_free(r); 

Notez que vous devez interroger ASL pour lire les derniers messages. Le code ci-dessus échouera également lorsqu'il est exécuté sur le simulateur d'iPhone, mais fonctionne très bien sur un périphérique réel.

Si vous ne voulez pas combattre l'API C ASL, jetez un oeil à ce wrapper Objective-C appelé ASLogger .

À partir d'IOS 7, cette méthode ne fonctionnera plus. Apple a supprimé l'access à ASL pour des raisons de security.

Voici une implémentation Swift si quelqu'un en cherche une:

 static func systemLogs() -> [[Ssortingng: Ssortingng]] { let q = asl_new(UInt32(ASL_TYPE_QUERY)) var logs = [[Ssortingng: Ssortingng]]() let r = asl_search(nil, q) var m = asl_next(r) while m != nil { var logDict = [Ssortingng: Ssortingng]() var i: UInt32 = 0 while true { if let key = Ssortingng.fromCSsortingng(asl_key(m, i)) { let val = Ssortingng.fromCSsortingng(asl_get(m, key)) logDict[key] = val i++ } else { break } } m = asl_next(r) logs.append(logDict) } asl_release(r) return logs } 

L'ancienne façon dont les gens ont suggéré de travailler parfaitement jusqu'à iOS 9, mais cela ne fonctionnera pas avec iOS 10 / XCode8.

Il y a une nouvelle façon de se connecter dans iOS10 / XCode8, Unified Logging et Activity Tracing.

https://developer.apple.com/reference/os/1891852-logging#1682426 https://developer.apple.com/videos/play/wwdc2016/721/

User ceci pour la journalisation:

https://github.com/SRGSSR/srglogger-ios