2009-10-01 95 views

回答

1

使用ioreg命令,并grep收到的结果。简约的实现:

- (NSString*)getConnectedIphoneUIID 
{ 
NSTask *ioRegTask = [[NSTask alloc] init]; 
[ioRegTask setLaunchPath:@"/usr/sbin/ioreg"]; 
[ioRegTask setArguments:[NSArray arrayWithObjects:@"-Src",@"IOUSBDevice",nil]]; 

NSTask *grepTask = [[NSTask alloc] init]; 
[grepTask setLaunchPath:@"/usr/bin/grep"]; 
[grepTask setArguments:[NSArray arrayWithObjects:@"-i", @"usb serial number", nil]]; 

NSPipe *ioregToGrepPipe = [[NSPipe alloc] init]; 
[ioRegTask setStandardOutput:ioregToGrepPipe]; 
[grepTask setStandardInput:ioregToGrepPipe]; 

NSPipe *outputPipe = [[NSPipe alloc] init]; 
[grepTask setStandardOutput:outputPipe]; 
NSFileHandle *outputFileHandle = [[outputPipe fileHandleForReading] retain]; 

[ioRegTask launch]; 
[grepTask launch]; 


NSData *outputData = [[outputFileHandle readDataToEndOfFile] retain]; 

[ioRegTask release]; 
[grepTask release]; 
[outputData release]; 

NSString *nvcap = [[NSString alloc] initWithData:outputData encoding:NSUTF8StringEncoding]; 

    return nvcap; 
    } 

我可以把更多的检查,并进一步分析的结果,以确保它是一个真正的iPhone,以防万一有在那里上市的具有“USB序列号”多个设备属性集。检查“SupportsIPhoneOS”属性将进一步确认设备的身份。这样,我实际上可以建立连接的iPhone/iPod设备列表,并从“usb序列号”属性中获取它们的UUID。

+0

只是一个基于上面的内胆shell命令: ioreg -Src IOUSBDevice | perl -nle'打印$ 1 if/USB Serial Number。+“(\ w {40})”/' – 2011-11-17 12:49:15

-1

试试这个:

[[UIDevice device] uniqueIdentifier] 

为每个连接的设备。

+0

好的,但我怎样才能得到连接设备的列表?有没有办法从mac应用程序获取它? – luvieere 2009-10-01 15:20:05

0

苹果保持iPhone相当锁定。我不认为你会发现通过USB从iPhone上查询任何没有低级代码的事情很容易。

有你需要做的这个特殊的理由?你不能只看Xcode中的管理器窗口,看看哪些设备连接在那里?组织者显示UUID以及关于连接设备的更多信息,包括崩溃时间,iPhone控制台,屏幕截图和配置。

+0

我会第二次请求更多关于在这里尝试实现的数据。 – 2009-10-01 23:53:32

+0

我试图以编程方式获取数据,就像使用Windows COM iTunes API一样。根据获得的UUID,我应该为每个设备的身份验证和注册生成另一个密钥。无论如何,我需要区分连接到我的Mac机器的iPhone设备,就像iTunes API允许我在Windows中一样。 – luvieere 2009-10-02 00:17:02