每个Mac都有一个型号标识符,例如"Macmini5,1“。(这些内容显示在系统信息应用程序中。)
如何通过编程获得此模型标识符字符串?
发布于 2013-11-19 21:30:36
您可以使用sysctl
#import <Foundation/Foundation.h>
#import <sys/sysctl.h>
NSString *ModelIdentifier()
{
NSString *result=@"Unknown Mac";
size_t len=0;
sysctlbyname("hw.model", NULL, &len, NULL, 0);
if (len) {
NSMutableData *data=[NSMutableData dataWithLength:len];
sysctlbyname("hw.model", [data mutableBytes], &len, NULL, 0);
result=[NSString stringWithUTF8String:[data bytes]];
}
return result;
}
发布于 2019-06-05 03:28:49
Answer from Ryan H是正确的,除了从null-terminated string
到Swift String
的错误转换,最后给出的结果是\0
符号,这可能是您不希望的,执行完全匹配。这是更正后的版本:
static private func modelIdentifier() -> String? {
let service = IOServiceGetMatchingService(kIOMasterPortDefault, IOServiceMatching("IOPlatformExpertDevice"))
defer { IOObjectRelease(service) }
if let modelData = IORegistryEntryCreateCFProperty(service, "model" as CFString, kCFAllocatorDefault, 0).takeRetainedValue() as? Data {
return modelData.withUnsafeBytes { (cString: UnsafePointer<UInt8>) -> String in
return String(cString: cString)
}
}
return nil
}
发布于 2015-05-26 10:44:44
CFStringRef model = IORegistryEntryCreateCFProperty(service,
CFSTR("model"),
kCFAllocatorDefault,
0); ? type is ok ?
我认为代码可能是这样的:
CFSDataRef model = IORegistryEntryCreateCFProperty(service,
CFSTR("model"),
kCFAllocatorDefault,
0);
https://stackoverflow.com/questions/20070333
复制相似问题