如何在Mac OS X编程中获取UUID

时间:2018-11-13 10:39:14

标签: objective-c macos cocoa

我正在尝试使用此代码以可可编程方式访问Mac OS X UUID。

NSString *uuid = [[NSUUID UUID] UUIDString];

每当我访问uuid时,uuid每次都会返回一个唯一的ID,即使我没有重新安装应用程序,它也会不断变化。我需要知道如何在Mac OS X中访问UUID,无论我是重新安装应用程序还是重新编译,都相同,它应该保持不变。

在Ios中,我可以通过以下代码实现相同的目标。

NSString *iosuuid = [[[UIDevice currentDevice] identifierForVendor] UUIDString];

此处iosuuid返回uuid,即使我重新安装并重新编译我的应用程序,uuid也将保持不变。

不建议我使用Mac地址,我不想出于某些目的在应用程序中访问它。

1 个答案:

答案 0 :(得分:1)

如果有人在寻找简单的 Objective-C 解决方案时遇到这个问题 - 像下面这样的实现对我有用(在 macOS 11.2 上测试):

#import <IOKit/IOKitLib.h>

- (NSString *) getUUID {
    io_service_t platformExpert = IOServiceGetMatchingService(kIOMasterPortDefault,IOServiceMatching("IOPlatformExpertDevice"));
    if (!platformExpert) return nil;

    CFTypeRef serialNumberAsCFString = IORegistryEntryCreateCFProperty(platformExpert,CFSTR(kIOPlatformUUIDKey),kCFAllocatorDefault, 0);
    if (!serialNumberAsCFString) return nil;

    IOObjectRelease(platformExpert);
    return (__bridge NSString *)(serialNumberAsCFString);;
}

用于编译添加 IOKit 框架:

gcc -fobjc-arc -framework Cocoa -framework IOKit -x objective-c sources/** main.m -o app.bin

您可以使用如下简单的方式调用此函数:

int main () {
    ..
    NSString *uuid = self.getUUID;
    NSLog(@"uuid: %@", uuid);
    ..
}