Skip to content

Commit

Permalink
fix: correctly list ios devices and simulators (#1823)
Browse files Browse the repository at this point in the history
* fix: correctly list ios devices and simulators

* Update packages/cli-platform-ios/src/commands/runIOS/index.ts

Co-authored-by: Szymon Rybczak <szymon.rybczak@gmail.com>

* Update packages/cli-platform-ios/src/tools/listIOSDevices.ts

Co-authored-by: Szymon Rybczak <szymon.rybczak@gmail.com>

* fix no configuration passed to xcodebuild command

---------

Co-authored-by: Szymon Rybczak <szymon.rybczak@gmail.com>
  • Loading branch information
adamTrz and szymonrybczak authored Feb 9, 2023
1 parent 1e54606 commit 8068be3
Show file tree
Hide file tree
Showing 14 changed files with 318 additions and 584 deletions.
4 changes: 2 additions & 2 deletions packages/cli-platform-ios/src/commands/buildIOS/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,10 @@ import {Device} from '../../types';
import {BuildFlags, buildProject} from './buildProject';
import {getDestinationSimulator} from '../../tools/getDestinationSimulator';
import {selectFromInteractiveMode} from '../../tools/selectFromInteractiveMode';
import {getDevices} from '../../tools/getDevices';
import {getProjectInfo} from '../../tools/getProjectInfo';
import {checkIfConfigurationExists} from '../../tools/checkIfConfigurationExists';
import {getConfigurationScheme} from '../../tools/getConfigurationScheme';
import listIOSDevices from '../../tools/listIOSDevices';

export interface FlagsT extends BuildFlags {
configuration?: string;
Expand Down Expand Up @@ -136,7 +136,7 @@ async function buildIOS(_: Array<string>, ctx: Config, args: FlagsT) {
);
}

const devices = getDevices();
const devices = await listIOSDevices();

if (args.udid) {
const device = devices.find((d) => d.udid === args.udid);
Expand Down
43 changes: 25 additions & 18 deletions packages/cli-platform-ios/src/commands/runIOS/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ import {logger, CLIError} from '@react-native-community/cli-tools';
import {BuildFlags, buildProject} from '../buildIOS/buildProject';
import {iosBuildOptions} from '../buildIOS';
import {Device} from '../../types';
import listIOSDevices from './listIOSDevices';
import listIOSDevices from '../../tools/listIOSDevices';
import {checkIfConfigurationExists} from '../../tools/checkIfConfigurationExists';
import {getProjectInfo} from '../../tools/getProjectInfo';
import {getConfigurationScheme} from '../../tools/getConfigurationScheme';
Expand Down Expand Up @@ -99,7 +99,7 @@ async function runIOS(_: Array<string>, ctx: Config, args: FlagsT) {

const modifiedArgs = {...args, scheme, mode};

args.mode = getConfigurationScheme(
modifiedArgs.mode = getConfigurationScheme(
{scheme: args.scheme, mode: args.mode},
sourceDir,
);
Expand All @@ -110,15 +110,15 @@ async function runIOS(_: Array<string>, ctx: Config, args: FlagsT) {
} "${chalk.bold(xcodeProject.name)}"`,
);

if (args.listDevices) {
if (args.device || args.udid) {
const availableDevices = await listIOSDevices();
if (modifiedArgs.listDevices) {
if (modifiedArgs.device || modifiedArgs.udid) {
logger.warn(
`Both ${
args.device ? 'device' : 'udid'
modifiedArgs.device ? 'device' : 'udid'
} and "list-devices" parameters were passed to "run" command. We will list available devices and let you choose from one.`,
);
}
const availableDevices = await listIOSDevices();
const selectedDevice = await promptForDeviceSelection(availableDevices);
if (!selectedDevice) {
throw new CLIError(
Expand All @@ -132,10 +132,10 @@ async function runIOS(_: Array<string>, ctx: Config, args: FlagsT) {
}
}

const devices = await listIOSDevices();

if (!args.device && !args.udid && !args.simulator) {
const bootedDevices = devices.filter(({type}) => type === 'device');
if (!modifiedArgs.device && !modifiedArgs.udid && !modifiedArgs.simulator) {
const bootedDevices = availableDevices.filter(
({type, isAvailable}) => type === 'device' && isAvailable,
);

const simulators = getSimulators();
const bootedSimulators = Object.keys(simulators.devices)
Expand All @@ -162,29 +162,31 @@ async function runIOS(_: Array<string>, ctx: Config, args: FlagsT) {
);
}

if (args.device && args.udid) {
if (modifiedArgs.device && modifiedArgs.udid) {
return logger.error(
'The `device` and `udid` options are mutually exclusive.',
);
}

if (args.udid) {
const device = devices.find((d) => d.udid === args.udid);
if (modifiedArgs.udid) {
const device = availableDevices.find((d) => d.udid === modifiedArgs.udid);
if (!device) {
return logger.error(
`Could not find a device with udid: "${chalk.bold(
args.udid,
)}". ${printFoundDevices(devices)}`,
modifiedArgs.udid,
)}". ${printFoundDevices(availableDevices)}`,
);
}
if (device.type === 'simulator') {
return runOnSimulator(xcodeProject, scheme, modifiedArgs);
} else {
return runOnDevice(device, scheme, xcodeProject, modifiedArgs);
}
} else if (args.device) {
const physicalDevices = devices.filter((d) => d.type !== 'simulator');
const device = matchingDevice(physicalDevices, args.device);
} else if (modifiedArgs.device) {
const physicalDevices = availableDevices.filter(
({type}) => type !== 'simulator',
);
const device = matchingDevice(physicalDevices, modifiedArgs.device);
if (device) {
return runOnDevice(device, scheme, xcodeProject, modifiedArgs);
}
Expand Down Expand Up @@ -590,5 +592,10 @@ export default {
description:
'Path relative to project root where pre-built .app binary lives.',
},
{
name: '--list-devices',
description:
'List all available iOS devices and simulators and let you choose one to run the app. ',
},
],
};
26 changes: 0 additions & 26 deletions packages/cli-platform-ios/src/commands/runIOS/listIOSDevices.ts

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -888,43 +888,6 @@ describe('findMatchingSimulator', () => {
).toEqual(null);
});

it('should return AppleTV devices if in the list', () => {
expect(
findMatchingSimulator(
{
devices: {
'com.apple.CoreSimulator.SimRuntime.tvOS-11-2': [
{
state: 'Booted',
availability: '(available)',
name: 'Apple TV',
udid: '816C30EA-38EA-41AC-BFDA-96FB632D522E',
},
{
state: 'Shutdown',
availability: '(available)',
name: 'Apple TV 4K',
udid: 'BCBB7E4B-D872-4D61-BC61-7C9805551075',
},
{
state: 'Shutdown',
availability: '(available)',
name: 'Apple TV 4K (at 1080p)',
udid: '1DE12308-1C14-4F0F-991E-A3ADC41BDFFC',
},
],
},
},
{simulator: 'Apple TV'},
),
).toEqual({
udid: '816C30EA-38EA-41AC-BFDA-96FB632D522E',
name: 'Apple TV',
booted: true,
version: 'tvOS 11.2',
});
});

it('should return a simulator by UDID', () => {
expect(
findMatchingSimulator(
Expand Down
Loading

0 comments on commit 8068be3

Please sign in to comment.