@@ -8,6 +8,7 @@ import * as path from "path";
8
8
import * as os from "os" ;
9
9
import xcode = require( "./xcode" ) ;
10
10
let bplistParser = require ( "bplist-parser" ) ;
11
+ let plist = require ( "plist" ) ;
11
12
let osenv = require ( "osenv" ) ;
12
13
let isDeviceLogOperationStarted = false ;
13
14
let pid : string ;
@@ -26,10 +27,9 @@ export function getInstalledApplications(deviceId: string): IFuture<IApplication
26
27
let applicationDirContents = fs . readdirSync ( fullApplicationPath ) ;
27
28
let applicationName = _ . find ( applicationDirContents , fileName => path . extname ( fileName ) === ".app" ) ;
28
29
let plistFilePath = path . join ( fullApplicationPath , applicationName , "Info.plist" ) ;
29
- let applicationData = parseFile ( plistFilePath ) . wait ( ) ;
30
30
result . push ( {
31
31
guid : applicationGuid ,
32
- appIdentifier : applicationData [ 0 ] . CFBundleIdentifier ,
32
+ appIdentifier : getBundleIdentifier ( plistFilePath ) . wait ( ) ,
33
33
path : path . join ( fullApplicationPath , applicationName )
34
34
} ) ;
35
35
}
@@ -96,4 +96,18 @@ function parseFile(plistFilePath: string): IFuture<any> {
96
96
}
97
97
} ) ;
98
98
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 > ( ) ( ) ;
99
113
}
0 commit comments