老谭笔记

通过IOKit读取系统信息

关于系统的很多信息,例如序列号、磁盘信息、电池的信息、内存信息等等,我们都可以通过系统自带的“系统信息”这个工具可以查看到,如图:

iokit

但我们如何通过程序来获取这些信息呢,那就需要引入iokit这个framework,比如我们需要获取关于磁盘的一些信息,可以使用如下的代码来获取:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
- (void)iotest
{
io_iterator_t iterator;
kern_return_t kr;
io_object_t driver;
CFMutableDictionaryRef matchDictionary = IOServiceMatching("AppleAHCIDiskDriver");
kr = IOServiceGetMatchingServices(kIOMasterPortDefault, matchDictionary, &iterator);
if (kr != kIOReturnSuccess)
{
return;
}
while ((driver = IOIteratorNext(iterator)) != 0)
{
CFMutableDictionaryRef properties = NULL;
kr = IORegistryEntryCreateCFProperties(driver,
&properties,
kCFAllocatorDefault,
kNilOptions);
if (kr != kIOReturnSuccess || properties == NULL)
{
continue;
}
NSLog(@"%@",(__bridge NSDictionary*)properties);
}
}

但你可能会问,AppleAHCIDiskDriver这个字符串是如何取得的呢?在iokit中很多头文件中都定义了相应的宏来标识这个键值,当然如果你需要更详细的信息,你或许就需要使用苹果官方的IORegistryExplorer这个工具了,它可以详细的为你展示每一种硬件对应的这个键值和对应的属性列表,如图:

IORegistryExplorer

如果你需要获得其它硬件的信息,将代码中的AppleAHCIDiskDriver替换为对应的键值就OK了,比如要获取电池信息就用AppleSmartBattery。