123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- //
- // 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;
- }
- }
|