Вызов sysctlbyname() с флагом hw.machine в iOS9

После сеанса WWDC 2015 «Конфиденциальность 703 и ваше приложение» внесены изменения с использованием sysctl. И теперь там мы больше не сможем вызывать kern.proc, kern.procargs, kern.procargs2 и видеть данные каких-либо других процессов, кроме своего самого. Это вполне законное усиление конфиденциальности со стороны Apple.

Кто-нибудь может подтвердить, что вызов sysctlbyname(...) с hw.machine для получения точного имени устройства разрешен в iOS9 и на него не распространяется упомянутое выше ограничение?


person topsky    schedule 24.08.2015    source источник


Ответы (1)


Да, я протестировал его с помощью Xcode7 beta5 в iPhone5 (установлен iOS9 beta5, а не симулятор).

+(NSString *) getDeviceModel {
    size_t size;
    sysctlbyname("hw.machine", NULL, &size, NULL, 0);
    char *model = malloc(size);
    sysctlbyname("hw.machine", model, &size, NULL, 0);
    NSString *deviceModel = [NSString stringWithCString:model encoding:NSUTF8StringEncoding];
    free(model);
    return deviceModel;
}

И возвращаемое значение — «iPhone5,2». Поэтому я подумал, что на имя устройства не влияет ограничение на функцию «sysctl».

person tounaobun    schedule 01.09.2015
comment
Привет, спасибо за ответ. Но на самом деле мой вопрос заключался в том, может ли Apple отклонить приложение, которое использует sysctlbyname с флагом hw.machine, или они просто отклоняют только те, которые используют флаги kern.proc? - person topsky; 03.09.2015
comment
Кстати, по той же причине сейчас не получается получить список запущенных приложений ((( - person Dmitry Isakov; 21.09.2015
comment
Я считаю, что это используется в CDVDevice.m Кордовы. Так что, если бы это было запрещено, Кордова не использовала бы его. У меня реальный вопрос: как мы можем проверить, что эта строка пришла с реального устройства? Мне это нужно, чтобы люди не могли создавать неограниченное количество учетных записей в моей социальной сети. - person Gregory Magarshak; 28.04.2017