Получение номера модели Mac в Какао - PullRequest
10 голосов
/ 11 сентября 2011

Я делаю приложение для OS X, где мне нужно получить модель Mac, например:

iMac11,3
MacBook3,1

И так далее. Есть ли какой-нибудь класс или функция для его получения?

Ответы [ 4 ]

22 голосов
/ 11 сентября 2011

Эта информация доступна через.sysctl:

#include <stdlib.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/sysctl.h>

size_t len = 0;
sysctlbyname("hw.model", NULL, &len, NULL, 0);
if (len) {
    char *model = malloc(len*sizeof(char));
    sysctlbyname("hw.model", model, &len, NULL, 0);
    printf("%s\n", model);
    free(model);
}
2 голосов
/ 11 сентября 2011

API для этого будет в IOKit.Глядя в приложение IORegistryExplorer на моем ноутбуке, я вижу, что первый узел в корне дерева IOService - это IOPlatformExpertDevice, запись которого под ключом "model" равна "MacBookPro6,1"

0 голосов
/ 11 сентября 2011

Я не уверен, есть ли точный способ получить его через Какао, но вы можете использовать NSTask и получить это через оболочку.


sysctl hw.model
0 голосов
/ 11 сентября 2011

Хотя прямой API-интерфейс Cocoa не используется, вы можете использовать NSTask для запуска инструмента командной строки «system_profiler». Если вы запустите инструмент как: "system_profiler SPHardwareDataType", он даст вам меньший вывод, который можно отфильтровать для извлечения идентификатора модели.

Обновление

Я нашел пример использования sysctl программно:

int mib[2];
size_t len = 0;
char *rstring = NULL;

mib[0] = CTL_HW;
mib[1] = HW_MODEL;
sysctl( mib, 2, NULL, &len, NULL, 0 );
rstring = malloc( len );
sysctl( mib, 2, rstring, &len, NULL, 0 );
NSLog(@"%s", rstring );
free( rstring );
rstring = NULL;

Источник отсюда .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...