Fix error message when there's no xcode-select'ed Xcode
Summary: This error messaging is confusing for device only users. These users may only be running against a device **without xcode installed**, which is supported. However, we also need to handle the case where a user has a sim running and they haven't xcode-select'd as this will mean that the sim is working fine, but the user has no way of knowing why Flipper is not working. Reviewed By: passy Differential Revision: D34140277 fbshipit-source-id: f9b035b6c7918424d6131d1dfcdba10acf438fa8
This commit is contained in:
committed by
Facebook GitHub Bot
parent
9bee6759cb
commit
9973014116
@@ -75,6 +75,14 @@ test('test checkXcodeVersionMismatch with correct Simulator.app', () => {
|
|||||||
expect(invalidVersion).toEqual(undefined);
|
expect(invalidVersion).toEqual(undefined);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('test checkXcodeVersionMismatch with no running Simulator.app', () => {
|
||||||
|
const invalidVersion = checkXcodeVersionMismatch(
|
||||||
|
[],
|
||||||
|
'/Applications/Xcode.app/Contents/Developer',
|
||||||
|
);
|
||||||
|
expect(invalidVersion).toEqual(undefined);
|
||||||
|
});
|
||||||
|
|
||||||
test('test checkXcodeVersionMismatch with an incorrect Simulator.app', () => {
|
test('test checkXcodeVersionMismatch with an incorrect Simulator.app', () => {
|
||||||
const invalidVersion = checkXcodeVersionMismatch(
|
const invalidVersion = checkXcodeVersionMismatch(
|
||||||
[
|
[
|
||||||
@@ -82,11 +90,31 @@ test('test checkXcodeVersionMismatch with an incorrect Simulator.app', () => {
|
|||||||
],
|
],
|
||||||
'/Applications/Xcode.app/Contents/Developer',
|
'/Applications/Xcode.app/Contents/Developer',
|
||||||
);
|
);
|
||||||
expect(invalidVersion).toEqual(
|
expect(invalidVersion).toContain(
|
||||||
'/Applications/Xcode_Incorrect.app/Contents/Developer',
|
'/Applications/Xcode_Incorrect.app/Contents/Developer',
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('test checkXcodeVersionMismatch with no sims running and no xcode-select', () => {
|
||||||
|
const invalidVersion = checkXcodeVersionMismatch(
|
||||||
|
[],
|
||||||
|
'/Library/Developer/CommandLineTools',
|
||||||
|
);
|
||||||
|
expect(invalidVersion).toEqual(undefined);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('test checkXcodeVersionMismatch with no sims running and no xcode-select', () => {
|
||||||
|
const invalidVersion = checkXcodeVersionMismatch(
|
||||||
|
[
|
||||||
|
'/Applications/Xcode.app/Contents/Developer/Applications/Simulator.app/Contents/MacOS/Simulator',
|
||||||
|
],
|
||||||
|
'/Library/Developer/CommandLineTools',
|
||||||
|
);
|
||||||
|
expect(invalidVersion).toContain(
|
||||||
|
'A Simulator is running and "xcode-select" has not been used',
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
test('test queryDevices when simctl used', async () => {
|
test('test queryDevices when simctl used', async () => {
|
||||||
const ios = new IOSDeviceManager(
|
const ios = new IOSDeviceManager(
|
||||||
fakeFlipperServer,
|
fakeFlipperServer,
|
||||||
|
|||||||
@@ -204,18 +204,17 @@ export class IOSDeviceManager {
|
|||||||
.toString()
|
.toString()
|
||||||
.split('\n')
|
.split('\n')
|
||||||
.filter((application) => application.length > 0);
|
.filter((application) => application.length > 0);
|
||||||
const mismatchedVersion = checkXcodeVersionMismatch(
|
const errorMessage = checkXcodeVersionMismatch(
|
||||||
runningSimulatorApplications,
|
runningSimulatorApplications,
|
||||||
xcodeCLIVersion,
|
xcodeCLIVersion,
|
||||||
);
|
);
|
||||||
if (mismatchedVersion === undefined) {
|
if (errorMessage === undefined) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const errorMessage = `Xcode version mismatch: Simulator is running from "${mismatchedVersion}" while Xcode CLI is "${xcodeCLIVersion}". Running "xcode-select --switch ${xcodeCLIVersion}" can fix this. For example: "sudo xcode-select -s /Applications/Xcode.app/Contents/Developer"`;
|
|
||||||
this.flipperServer.emit('notification', {
|
this.flipperServer.emit('notification', {
|
||||||
type: 'error',
|
type: 'error',
|
||||||
title: 'Xcode version mismatch',
|
title: 'Xcode version mismatch',
|
||||||
description: '' + errorMessage,
|
description: errorMessage,
|
||||||
});
|
});
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.error('Failed to determine Xcode version:', e);
|
console.error('Failed to determine Xcode version:', e);
|
||||||
@@ -223,7 +222,7 @@ export class IOSDeviceManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export function checkXcodeVersionMismatch(
|
function confirmSimulatorAppMatchesThatOfXcodeSelect(
|
||||||
runningSimulatorApps: Array<string>,
|
runningSimulatorApps: Array<string>,
|
||||||
xcodeCLIVersion: string,
|
xcodeCLIVersion: string,
|
||||||
): string | undefined {
|
): string | undefined {
|
||||||
@@ -241,3 +240,23 @@ export function checkXcodeVersionMismatch(
|
|||||||
}
|
}
|
||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function checkXcodeVersionMismatch(
|
||||||
|
runningSimulatorApps: Array<string>,
|
||||||
|
xcodeCLIVersion: string,
|
||||||
|
): string | undefined {
|
||||||
|
if (runningSimulatorApps.length === 0) {
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
if (xcodeCLIVersion == '/Library/Developer/CommandLineTools') {
|
||||||
|
return `A Simulator is running and "xcode-select" has not been used, please run "xcode-select" for the Xcode that is running the simulator at ${runningSimulatorApps}`;
|
||||||
|
}
|
||||||
|
const mismatchedVersion = confirmSimulatorAppMatchesThatOfXcodeSelect(
|
||||||
|
runningSimulatorApps,
|
||||||
|
xcodeCLIVersion,
|
||||||
|
);
|
||||||
|
if (mismatchedVersion === undefined) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
return `Xcode version mismatch: Simulator is running from "${mismatchedVersion}" while Xcode CLI is "${xcodeCLIVersion}". Running "xcode-select --switch ${xcodeCLIVersion}" can fix this. For example: "sudo xcode-select -s /Applications/Xcode.app/Contents/Developer"`;
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user