@@ -8,6 +8,7 @@ import * as path from "path";
88import * as os from "os" ;
99import xcode = require( "./xcode" ) ;
1010let bplistParser = require ( "bplist-parser" ) ;
11+ let plist = require ( "plist" ) ;
1112let osenv = require ( "osenv" ) ;
1213let isDeviceLogOperationStarted = false ;
1314let pid : string ;
@@ -26,10 +27,9 @@ export function getInstalledApplications(deviceId: string): IFuture<IApplication
2627 let applicationDirContents = fs . readdirSync ( fullApplicationPath ) ;
2728 let applicationName = _ . find ( applicationDirContents , fileName => path . extname ( fileName ) === ".app" ) ;
2829 let plistFilePath = path . join ( fullApplicationPath , applicationName , "Info.plist" ) ;
29- let applicationData = parseFile ( plistFilePath ) . wait ( ) ;
3030 result . push ( {
3131 guid : applicationGuid ,
32- appIdentifier : applicationData [ 0 ] . CFBundleIdentifier ,
32+ appIdentifier : getBundleIdentifier ( plistFilePath ) . wait ( ) ,
3333 path : path . join ( fullApplicationPath , applicationName )
3434 } ) ;
3535 }
@@ -96,4 +96,18 @@ function parseFile(plistFilePath: string): IFuture<any> {
9696 }
9797 } ) ;
9898 return future ;
99+ }
100+
101+ function getBundleIdentifier ( plistFilePath : string ) : IFuture < string > {
102+ return ( ( ) => {
103+ let plistData : any ;
104+ try {
105+ plistData = parseFile ( plistFilePath ) . wait ( ) [ 0 ] ;
106+ } catch ( err ) {
107+ let content = fs . readFileSync ( plistFilePath ) . toString ( ) ;
108+ plistData = plist . parse ( content ) ;
109+ }
110+
111+ return plistData && plistData . CFBundleIdentifier ;
112+ } ) . future < string > ( ) ( ) ;
99113}
0 commit comments