Catch errors when querying physical devices
Summary: This is our #1 error and always means there's something off with the user's setup. Reviewed By: mweststrate Differential Revision: D26370974 fbshipit-source-id: 5e2644ce9de8a7d28614a22fab5ce54dab0561d3
This commit is contained in:
committed by
Facebook GitHub Bot
parent
92f3ab8ff4
commit
eff1ce5ba7
@@ -64,7 +64,8 @@ async function targets(idbPath: string): Promise<Array<DeviceTarget>> {
|
||||
// But idb is MUCH more CPU efficient than instruments, so
|
||||
// when installed, use it.
|
||||
if (await memoize(isAvailable)(idbPath)) {
|
||||
return safeExec(`${idbPath} list-targets --json`).then(({stdout}) =>
|
||||
return safeExec(`${idbPath} list-targets --json`)
|
||||
.then(({stdout}) =>
|
||||
// It is safe to assume this to be non-null as it only turns null
|
||||
// if the output redirection is misconfigured:
|
||||
// https://stackoverflow.com/questions/27786228/node-child-process-spawn-stdout-returning-as-null
|
||||
@@ -76,13 +77,18 @@ async function targets(idbPath: string): Promise<Array<DeviceTarget>> {
|
||||
.filter(Boolean)
|
||||
.map((line) => JSON.parse(line))
|
||||
.filter(({type}: IdbTarget) => type !== 'simulator')
|
||||
.map((target: IdbTarget) => {
|
||||
.map<DeviceTarget>((target: IdbTarget) => {
|
||||
return {udid: target.udid, type: 'physical', name: target.name};
|
||||
}),
|
||||
);
|
||||
)
|
||||
.catch((e: Error) => {
|
||||
console.warn('Failed to query idb for targets:', e);
|
||||
return [];
|
||||
});
|
||||
} else {
|
||||
await killOrphanedInstrumentsProcesses();
|
||||
return safeExec('instruments -s devices').then(({stdout}) =>
|
||||
return safeExec('instruments -s devices')
|
||||
.then(({stdout}) =>
|
||||
stdout!
|
||||
.toString()
|
||||
.split('\n')
|
||||
@@ -91,10 +97,14 @@ async function targets(idbPath: string): Promise<Array<DeviceTarget>> {
|
||||
.map((line) => /(.+) \([^(]+\) \[(.*)\]( \(Simulator\))?/.exec(line))
|
||||
.filter(notNull)
|
||||
.filter(([_match, _name, _udid, isSim]) => !isSim)
|
||||
.map(([_match, name, udid]) => {
|
||||
return {udid: udid, type: 'physical', name: name};
|
||||
.map<DeviceTarget>(([_match, name, udid]) => {
|
||||
return {udid, type: 'physical', name};
|
||||
}),
|
||||
);
|
||||
)
|
||||
.catch((e) => {
|
||||
console.warn('Failed to query instruments:', e);
|
||||
return [];
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user