Comment mon application iOS peut-elle lire les messages à partir du journal de la console du périphérique? Je souhaite lire par programme ces entrées de journal (comme la lecture d'un fichier?), En sélectionner quelques-unes et les envoyer par e-mail à l'assistance.
Je connais une application iPhone qui vous permet d'afficher le journal. Son nom est la console. Cependant, je ne peux pas comprendre quelles classes ou API il a utilisées. Une personne a suggéré que cela avait été fait en utilisant les fonctions ASL, mais je ne sais pas ce que c'est ni où elles sont documentées.
Je connais également plusieurs alternatives à l'utilisation de NSLog, telles que NSLogger et CocoaLumberJack, mais nous ne sommes pas prêts à les implémenter pour le moment.
Merci beaucoup pour toute aide!
Cette entrée dans les blogs de Cocoanetics contient 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++)
{
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);
Notez que vous devez interroger ASL pour lire les derniers messages. Le code ci-dessus échouera également lorsqu'il sera exécuté sur le simulateur iPhone, mais fonctionnera parfaitement sur un appareil réel.
Si vous ne voulez pas combattre l'API C ASL, jetez un œil à cet encapsuleur Objective-C appelé ASLogger .
À partir de IOS 7, cette méthode ne fonctionnera plus. Apple a supprimé l'accès à l'ASL pour des raisons de sécurité.
Voici une implémentation de Swift si quelqu'un en cherche une:
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
}
L'ancienne façon de travailler suggérée fonctionnait parfaitement jusqu'à iOS 9, mais cela ne fonctionnerait pas avec iOS 10/XCode8.
Il existe une nouvelle méthode de journalisation introduite dans iOS10/XCode8, la journalisation unifiée et le suivi des activités.
https://developer.Apple.com/reference/os/1891852-logging#1682426https://developer.Apple.com/videos/play/wwdc2016/721/
Utilisateur ceci pour l'enregistrement: