Подтвердить что ты не робот

Использование Objective C для чтения сообщений журнала, отправленных на консоль устройства

Как приложение iOS может читать сообщения из журнала консоли устройств. Я хочу программно читать эти записи в журнале (например, читать файл?), Выбирать некоторые и отправлять их по электронной почте для поддержки.

Я знаю одно приложение для iPhone, которое позволяет просматривать журнал. Это имя - Консоль. Однако я не могу понять, какие классы или API он использовал. Один человек предположил, что это было сделано с использованием функций ASL, но я не знаю, что это такое или где они документированы.

Я также знаю несколько альтернатив использованию NSLog, таких как NSLogger и CocoaLumberJack, но мы не готовы их реализовать в настоящее время.

Большое спасибо за любую помощь!

4b9b3361

Ответ 1

В этой записи в блогах Cocoanetics есть пример кода для доступа к системному журналу на iOS с использованием API ASL (Apple System Logger) (man page):

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);

Обратите внимание, что вам нужно опросить ASL, чтобы читать последние сообщения. Приведенный выше код также не сработает при запуске на симуляторе iPhone, но отлично работает на самом устройстве.

Если вы не хотите бороться с C ASL API, посмотрите на эту оболочку Objective-C, называемую ASLogger.

Ответ 2

Начиная с IOS 7, этот метод больше не будет работать. Apple удалила доступ к ASL из-за соображений безопасности.

Ответ 3

Вот быстрая реализация, если кто-то ищет ее:

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
}

Ответ 4

Пожилые люди предлагали работать отлично до iOS 9, но это не будет работать с iOS 10/XCode8.

Новый способ ведения журнала вводится в iOS10/XCode8, Unified Logging и Activity Tracing.

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

Пользователь для ведения журнала:

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