【问题标题】:How to identify a Mac System uniquely如何唯一识别 Mac 系统
【发布时间】:2012-06-20 06:10:38
【问题描述】:

我想通过代码唯一标识我的 mac 系统。我在关于这台 Mac 中找到了硬件 UUID。 那么如何以编程方式从 MAC OS X 访问唯一的 uuid。

如果对我的问题有任何替代建议,请提供给我。

【问题讨论】:

    标签: objective-c macos hardware-id


    【解决方案1】:

    所以,如果你不关心新的 AppStore 规则等......你去吧:

    - (NSString *)getSystemUUID {
        io_service_t platformExpert = IOServiceGetMatchingService(kIOMasterPortDefault,IOServiceMatching("IOPlatformExpertDevice"));
        if (!platformExpert)
            return nil;
    
        CFTypeRef serialNumberAsCFString = IORegistryEntryCreateCFProperty(platformExpert,CFSTR(kIOPlatformUUIDKey),kCFAllocatorDefault, 0);
        IOObjectRelease(platformExpert);
        if (!serialNumberAsCFString)
            return nil;
    
        return (__bridge NSString *)(serialNumberAsCFString);;
    }
    

    请注意:

    • 您需要将IOKit.framework 添加到您的项目中才能执行此操作 去工作。
    • 此代码符合 ARC;
    • 此代码是安全的,如果出现问题,它将返回 nil NSString
    • Apple 不保证所有未来的系统都将具有软件可读的序列号。
    • 开发人员不应对 序列号的格式,例如它的长度或它的字符 可能包含。

    【讨论】:

    • 是否应该在!serialNumberAsCFString 块内也调用IOObjectRelease(platformExpert);?只通读代码,这似乎是必要的。
    • 如果我们关心新的 AppStore 规则怎么办?
    • @tofutim 我想现在这可以在 AppStore 上运行,但未来苹果可能会实施类似于他们在 iOS 上已有的广告标识符方案。
    • 这是识别用户是否拥有“pro”或“paid”帐户的好方法,还是很容易被黑客入侵?
    • @TCB13 我相信最终的__bridge 需要是__bridge_transfer。正如所写,字符串会泄漏。
    【解决方案2】:

    从这里:https://stackoverflow.com/a/2754563/610351

    void get_platform_uuid(char * buf, int bufSize) {
        io_registry_entry_t ioRegistryRoot = IORegistryEntryFromPath(kIOMasterPortDefault, "IOService:/");
        CFStringRef uuidCf = (CFStringRef) IORegistryEntryCreateCFProperty(ioRegistryRoot, CFSTR(kIOPlatformUUIDKey), kCFAllocatorDefault, 0);
        IOObjectRelease(ioRegistryRoot);
        CFStringGetCString(uuidCf, buf, bufSize, kCFStringEncodingMacRoman);
        CFRelease(uuidCf);    
    }
    

    您可以将 CFStringGetCString 替换为对 NSString* 的简单转换。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多