如何查找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