查找Mac OSX序列号

Ano*_*dya 5 macos cocoa objective-c uniqueidentifier

如何查找Mac OSX序列号.

有时需要获取mac的序列号,并对此进行验证.

几年前,当我为OsiriX开发插件时,我需要同样的东西.我被要求以这种方式发布它,只有少数系统可以使用该插件.

如果我们得到比这更好的解决方案,这将对我们所有人都非常有帮助.

Mar*_*n R 18

以下代码主要从技术说明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;
}
Run Code Online (Sandbox Code Playgroud)

您必须将IOKit.framework添加到您的构建设置中.


gbd*_*vid 7

这是解决方案的 Swift 版本:

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
}
Run Code Online (Sandbox Code Playgroud)