6

Mac OSX のシリアル番号を見つける方法。

場合によっては、Mac のシリアル番号を取得する必要があり、それを検証します。

数年前にOsiriXのプラグインを開発したときと同じものが必要でした。そのような方法でリリースするように依頼されましたが、そのプラグインを使用できるシステムはごくわずかです。

これよりも優れた解決策が得られれば、それは私たち全員にとって非常に役立つでしょう.

4

3 に答える 3

18

次のコードは、主にテクニカルノートTN1103NSStringからコピーされていますが、を返し、 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を追加する必要があります。

于 2013-03-16T15:57:13.300 に答える
8

これは、ソリューションの 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
}
于 2016-02-18T16:10:28.110 に答える