2009-10-01 60 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