// // NSObject+DeviceInfo.m // Connect // // Created by 朱东勇 on 2017/5/25. // Copyright © 2017年 innovator. All rights reserved. // /** "compatible" = <"iMac9,1"> "version" = <"1.0"> "board-id" = <"Mac-F2218EA9"> "IOInterruptSpecifiers" = (<0900000005000000>) "IOPolledInterface" = "SMCPolledInterface is not serializable" "serial-number" = <30544600000000000000000000313739343330303430544600000000000000000$ "IOInterruptControllers" = ("io-apic-0") "IOPlatformUUID" = "D0XXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXFB" "IOPlatformArgs" = <0060880280ffffff0010880280ffffff18de8c0280ffffff0000000000000000$ "clock-frequency" = <005a6b3f> "manufacturer" = <"Apple Inc."> "IOConsoleSecurityInterest" = "IOCommand is not serializable" "IOPlatformSerialNumber" = "17XXXXXXXTF" "system-type" = <01> "product-name" = <"iMac9,1"> "model" = <"iMac9,1"> "name" = <"/"> "IOBusyInterest" = "IOCommand is not serializable" */ #import "NSObject+DeviceInfo.h" NSString* GetDeviceInfo(NSString *key) { NSString *ret = nil; io_service_t platformExpert ; platformExpert = IOServiceGetMatchingService(kIOMasterPortDefault, IOServiceMatching("IOPlatformExpertDevice")) ; if (platformExpert) { CFTypeRef serialNumberAsCFString ; serialNumberAsCFString = IORegistryEntryCreateCFProperty(platformExpert, (__bridge CFStringRef)(key), kCFAllocatorDefault, 0) ; if (serialNumberAsCFString) { ret = [(__bridge NSString *)(serialNumberAsCFString) copy]; CFRelease(serialNumberAsCFString); serialNumberAsCFString = NULL; } IOObjectRelease(platformExpert); // platformExpert = 0; } return ret; } NSString *GetProductName() { NSData *data = (NSData*)GetDeviceInfo(@"product-name"); if ([data isKindOfClass:[NSString class]]) return (NSString*)data; return [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; } NSString *GetHardwareUUID() { NSData *data = (NSData*)GetDeviceInfo(@"IOPlatformUUID"); if ([data isKindOfClass:[NSString class]]) return (NSString*)data; return [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; } NSString *GetHardwareSerialNumber() { NSData *data = (NSData*)GetDeviceInfo(@"IOPlatformSerialNumber"); if ([data isKindOfClass:[NSString class]]) return (NSString*)data; return [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; } NSString *GetCompatible() { NSData *data = (NSData*)GetDeviceInfo(@"compatible"); if ([data isKindOfClass:[NSString class]]) return (NSString*)data; return [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; } NSString *GetSystemVersion() { @try { NSTask *task = [[NSTask alloc] init]; [task setLaunchPath: @"/usr/bin/sw_vers"]; NSArray *arguments = [NSArray arrayWithObjects: @"-productVersion", nil]; [task setArguments: arguments]; NSPipe *pipe = [NSPipe pipe]; [task setStandardOutput: pipe]; [task launch]; [task waitUntilExit]; if ([task terminationStatus] != 0) { NSLog(@"Error: Task terminated with non-zero status %d", [task terminationStatus]); return nil; } NSFileHandle *file = [pipe fileHandleForReading]; NSData *data = [file readDataToEndOfFile]; if (!data) { NSLog(@"Error: Failed to read data from task output pipe"); return nil; } NSString *string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; string = [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; return string; } @catch (NSException *exception) { NSLog(@"Exception: %@", exception); return nil; } }