如何查找Mac OSX序列号。查找Mac OSX序列号
有时需要获取一个mac的序列号,然后您对此进行验证。
几年前,当我为OsiriX开发插件时,我需要同样的东西。我被要求以这种方式释放它,只有少数系统可以使用该插件。
如果我们得到比这更好的解决方案,那对我们所有人都会有帮助。
如何查找Mac OSX序列号。查找Mac OSX序列号
有时需要获取一个mac的序列号,然后您对此进行验证。
几年前,当我为OsiriX开发插件时,我需要同样的东西。我被要求以这种方式释放它,只有少数系统可以使用该插件。
如果我们得到比这更好的解决方案,那对我们所有人都会有帮助。
下面的代码主要是从Technical Note TN1103, 复制与小的修改,以返回NSString
,并使其与ARC编译:
#include <IOKit/IOKitLib.h>
- (NSString *)getSerialNumber
{
NSString *serial = nil;
io_service_t platformExpert = IOServiceGetMatchingService(kIOMasterPortDefault,
IOServiceMatching("IOPlatformExpertDevice"));
if (platformExpert) {
CFTypeRef serialNumberAsCFString =
IORegistryEntryCreateCFProperty(platformExpert,
CFSTR(kIOPlatformSerialNumberKey),
kCFAllocatorDefault, 0);
if (serialNumberAsCFString) {
serial = CFBridgingRelease(serialNumberAsCFString);
}
IOObjectRelease(platformExpert);
}
return serial;
}
你必须在IOKit.framework添加到您的构建设置。
这是解决方案的斯威夫特版本:
var serialNumber: String? {
let platformExpert = IOServiceGetMatchingService(kIOMasterPortDefault, IOServiceMatching("IOPlatformExpertDevice"))
guard platformExpert > 0 else {
return nil
}
guard let serialNumber = (IORegistryEntryCreateCFProperty(platformExpert, kIOPlatformSerialNumberKey as CFString, kCFAllocatorDefault, 0).takeUnretainedValue() as? String) else {
return nil
}
IOObjectRelease(platformExpert)
return serialNumber
}
写这个答案我做了一个SO搜索'kIOPlatformSerialNumberKey'这表明已经有含TN1103代码很多答案之后。 – 2013-03-16 16:10:58
是的,我知道:)我只想检查我的方式是否好。如果你,Arpad和duskwuff说....我明白了我的观点:) – 2013-03-16 16:27:25
这对于作为密码一部分的注册密钥的加密也很有用。 – Volomike 2016-01-16 21:13:36